@rango-dev/queue-manager-rango-preset 0.1.10-next.98 → 0.1.11-next.2

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.
Files changed (41) hide show
  1. package/dist/actions/checkStatus.d.ts.map +1 -1
  2. package/dist/actions/createTransaction.d.ts.map +1 -1
  3. package/dist/actions/scheduleNextStep.d.ts.map +1 -1
  4. package/dist/constants.d.ts +1 -1
  5. package/dist/constants.d.ts.map +1 -1
  6. package/dist/helpers.d.ts +41 -13
  7. package/dist/helpers.d.ts.map +1 -1
  8. package/dist/hooks.d.ts.map +1 -1
  9. package/dist/index.d.ts +4 -11
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/numbers.d.ts +3 -0
  12. package/dist/numbers.d.ts.map +1 -0
  13. package/dist/queue-manager-rango-preset.cjs.development.js +511 -300
  14. package/dist/queue-manager-rango-preset.cjs.development.js.map +1 -1
  15. package/dist/queue-manager-rango-preset.cjs.production.min.js +1 -1
  16. package/dist/queue-manager-rango-preset.cjs.production.min.js.map +1 -1
  17. package/dist/queue-manager-rango-preset.esm.js +488 -286
  18. package/dist/queue-manager-rango-preset.esm.js.map +1 -1
  19. package/dist/shared-errors.d.ts +5 -37
  20. package/dist/shared-errors.d.ts.map +1 -1
  21. package/dist/shared-sentry.d.ts +1 -1
  22. package/dist/shared-sentry.d.ts.map +1 -1
  23. package/dist/shared.d.ts +35 -21
  24. package/dist/shared.d.ts.map +1 -1
  25. package/dist/types.d.ts +1 -0
  26. package/dist/types.d.ts.map +1 -1
  27. package/package.json +2 -2
  28. package/readme.md +1 -9
  29. package/src/actions/checkStatus.ts +54 -3
  30. package/src/actions/createTransaction.ts +2 -3
  31. package/src/actions/executeTransaction.ts +3 -3
  32. package/src/actions/scheduleNextStep.ts +1 -0
  33. package/src/constants.ts +1 -1
  34. package/src/helpers.ts +202 -172
  35. package/src/hooks.ts +2 -1
  36. package/src/index.ts +19 -44
  37. package/src/numbers.ts +68 -0
  38. package/src/shared-errors.ts +53 -76
  39. package/src/shared-sentry.ts +1 -1
  40. package/src/shared.ts +187 -58
  41. package/src/types.ts +1 -0
@@ -2,31 +2,19 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
+
7
+ var rangoTypes = require('rango-types');
5
8
  var walletsShared = require('@rango-dev/wallets-shared');
9
+ var BigNumber = _interopDefault(require('bignumber.js'));
6
10
  var walletsCore = require('@rango-dev/wallets-core');
7
11
  var rangoSdk = require('rango-sdk');
8
12
  var queueManagerCore = require('@rango-dev/queue-manager-core');
9
- var rangoTypes = require('rango-types');
10
13
  var Sentry = require('@sentry/browser');
11
14
  var queueManagerReact = require('@rango-dev/queue-manager-react');
12
15
  var react = require('react');
13
16
  var uuid = require('uuid');
14
17
 
15
- var SwapActionTypes;
16
- (function (SwapActionTypes) {
17
- SwapActionTypes["START"] = "START";
18
- SwapActionTypes["SCHEDULE_NEXT_STEP"] = "SCHEDULE_NEXT_STEP";
19
- SwapActionTypes["CREATE_TRANSACTION"] = "CREATE_TRANSACTION";
20
- SwapActionTypes["EXECUTE_TRANSACTION"] = "EXECUTE_TRANSACTION";
21
- SwapActionTypes["CHECK_TRANSACTION_STATUS"] = "CHECK_TRANSACTION_STATUS";
22
- })(SwapActionTypes || (SwapActionTypes = {}));
23
- var BlockReason;
24
- (function (BlockReason) {
25
- BlockReason["WAIT_FOR_CONNECT_WALLET"] = "waiting_for_connecting_wallet";
26
- BlockReason["WAIT_FOR_NETWORK_CHANGE"] = "waiting_for_network_change";
27
- BlockReason["DEPENDS_ON_OTHER_QUEUES"] = "depends_on_other_queues";
28
- })(BlockReason || (BlockReason = {}));
29
-
30
18
  function _regeneratorRuntime() {
31
19
  _regeneratorRuntime = function () {
32
20
  return exports;
@@ -452,46 +440,6 @@ function _assertThisInitialized(self) {
452
440
  return self;
453
441
  }
454
442
 
455
- var RANGO_DAPP_API_KEY = process.env.REACT_APP_API_KEY;
456
- var RANGO_DAPP_API_BASE_URL = process.env.REACT_APP_API_BASE_URL;
457
- var ERROR_MESSAGE_WAIT_FOR_WALLET = 'Waiting for connecting wallet';
458
- var ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET = function ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET(type, address) {
459
- return "Please change your " + (type || 'wallet') + " account to " + (address || 'proper address');
460
- };
461
- var ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION = function ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION(type) {
462
- return "Please connect to " + (type || 'your wallet') + " by using bellow button or top right button on page.";
463
- };
464
- var ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK = function ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK(network) {
465
- return "Please change your network to " + network + ".";
466
- };
467
-
468
- var APIErrorCode;
469
- (function (APIErrorCode) {
470
- APIErrorCode["TX_FAIL"] = "TX_FAIL";
471
- APIErrorCode["FETCH_TX_FAILED"] = "FETCH_TX_FAILED";
472
- APIErrorCode["USER_REJECT"] = "USER_REJECT";
473
- APIErrorCode["CALL_WALLET_FAILED"] = "CALL_WALLET_FAILED";
474
- APIErrorCode["SEND_TX_FAILED"] = "SEND_TX_FAILED";
475
- APIErrorCode["CALL_OR_SEND_FAILED"] = "CALL_OR_SEND_FAILED";
476
- APIErrorCode["USER_CANCEL"] = "USER_CANCEL";
477
- APIErrorCode["CLIENT_UNEXPECTED_BEHAVIOUR"] = "CLIENT_UNEXPECTED_BEHAVIOUR";
478
- })(APIErrorCode || (APIErrorCode = {}));
479
- var ApiMethodName;
480
- (function (ApiMethodName) {
481
- ApiMethodName["RequestingSwapTransaction"] = "Requesting Swap Transaction";
482
- ApiMethodName["CreatingSwap"] = "Creating Swap";
483
- ApiMethodName["CheckingTransactionStatus"] = "Checking transaction status";
484
- ApiMethodName["CreateTransaction"] = "Create Transaction";
485
- ApiMethodName["CheckApproval"] = "Check TX Approval";
486
- ApiMethodName["GettingSwapDetail"] = "Getting Swap Detail";
487
- ApiMethodName["GettingUserLimits"] = "Getting user limits";
488
- })(ApiMethodName || (ApiMethodName = {}));
489
- var TransactionName;
490
- (function (TransactionName) {
491
- TransactionName["GenericTransaction"] = "transaction";
492
- TransactionName["SendingOneInchTransaction"] = "1inch transaction";
493
- TransactionName["Approval"] = "approve transaction";
494
- })(TransactionName || (TransactionName = {}));
495
443
  var ERROR_ASSERTION_FAILED = 'Assertion failed (Unexpected behaviour)';
496
444
  var ERROR_CREATE_TRANSACTION = 'Create transaction failed in Rango Server';
497
445
  var ERROR_INPUT_WALLET_NOT_FOUND = 'Input wallet not found';
@@ -500,12 +448,17 @@ var PrettyError = /*#__PURE__*/function (_Error) {
500
448
  function PrettyError(code, m, root, detail) {
501
449
  var _this;
502
450
  _this = _Error.call(this, m) || this;
451
+ _this._isPrettyError = true;
503
452
  Object.setPrototypeOf(_assertThisInitialized(_this), PrettyError.prototype);
453
+ PrettyError.prototype._isPrettyError = true;
504
454
  _this.code = code;
505
455
  _this.detail = detail;
506
456
  _this.root = root;
507
457
  return _this;
508
458
  }
459
+ PrettyError.isPrettyError = function isPrettyError(obj) {
460
+ return obj instanceof PrettyError || Object.prototype.hasOwnProperty('_isPrettyError');
461
+ };
509
462
  var _proto = PrettyError.prototype;
510
463
  _proto.getErrorDetail = function getErrorDetail() {
511
464
  var rawMessage = typeof this.root === 'object' && this.root && this.root.error ? this.root.error : JSON.stringify(this.root);
@@ -517,33 +470,30 @@ var PrettyError = /*#__PURE__*/function (_Error) {
517
470
  };
518
471
  };
519
472
  PrettyError.AssertionFailed = function AssertionFailed(m) {
520
- return new PrettyError(APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR, ERROR_ASSERTION_FAILED, m);
473
+ return new PrettyError('CLIENT_UNEXPECTED_BEHAVIOUR', ERROR_ASSERTION_FAILED, m);
521
474
  };
522
475
  PrettyError.BadStatusCode = function BadStatusCode(message, statusCode) {
523
- return new PrettyError(APIErrorCode.TX_FAIL, message, null, "status code = " + statusCode);
476
+ return new PrettyError('TX_FAIL', message, null, "status code = " + statusCode);
524
477
  };
525
478
  PrettyError.CreateTransaction = function CreateTransaction(detail) {
526
- return new PrettyError(APIErrorCode.FETCH_TX_FAILED, ERROR_CREATE_TRANSACTION, null, detail);
479
+ return new PrettyError('FETCH_TX_FAILED', ERROR_CREATE_TRANSACTION, null, detail);
527
480
  };
528
481
  PrettyError.WalletMissing = function WalletMissing() {
529
- return new PrettyError(APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR, ERROR_INPUT_WALLET_NOT_FOUND, null, 'Server requested for a blockchain or address not selected by user');
482
+ return new PrettyError('CLIENT_UNEXPECTED_BEHAVIOUR', ERROR_INPUT_WALLET_NOT_FOUND, null, 'Server requested for a blockchain or address not selected by user');
530
483
  };
531
484
  PrettyError.BlockchainMissing = function BlockchainMissing() {
532
- return new PrettyError(APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR, ERROR_INPUT_WALLET_NOT_FOUND, null, 'Server requested for a blockchain or address not selected by user');
485
+ return new PrettyError('CLIENT_UNEXPECTED_BEHAVIOUR', ERROR_INPUT_WALLET_NOT_FOUND, null, 'Server requested for a blockchain or address not selected by user');
533
486
  };
534
487
  return PrettyError;
535
488
  }( /*#__PURE__*/_wrapNativeSuper(Error));
536
- function isAPIErrorCode(value) {
537
- return Object.values(APIErrorCode).includes(value);
538
- }
539
489
  function mapAppErrorCodesToAPIErrorCode(errorCode) {
540
- var defaultErrorCode = APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR;
490
+ var defaultErrorCode = 'CLIENT_UNEXPECTED_BEHAVIOUR';
541
491
  try {
542
492
  if (!errorCode) return defaultErrorCode;
543
- if (isAPIErrorCode(errorCode)) return errorCode;
493
+ if (rangoTypes.isAPIErrorCode(errorCode)) return errorCode;
544
494
  if (rangoTypes.isSignerErrorCode(errorCode)) {
545
495
  var _t;
546
- var t = (_t = {}, _t[rangoTypes.SignerErrorCode.REJECTED_BY_USER] = APIErrorCode.USER_REJECT, _t[rangoTypes.SignerErrorCode.SIGN_TX_ERROR] = APIErrorCode.CALL_WALLET_FAILED, _t[rangoTypes.SignerErrorCode.SEND_TX_ERROR] = APIErrorCode.SEND_TX_FAILED, _t[rangoTypes.SignerErrorCode.NOT_IMPLEMENTED] = defaultErrorCode, _t[rangoTypes.SignerErrorCode.OPERATION_UNSUPPORTED] = defaultErrorCode, _t[rangoTypes.SignerErrorCode.UNEXPECTED_BEHAVIOUR] = defaultErrorCode, _t);
496
+ var t = (_t = {}, _t[rangoTypes.SignerErrorCode.REJECTED_BY_USER] = 'USER_REJECT', _t[rangoTypes.SignerErrorCode.SIGN_TX_ERROR] = 'CALL_WALLET_FAILED', _t[rangoTypes.SignerErrorCode.SEND_TX_ERROR] = 'SEND_TX_FAILED', _t[rangoTypes.SignerErrorCode.NOT_IMPLEMENTED] = defaultErrorCode, _t[rangoTypes.SignerErrorCode.OPERATION_UNSUPPORTED] = defaultErrorCode, _t[rangoTypes.SignerErrorCode.UNEXPECTED_BEHAVIOUR] = defaultErrorCode, _t);
547
497
  return t[errorCode];
548
498
  }
549
499
  return defaultErrorCode;
@@ -551,21 +501,74 @@ function mapAppErrorCodesToAPIErrorCode(errorCode) {
551
501
  return defaultErrorCode;
552
502
  }
553
503
  }
504
+ var prettifyErrorMessage = function prettifyErrorMessage(obj) {
505
+ if (!obj) return {
506
+ extraMessage: '',
507
+ extraMessageErrorCode: null
508
+ };
509
+ if (PrettyError.isPrettyError(obj)) return obj.getErrorDetail();
510
+ if (rangoTypes.SignerError.isSignerError(obj)) {
511
+ var t = obj.getErrorDetail();
512
+ return {
513
+ extraMessage: t.message,
514
+ extraMessageDetail: t.detail,
515
+ extraMessageErrorCode: t.code
516
+ };
517
+ }
518
+ if (obj instanceof Error) return {
519
+ extraMessage: obj.toString(),
520
+ extraMessageErrorCode: null
521
+ };
522
+ if (typeof obj !== 'string') return {
523
+ extraMessage: JSON.stringify(obj),
524
+ extraMessageErrorCode: null
525
+ };
526
+ return {
527
+ extraMessage: obj,
528
+ extraMessageErrorCode: null
529
+ };
530
+ };
531
+
532
+ var numberToString = function numberToString(number, minDecimals, maxDecimals) {
533
+ if (minDecimals === void 0) {
534
+ minDecimals = null;
535
+ }
536
+ if (maxDecimals === void 0) {
537
+ maxDecimals = null;
538
+ }
539
+ if (number === null) return '';
540
+ if (number === '') return '';
541
+ var n = new BigNumber(number);
542
+ var roundingMode = 1;
543
+ var maxI = 1000;
544
+ for (var i = 0; i < 60; i++) {
545
+ if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {
546
+ maxI = i;
547
+ break;
548
+ }
549
+ }
550
+ if (n.gte(10000)) return n.toFormat(0, roundingMode);
551
+ if (n.gte(1000)) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))), roundingMode);
552
+ if (n.gte(100)) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))), roundingMode);
553
+ if (n.gte(1)) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))), roundingMode);
554
+ if (n.gte(0.01)) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))), roundingMode);
555
+ for (var _i = minDecimals || 4; _i < 17; _i++) if (n.gte(Math.pow(10, -_i))) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, _i))), roundingMode);
556
+ if (n.isEqualTo(0)) return '0';
557
+ return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))), roundingMode);
558
+ };
554
559
 
555
- var PendingSwapNetworkStatus;
556
560
  (function (PendingSwapNetworkStatus) {
557
561
  PendingSwapNetworkStatus["WaitingForConnectingWallet"] = "waitingForConnectingWallet";
558
562
  PendingSwapNetworkStatus["WaitingForQueue"] = "waitingForQueue";
559
563
  PendingSwapNetworkStatus["WaitingForNetworkChange"] = "waitingForNetworkChange";
560
564
  PendingSwapNetworkStatus["NetworkChanged"] = "networkChanged";
561
- })(PendingSwapNetworkStatus || (PendingSwapNetworkStatus = {}));
562
- var MessageSeverity;
565
+ })(exports.PendingSwapNetworkStatus || (exports.PendingSwapNetworkStatus = {}));
563
566
  (function (MessageSeverity) {
564
567
  MessageSeverity["error"] = "error";
565
568
  MessageSeverity["warning"] = "warning";
566
569
  MessageSeverity["info"] = "info";
567
570
  MessageSeverity["success"] = "success";
568
- })(MessageSeverity || (MessageSeverity = {}));
571
+ })(exports.MessageSeverity || (exports.MessageSeverity = {}));
569
572
  var getCurrentBlockchainOfOrNull = function getCurrentBlockchainOfOrNull(swap, step) {
570
573
  try {
571
574
  return getCurrentBlockchainOf(swap, step);
@@ -603,48 +606,22 @@ var getStarknetApproveUrl = function getStarknetApproveUrl(tx) {
603
606
  var getTronApproveUrl = function getTronApproveUrl(tx) {
604
607
  return 'https://tronscan.org/#/transaction/{txHash}'.replace('{txHash}', tx.toLowerCase());
605
608
  };
606
- var prettifyErrorMessage = function prettifyErrorMessage(obj) {
607
- if (!obj) return {
608
- extraMessage: '',
609
- extraMessageErrorCode: null
610
- };
611
- if (obj instanceof PrettyError) return obj.getErrorDetail();
612
- if (obj instanceof rangoTypes.SignerError) {
613
- var t = obj.getErrorDetail();
614
- return {
615
- extraMessage: t.message,
616
- extraMessageDetail: t.detail,
617
- extraMessageErrorCode: t.code
618
- };
619
- }
620
- if (obj instanceof Error) return {
621
- extraMessage: obj.toString(),
622
- extraMessageErrorCode: null
623
- };
624
- if (typeof obj !== 'string') return {
625
- extraMessage: JSON.stringify(obj),
626
- extraMessageErrorCode: null
627
- };
628
- return {
629
- extraMessage: obj,
630
- extraMessageErrorCode: null
631
- };
632
- };
633
609
  function getNextStep(swap, currentStep) {
634
610
  return swap.steps.find(function (step) {
635
611
  return step.status !== 'failed' && step.status !== 'success' && step.id !== currentStep.id;
636
612
  }) || null;
637
613
  }
638
- // TODO: we have samething in `helpers`, for fixing circular dependency, we copied and should be removed eventually.
614
+ /**
615
+ * Returns the wallet address, based on the current step of `PendingSwap`.
616
+ */
639
617
  var getCurrentAddressOf = function getCurrentAddressOf(swap, step) {
640
- var _step$evmTransaction2, _step$evmApprovalTran2, _step$cosmosTransacti2, _step$solanaTransacti2, _step$transferTransac2, _step$transferTransac3;
641
- var result = swap.wallets[((_step$evmTransaction2 = step.evmTransaction) == null ? void 0 : _step$evmTransaction2.blockChain) || ''] || swap.wallets[((_step$evmApprovalTran2 = step.evmApprovalTransaction) == null ? void 0 : _step$evmApprovalTran2.blockChain) || ''] || swap.wallets[((_step$cosmosTransacti2 = step.cosmosTransaction) == null ? void 0 : _step$cosmosTransacti2.blockChain) || ''] || swap.wallets[((_step$solanaTransacti2 = step.solanaTransaction) == null ? void 0 : _step$solanaTransacti2.blockChain) || ''] || ((_step$transferTransac2 = step.transferTransaction) != null && _step$transferTransac2.fromWalletAddress ? {
618
+ var _step$evmTransaction2, _step$evmApprovalTran2, _step$tronTransaction2, _step$tronApprovalTra2, _step$starknetTransac2, _step$starknetApprova2, _step$cosmosTransacti2, _step$solanaTransacti2, _step$transferTransac2, _step$transferTransac3;
619
+ var result = swap.wallets[((_step$evmTransaction2 = step.evmTransaction) == null ? void 0 : _step$evmTransaction2.blockChain) || ''] || swap.wallets[((_step$evmApprovalTran2 = step.evmApprovalTransaction) == null ? void 0 : _step$evmApprovalTran2.blockChain) || ''] || swap.wallets[((_step$tronTransaction2 = step.tronTransaction) == null ? void 0 : _step$tronTransaction2.blockChain) || ''] || swap.wallets[((_step$tronApprovalTra2 = step.tronApprovalTransaction) == null ? void 0 : _step$tronApprovalTra2.blockChain) || ''] || swap.wallets[((_step$starknetTransac2 = step.starknetTransaction) == null ? void 0 : _step$starknetTransac2.blockChain) || ''] || swap.wallets[((_step$starknetApprova2 = step.starknetApprovalTransaction) == null ? void 0 : _step$starknetApprova2.blockChain) || ''] || swap.wallets[((_step$cosmosTransacti2 = step.cosmosTransaction) == null ? void 0 : _step$cosmosTransacti2.blockChain) || ''] || swap.wallets[((_step$solanaTransacti2 = step.solanaTransaction) == null ? void 0 : _step$solanaTransacti2.blockChain) || ''] || ((_step$transferTransac2 = step.transferTransaction) != null && _step$transferTransac2.fromWalletAddress ? {
642
620
  address: (_step$transferTransac3 = step.transferTransaction) == null ? void 0 : _step$transferTransac3.fromWalletAddress
643
621
  } : null) || null;
644
622
  if (result == null) throw PrettyError.WalletMissing();
645
623
  return result.address;
646
624
  };
647
- // TODO: we have samething in `helpers`, for fixing circular dependency, we copied and should be removed eventually.
648
625
  function getRelatedWallet(swap, currentStep) {
649
626
  var walletAddress = getCurrentAddressOf(swap, currentStep);
650
627
  var walletKV = Object.keys(swap.wallets).map(function (k) {
@@ -669,6 +646,130 @@ function getRelatedWalletOrNull(swap, currentStep) {
669
646
  return null;
670
647
  }
671
648
  }
649
+ var getUsdPrice = function getUsdPrice(blockchain, symbol, address, allTokens) {
650
+ var token = allTokens == null ? void 0 : allTokens.find(function (t) {
651
+ var _t$symbol;
652
+ return t.blockchain === blockchain && ((_t$symbol = t.symbol) == null ? void 0 : _t$symbol.toUpperCase()) === (symbol == null ? void 0 : symbol.toUpperCase()) && t.address === address;
653
+ });
654
+ return (token == null ? void 0 : token.usdPrice) || null;
655
+ };
656
+ function getUsdFeeOfStep(step, allTokens) {
657
+ var totalFeeInUsd = new BigNumber(0);
658
+ for (var i = 0; i < step.fee.length; i++) {
659
+ var fee = step.fee[i];
660
+ if (fee.expenseType === 'DECREASE_FROM_OUTPUT') continue;
661
+ var unitPrice = getUsdPrice(fee.asset.blockchain, fee.asset.symbol, fee.asset.address, allTokens);
662
+ totalFeeInUsd = totalFeeInUsd.plus(new BigNumber(fee.amount).multipliedBy(unitPrice || 0));
663
+ }
664
+ return totalFeeInUsd;
665
+ }
666
+ function calculatePendingSwap(inputAmount, bestRoute, wallets, settings, validateBalanceOrFee, meta) {
667
+ var _bestRoute$result, _bestRoute$result$swa;
668
+ var simulationResult = bestRoute.result;
669
+ if (!simulationResult) throw Error('Simulation result should not be null');
670
+ return {
671
+ creationTime: new Date().getTime().toString(),
672
+ finishTime: null,
673
+ requestId: bestRoute.requestId || '',
674
+ inputAmount: inputAmount,
675
+ wallets: wallets,
676
+ status: 'running',
677
+ isPaused: false,
678
+ extraMessage: null,
679
+ extraMessageSeverity: null,
680
+ extraMessageDetail: null,
681
+ extraMessageErrorCode: null,
682
+ networkStatusExtraMessage: null,
683
+ networkStatusExtraMessageDetail: null,
684
+ lastNotificationTime: null,
685
+ settings: settings,
686
+ simulationResult: simulationResult,
687
+ validateBalanceOrFee: validateBalanceOrFee,
688
+ steps: ((_bestRoute$result = bestRoute.result) == null ? void 0 : (_bestRoute$result$swa = _bestRoute$result.swaps) == null ? void 0 : _bestRoute$result$swa.map(function (swap, index) {
689
+ return {
690
+ id: index + 1,
691
+ // from
692
+ fromBlockchain: swap.from.blockchain,
693
+ fromBlockchainLogo: swap.from.blockchainLogo,
694
+ fromLogo: swap.from.logo,
695
+ fromSymbol: swap.from.symbol,
696
+ fromSymbolAddress: swap.from.address,
697
+ fromDecimals: swap.from.decimals,
698
+ fromAmountPrecision: swap.fromAmountPrecision,
699
+ fromAmountMinValue: swap.fromAmountMinValue,
700
+ fromAmountMaxValue: swap.fromAmountMaxValue,
701
+ fromAmountRestrictionType: swap.fromAmountRestrictionType,
702
+ // to
703
+ toBlockchain: swap.to.blockchain,
704
+ toBlockchainLogo: swap.to.blockchainLogo,
705
+ toSymbol: swap.to.symbol,
706
+ toSymbolAddress: swap.to.address,
707
+ toDecimals: swap.to.decimals,
708
+ toLogo: swap.to.logo,
709
+ // swapper
710
+ swapperId: swap.swapperId,
711
+ swapperLogo: swap.swapperLogo,
712
+ swapperType: swap.swapperType,
713
+ // output, fee, timing
714
+ expectedOutputAmountHumanReadable: swap.toAmount,
715
+ outputAmount: '',
716
+ feeInUsd: meta ? numberToString(getUsdFeeOfStep(swap, meta == null ? void 0 : meta.tokens), null, 8) : null,
717
+ estimatedTimeInSeconds: swap.estimatedTimeInSeconds || null,
718
+ // status, tracking
719
+ status: 'created',
720
+ networkStatus: null,
721
+ startTransactionTime: new Date().getTime(),
722
+ externalTransactionId: null,
723
+ executedTransactionId: null,
724
+ executedTransactionTime: null,
725
+ explorerUrl: null,
726
+ diagnosisUrl: null,
727
+ trackingCode: null,
728
+ internalSteps: null,
729
+ // transactions
730
+ evmTransaction: null,
731
+ evmApprovalTransaction: null,
732
+ starknetTransaction: null,
733
+ starknetApprovalTransaction: null,
734
+ tronTransaction: null,
735
+ tronApprovalTransaction: null,
736
+ cosmosTransaction: null,
737
+ solanaTransaction: null,
738
+ transferTransaction: null,
739
+ // front fields
740
+ hasAlreadyProceededToSign: false
741
+ };
742
+ })) || []
743
+ };
744
+ }
745
+
746
+ var SwapActionTypes;
747
+ (function (SwapActionTypes) {
748
+ SwapActionTypes["START"] = "START";
749
+ SwapActionTypes["SCHEDULE_NEXT_STEP"] = "SCHEDULE_NEXT_STEP";
750
+ SwapActionTypes["CREATE_TRANSACTION"] = "CREATE_TRANSACTION";
751
+ SwapActionTypes["EXECUTE_TRANSACTION"] = "EXECUTE_TRANSACTION";
752
+ SwapActionTypes["CHECK_TRANSACTION_STATUS"] = "CHECK_TRANSACTION_STATUS";
753
+ })(SwapActionTypes || (SwapActionTypes = {}));
754
+ var BlockReason;
755
+ (function (BlockReason) {
756
+ BlockReason["WAIT_FOR_CONNECT_WALLET"] = "waiting_for_connecting_wallet";
757
+ BlockReason["WAIT_FOR_NETWORK_CHANGE"] = "waiting_for_network_change";
758
+ BlockReason["DEPENDS_ON_OTHER_QUEUES"] = "depends_on_other_queues";
759
+ })(BlockReason || (BlockReason = {}));
760
+
761
+ var RANGO_DAPP_API_KEY = process.env.REACT_APP_API_KEY;
762
+ var RANGO_DAPP_API_BASE_URL = process.env.REACT_APP_API_BASE_URL;
763
+ var ERROR_MESSAGE_WAIT_FOR_WALLET = 'Waiting for connecting wallet';
764
+ var ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET = function ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET(type, address) {
765
+ return "Please change your " + (type || 'wallet') + " account to " + (address || 'proper address');
766
+ };
767
+ var ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION = function ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION(type) {
768
+ return "Please connect to " + (type || 'your wallet') + " by using bellow button or top right button on page.";
769
+ };
770
+ var ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK = function ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK(network) {
771
+ return "Please change your network to " + network + ".";
772
+ };
672
773
 
673
774
  function logRPCError(error, swap, currentStep, walletType) {
674
775
  try {
@@ -713,12 +814,23 @@ function claimQueue() {
713
814
  };
714
815
  }
715
816
  /**
716
- *
817
+ * Sample inputs are:
818
+ * - "metamask-ETH"
819
+ * - "metamask-BSC-BSC:0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
820
+ * - "token-pocket-BSC-BSC:0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
717
821
  * Returns "wallet and network" separately, even if the wallet is dashed inside.
718
822
  *
719
823
  */
720
824
  function splitWalletNetwork(input) {
721
- return input == null ? void 0 : input.split(/-(?=[^-]*$)/);
825
+ var removedAddressInput = (input == null ? void 0 : input.split(':')[0]) || '';
826
+ var splittedInput = removedAddressInput.split('-');
827
+ var network = splittedInput[splittedInput.length - 1];
828
+ var walletNetwork = splittedInput.slice(0, -1);
829
+ if (walletNetwork[walletNetwork.length - 1] === network) {
830
+ walletNetwork.pop();
831
+ }
832
+ var wallet = walletNetwork.join('-');
833
+ return [wallet, network];
722
834
  }
723
835
  /**
724
836
  *
@@ -751,24 +863,26 @@ function updateSwapStatus(_ref) {
751
863
  if (!!nextStatus) swap.status = nextStatus;
752
864
  swap.hasAlreadyProceededToSign = hasAlreadyProceededToSign;
753
865
  if (!!nextStatus && ['failed', 'success'].includes(nextStatus)) swap.finishTime = new Date().getTime().toString();
754
- if (!!message) swap.extraMessage = message;
755
- if (!!details) swap.extraMessageDetail = details;
866
+ if (!!message || !!details) {
867
+ swap.extraMessage = message || '';
868
+ swap.extraMessageDetail = details || '';
869
+ }
756
870
  if (!!nextStepStatus && ['failed'].includes(nextStepStatus)) {
757
871
  var _getRelatedWalletOrNu;
758
872
  //if user cancel the swap, we should pass relevant reason to the server.
759
873
  var errorReason = details && details.includes('Warning') ? 'Swap canceled by user.' : details;
760
874
  var walletType = (_getRelatedWalletOrNu = getRelatedWalletOrNull(swap, currentStep)) == null ? void 0 : _getRelatedWalletOrNu.walletType;
761
- swap.extraMessageSeverity = MessageSeverity.error;
875
+ swap.extraMessageSeverity = exports.MessageSeverity.error;
762
876
  httpService.reportFailure({
763
877
  requestId: swap.requestId,
764
878
  step: (currentStep == null ? void 0 : currentStep.id) || 1,
765
- eventType: mapAppErrorCodesToAPIErrorCode(hasAlreadyProceededToSign ? APIErrorCode.TX_FAIL : errorCode),
879
+ eventType: mapAppErrorCodesToAPIErrorCode(errorCode),
766
880
  reason: errorReason || '',
767
881
  data: walletType ? {
768
882
  wallet: walletType
769
883
  } : undefined
770
884
  }).then()["catch"]();
771
- } else if (!!nextStepStatus && ['running'].includes(nextStepStatus)) swap.extraMessageSeverity = MessageSeverity.info;else if (!!nextStepStatus && ['success', 'approved'].includes(nextStepStatus)) swap.extraMessageSeverity = MessageSeverity.success;else if (nextStepStatus && ['waitingForApproval'].includes(nextStepStatus)) swap.extraMessageSeverity = MessageSeverity.warning;
885
+ } else if (!!nextStepStatus && ['running'].includes(nextStepStatus)) swap.extraMessageSeverity = exports.MessageSeverity.info;else if (!!nextStepStatus && ['success', 'approved'].includes(nextStepStatus)) swap.extraMessageSeverity = exports.MessageSeverity.success;else if (nextStepStatus && ['waitingForApproval'].includes(nextStepStatus)) swap.extraMessageSeverity = exports.MessageSeverity.warning;
772
886
  if (nextStepStatus === 'running' && currentStep) currentStep.startTransactionTime = new Date().getTime();
773
887
  setStorage(_extends({}, getStorage(), {
774
888
  swapDetails: swap
@@ -778,18 +892,32 @@ function updateSwapStatus(_ref) {
778
892
  step: currentStep
779
893
  };
780
894
  }
781
- function setStepTransactionIds(_ref2, txId, eventType, notifier) {
895
+ function setStepTransactionIds(_ref2, txId, notifier, eventType, approveUrl) {
782
896
  var getStorage = _ref2.getStorage,
783
897
  setStorage = _ref2.setStorage;
784
898
  var swap = getStorage().swapDetails;
785
899
  swap.hasAlreadyProceededToSign = null;
786
900
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
787
901
  var currentStep = getCurrentStep(swap);
788
- currentStep.executedTransactionId = txId || currentStep.executedTransactionId;
902
+ currentStep.executedTransactionId = txId;
903
+ currentStep.executedTransactionTime = new Date().getTime().toString();
904
+ if (!!approveUrl) currentStep.explorerUrl = [].concat(currentStep.explorerUrl || [], [{
905
+ url: approveUrl,
906
+ description: "approve"
907
+ }]);
908
+ if (eventType === 'check_tx_status') {
909
+ swap.extraMessage = 'Checking transaction status ...';
910
+ swap.extraMessageDetail = '';
911
+ swap.extraMessageSeverity = exports.MessageSeverity.info;
912
+ } else if (eventType === 'check_approve_tx_status') {
913
+ swap.extraMessage = 'Checking approve transaction status ...';
914
+ swap.extraMessageDetail = '';
915
+ swap.extraMessageSeverity = exports.MessageSeverity.info;
916
+ }
789
917
  setStorage(_extends({}, getStorage(), {
790
918
  swapDetails: swap
791
919
  }));
792
- notifier({
920
+ if (!!eventType) notifier({
793
921
  eventType: eventType,
794
922
  swap: swap,
795
923
  step: currentStep
@@ -816,11 +944,11 @@ function markRunningSwapAsWaitingForConnectingWallet(_ref3, reason, reasonDetail
816
944
  if (!currentStep) return;
817
945
  var currentTime = new Date();
818
946
  swap.lastNotificationTime = currentTime.getTime().toString();
819
- var isAlreadyMarked = currentStep.networkStatus === PendingSwapNetworkStatus.WaitingForConnectingWallet && swap.networkStatusExtraMessage === reason && swap.networkStatusExtraMessageDetail === reasonDetail;
947
+ var isAlreadyMarked = currentStep.networkStatus === exports.PendingSwapNetworkStatus.WaitingForConnectingWallet && swap.networkStatusExtraMessage === reason && swap.networkStatusExtraMessageDetail === reasonDetail;
820
948
  if (isAlreadyMarked) {
821
949
  return;
822
950
  }
823
- currentStep.networkStatus = PendingSwapNetworkStatus.WaitingForConnectingWallet;
951
+ currentStep.networkStatus = exports.PendingSwapNetworkStatus.WaitingForConnectingWallet;
824
952
  swap.networkStatusExtraMessage = reason;
825
953
  swap.networkStatusExtraMessageDetail = reasonDetail;
826
954
  setStorage(_extends({}, getStorage(), {
@@ -847,7 +975,7 @@ function markRunningSwapAsSwitchingNetwork(_ref4) {
847
975
  var reasonDetail = "Please change your " + type + " wallet network to " + fromBlockchain + ". " + metamaskMessage;
848
976
  var currentTime = new Date();
849
977
  swap.lastNotificationTime = currentTime.getTime().toString();
850
- currentStep.networkStatus = PendingSwapNetworkStatus.WaitingForNetworkChange;
978
+ currentStep.networkStatus = exports.PendingSwapNetworkStatus.WaitingForNetworkChange;
851
979
  swap.networkStatusExtraMessage = reason;
852
980
  swap.networkStatusExtraMessageDetail = reasonDetail;
853
981
  setStorage(_extends({}, getStorage(), {
@@ -864,13 +992,19 @@ function markRunningSwapAsSwitchingNetwork(_ref4) {
864
992
  */
865
993
  function markRunningSwapAsDependsOnOtherQueues(_ref5) {
866
994
  var getStorage = _ref5.getStorage,
867
- setStorage = _ref5.setStorage;
995
+ setStorage = _ref5.setStorage,
996
+ notifier = _ref5.notifier;
868
997
  var swap = getStorage().swapDetails;
869
998
  var currentStep = getCurrentStep(swap);
870
999
  if (!currentStep) return;
871
1000
  swap.networkStatusExtraMessage = '';
872
1001
  swap.networkStatusExtraMessageDetail = '';
873
- currentStep.networkStatus = PendingSwapNetworkStatus.WaitingForQueue;
1002
+ currentStep.networkStatus = exports.PendingSwapNetworkStatus.WaitingForQueue;
1003
+ notifier({
1004
+ eventType: 'waiting_for_queue',
1005
+ swap: swap,
1006
+ step: currentStep
1007
+ });
874
1008
  setStorage(_extends({}, getStorage(), {
875
1009
  swapDetails: swap
876
1010
  }));
@@ -1002,9 +1136,6 @@ function _getChainId() {
1002
1136
  function isNetworkMatchedForTransaction(_x2, _x3, _x4, _x5, _x6) {
1003
1137
  return _isNetworkMatchedForTransaction.apply(this, arguments);
1004
1138
  }
1005
- /**
1006
- * Returns the wallet address, based on the current step of `PendingSwap`.
1007
- */
1008
1139
  function _isNetworkMatchedForTransaction() {
1009
1140
  _isNetworkMatchedForTransaction = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(swap, step, wallet, meta, providers) {
1010
1141
  var fromBlockChain, sourceWallet, provider, chainId, blockChain;
@@ -1012,112 +1143,85 @@ function _isNetworkMatchedForTransaction() {
1012
1143
  while (1) switch (_context2.prev = _context2.next) {
1013
1144
  case 0:
1014
1145
  if (!isWalletNull(wallet)) {
1015
- _context2.next = 3;
1146
+ _context2.next = 2;
1016
1147
  break;
1017
1148
  }
1018
- console.warn('wallet object is null');
1019
1149
  return _context2.abrupt("return", false);
1020
- case 3:
1150
+ case 2:
1021
1151
  fromBlockChain = getCurrentBlockchainOfOrNull(swap, step);
1022
1152
  if (fromBlockChain) {
1023
- _context2.next = 6;
1153
+ _context2.next = 5;
1024
1154
  break;
1025
1155
  }
1026
1156
  return _context2.abrupt("return", false);
1027
- case 6:
1157
+ case 5:
1028
1158
  if (!meta.evmBasedChains.find(function (evmBlochain) {
1029
1159
  return evmBlochain.name === fromBlockChain;
1030
1160
  })) {
1031
- _context2.next = 30;
1161
+ _context2.next = 29;
1032
1162
  break;
1033
1163
  }
1034
- _context2.prev = 7;
1164
+ _context2.prev = 6;
1035
1165
  sourceWallet = swap.wallets[fromBlockChain];
1036
1166
  if (!sourceWallet) {
1037
- _context2.next = 24;
1167
+ _context2.next = 23;
1038
1168
  break;
1039
1169
  }
1040
1170
  if (![walletsShared.WalletType.META_MASK, walletsShared.WalletType.BINANCE_CHAIN, walletsShared.WalletType.XDEFI, walletsShared.WalletType.WALLET_CONNECT, walletsShared.WalletType.TRUST_WALLET, walletsShared.WalletType.COIN98, walletsShared.WalletType.EXODUS, walletsShared.WalletType.OKX, walletsShared.WalletType.COINBASE, walletsShared.WalletType.TOKEN_POCKET, walletsShared.WalletType.MATH, walletsShared.WalletType.SAFEPAL, walletsShared.WalletType.COSMOSTATION, walletsShared.WalletType.CLOVER, walletsShared.WalletType.BRAVE, walletsShared.WalletType.FRONTIER, walletsShared.WalletType.KUCOIN].includes(sourceWallet.walletType)) {
1041
- _context2.next = 23;
1171
+ _context2.next = 22;
1042
1172
  break;
1043
1173
  }
1044
1174
  provider = getEvmProvider(providers, sourceWallet.walletType);
1045
- _context2.next = 14;
1175
+ _context2.next = 13;
1046
1176
  return getChainId(provider);
1047
- case 14:
1177
+ case 13:
1048
1178
  chainId = _context2.sent;
1049
1179
  if (!chainId) {
1050
- _context2.next = 21;
1180
+ _context2.next = 20;
1051
1181
  break;
1052
1182
  }
1053
- blockChain = walletsShared.getBlockChainNameFromId(chainId, Object.entries(meta.blockchains).map(function (_ref7) {
1054
- var blockchainMeta = _ref7[1];
1183
+ blockChain = walletsShared.getBlockChainNameFromId(chainId, Object.entries(meta.blockchains).map(function (_ref6) {
1184
+ var blockchainMeta = _ref6[1];
1055
1185
  return blockchainMeta;
1056
1186
  }));
1057
1187
  if (!(blockChain && blockChain.toLowerCase() === fromBlockChain.toLowerCase())) {
1058
- _context2.next = 19;
1188
+ _context2.next = 18;
1059
1189
  break;
1060
1190
  }
1061
1191
  return _context2.abrupt("return", true);
1062
- case 19:
1192
+ case 18:
1063
1193
  if (!(blockChain && blockChain.toLowerCase() !== fromBlockChain.toLowerCase())) {
1064
- _context2.next = 21;
1194
+ _context2.next = 20;
1065
1195
  break;
1066
1196
  }
1067
1197
  return _context2.abrupt("return", false);
1068
- case 21:
1069
- _context2.next = 24;
1198
+ case 20:
1199
+ _context2.next = 23;
1070
1200
  break;
1071
- case 23:
1201
+ case 22:
1072
1202
  return _context2.abrupt("return", true);
1073
- case 24:
1074
- _context2.next = 29;
1203
+ case 23:
1204
+ _context2.next = 28;
1075
1205
  break;
1076
- case 26:
1077
- _context2.prev = 26;
1078
- _context2.t0 = _context2["catch"](7);
1206
+ case 25:
1207
+ _context2.prev = 25;
1208
+ _context2.t0 = _context2["catch"](6);
1079
1209
  console.log(_context2.t0);
1080
- case 29:
1210
+ case 28:
1081
1211
  return _context2.abrupt("return", false);
1082
- case 30:
1212
+ case 29:
1083
1213
  return _context2.abrupt("return", true);
1084
- case 31:
1214
+ case 30:
1085
1215
  case "end":
1086
1216
  return _context2.stop();
1087
1217
  }
1088
- }, _callee2, null, [[7, 26]]);
1218
+ }, _callee2, null, [[6, 25]]);
1089
1219
  }));
1090
1220
  return _isNetworkMatchedForTransaction.apply(this, arguments);
1091
1221
  }
1092
- var getCurrentAddressOf$1 = function getCurrentAddressOf(swap, step) {
1093
- var _step$evmTransaction, _step$evmApprovalTran, _step$tronTransaction, _step$tronApprovalTra, _step$starknetTransac, _step$starknetApprova, _step$cosmosTransacti, _step$solanaTransacti, _step$transferTransac, _step$transferTransac2;
1094
- var result = swap.wallets[((_step$evmTransaction = step.evmTransaction) == null ? void 0 : _step$evmTransaction.blockChain) || ''] || swap.wallets[((_step$evmApprovalTran = step.evmApprovalTransaction) == null ? void 0 : _step$evmApprovalTran.blockChain) || ''] || swap.wallets[((_step$tronTransaction = step.tronTransaction) == null ? void 0 : _step$tronTransaction.blockChain) || ''] || swap.wallets[((_step$tronApprovalTra = step.tronApprovalTransaction) == null ? void 0 : _step$tronApprovalTra.blockChain) || ''] || swap.wallets[((_step$starknetTransac = step.starknetTransaction) == null ? void 0 : _step$starknetTransac.blockChain) || ''] || swap.wallets[((_step$starknetApprova = step.starknetApprovalTransaction) == null ? void 0 : _step$starknetApprova.blockChain) || ''] || swap.wallets[((_step$cosmosTransacti = step.cosmosTransaction) == null ? void 0 : _step$cosmosTransacti.blockChain) || ''] || swap.wallets[((_step$solanaTransacti = step.solanaTransaction) == null ? void 0 : _step$solanaTransacti.blockChain) || ''] || ((_step$transferTransac = step.transferTransaction) != null && _step$transferTransac.fromWalletAddress ? {
1095
- address: (_step$transferTransac2 = step.transferTransaction) == null ? void 0 : _step$transferTransac2.fromWalletAddress
1096
- } : null) || null;
1097
- if (result == null) throw PrettyError.WalletMissing();
1098
- return result.address;
1099
- };
1100
- // Todo: Is it same with `getRequiredWallet`?
1101
- function getRelatedWallet$1(swap, currentStep) {
1102
- var walletAddress = getCurrentAddressOf$1(swap, currentStep);
1103
- var walletKV = Object.keys(swap.wallets).map(function (k) {
1104
- return {
1105
- k: k,
1106
- v: swap.wallets[k]
1107
- };
1108
- }).find(function (_ref6) {
1109
- var v = _ref6.v;
1110
- return v.address === walletAddress;
1111
- }) || null;
1112
- var blockchain = (walletKV == null ? void 0 : walletKV.k) || null;
1113
- var wallet = (walletKV == null ? void 0 : walletKV.v) || null;
1114
- var walletType = wallet == null ? void 0 : wallet.walletType;
1115
- if (walletType === walletsShared.WalletType.UNKNOWN || wallet === null) throw PrettyError.AssertionFailed("Wallet for source " + blockchain + " not passed: walletType: " + walletType);
1116
- return wallet;
1117
- }
1118
1222
  var isTxAlreadyCreated = function isTxAlreadyCreated(swap, step) {
1119
- var _step$evmTransaction2, _step$evmApprovalTran2, _step$tronTransaction2, _step$tronApprovalTra2, _step$starknetTransac2, _step$starknetApprova2, _step$cosmosTransacti2, _step$solanaTransacti2, _step$transferTransac3;
1120
- var result = swap.wallets[((_step$evmTransaction2 = step.evmTransaction) == null ? void 0 : _step$evmTransaction2.blockChain) || ''] || swap.wallets[((_step$evmApprovalTran2 = step.evmApprovalTransaction) == null ? void 0 : _step$evmApprovalTran2.blockChain) || ''] || swap.wallets[((_step$tronTransaction2 = step.tronTransaction) == null ? void 0 : _step$tronTransaction2.blockChain) || ''] || swap.wallets[((_step$tronApprovalTra2 = step.tronApprovalTransaction) == null ? void 0 : _step$tronApprovalTra2.blockChain) || ''] || swap.wallets[((_step$starknetTransac2 = step.starknetTransaction) == null ? void 0 : _step$starknetTransac2.blockChain) || ''] || swap.wallets[((_step$starknetApprova2 = step.starknetApprovalTransaction) == null ? void 0 : _step$starknetApprova2.blockChain) || ''] || swap.wallets[((_step$cosmosTransacti2 = step.cosmosTransaction) == null ? void 0 : _step$cosmosTransacti2.blockChain) || ''] || swap.wallets[((_step$solanaTransacti2 = step.solanaTransaction) == null ? void 0 : _step$solanaTransacti2.blockChain) || ''] || ((_step$transferTransac3 = step.transferTransaction) == null ? void 0 : _step$transferTransac3.fromWalletAddress) || null;
1223
+ var _step$evmTransaction, _step$evmApprovalTran, _step$tronTransaction, _step$tronApprovalTra, _step$starknetTransac, _step$starknetApprova, _step$cosmosTransacti, _step$solanaTransacti, _step$transferTransac;
1224
+ var result = swap.wallets[((_step$evmTransaction = step.evmTransaction) == null ? void 0 : _step$evmTransaction.blockChain) || ''] || swap.wallets[((_step$evmApprovalTran = step.evmApprovalTransaction) == null ? void 0 : _step$evmApprovalTran.blockChain) || ''] || swap.wallets[((_step$tronTransaction = step.tronTransaction) == null ? void 0 : _step$tronTransaction.blockChain) || ''] || swap.wallets[((_step$tronApprovalTra = step.tronApprovalTransaction) == null ? void 0 : _step$tronApprovalTra.blockChain) || ''] || swap.wallets[((_step$starknetTransac = step.starknetTransaction) == null ? void 0 : _step$starknetTransac.blockChain) || ''] || swap.wallets[((_step$starknetApprova = step.starknetApprovalTransaction) == null ? void 0 : _step$starknetApprova.blockChain) || ''] || swap.wallets[((_step$cosmosTransacti = step.cosmosTransaction) == null ? void 0 : _step$cosmosTransacti.blockChain) || ''] || swap.wallets[((_step$solanaTransacti = step.solanaTransaction) == null ? void 0 : _step$solanaTransacti.blockChain) || ''] || ((_step$transferTransac = step.transferTransaction) == null ? void 0 : _step$transferTransac.fromWalletAddress) || null;
1121
1225
  return result !== null;
1122
1226
  };
1123
1227
  function resetNetworkStatus(actions) {
@@ -1159,7 +1263,7 @@ function updateNetworkStatus(actions, data) {
1159
1263
  }
1160
1264
  /**
1161
1265
  * Event handler for blocked tasks.
1162
- * If a transcation execution is manually blocked (like for parallel or waiting for walle),
1266
+ * If a transcation execution is manually blocked (like for parallel or waiting for wallet),
1163
1267
  * This function will be called by queue manager using `queue definition`.
1164
1268
  *
1165
1269
  * It checks if the required wallet is connected, unblock the queue to be run.
@@ -1168,11 +1272,14 @@ function onBlockForConnectWallet(event, meta) {
1168
1272
  var context = meta.context,
1169
1273
  queue = meta.queue;
1170
1274
  var swap = queue.getStorage().swapDetails;
1171
- if (!isRequiredWalletConnected(swap, context.state)) {
1275
+ var _isRequiredWalletConn = isRequiredWalletConnected(swap, context.state),
1276
+ ok = _isRequiredWalletConn.ok,
1277
+ reason = _isRequiredWalletConn.reason;
1278
+ if (!ok) {
1172
1279
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
1173
1280
  var currentStep = getCurrentStep(swap);
1174
1281
  context.notifier({
1175
- eventType: 'waiting_for_connecting_wallet',
1282
+ eventType: reason === 'account_miss_match' ? 'waiting_for_change_wallet_account' : 'waiting_for_connecting_wallet',
1176
1283
  swap: swap,
1177
1284
  step: currentStep
1178
1285
  });
@@ -1224,7 +1331,7 @@ function onBlockForChangeNetwork(_event, meta) {
1224
1331
  }
1225
1332
  /**
1226
1333
  * Event handler for blocked tasks. (Parallel mode)
1227
- * If a transcation execution is manually blocked (like for parallel or waiting for walle),
1334
+ * If a transcation execution flow is manually blocked (like for parallel or waiting for walle),
1228
1335
  * This function will be called by queue manager using `queue definition`.
1229
1336
  *
1230
1337
  * It checks the blocked tasks, if there is no active `claimed` queue, try to give it to the best candidate.
@@ -1233,7 +1340,8 @@ function onDependsOnOtherQueues(_event, meta) {
1233
1340
  var getBlockedTasks = meta.getBlockedTasks,
1234
1341
  forceExecute = meta.forceExecute,
1235
1342
  queue = meta.queue,
1236
- manager = meta.manager;
1343
+ manager = meta.manager,
1344
+ context = meta.context;
1237
1345
  var _claimQueue = claimQueue(),
1238
1346
  setClaimer = _claimQueue.setClaimer,
1239
1347
  claimedBy = _claimQueue.claimedBy,
@@ -1247,12 +1355,14 @@ function onDependsOnOtherQueues(_event, meta) {
1247
1355
  }
1248
1356
  var claimerId = claimedBy();
1249
1357
  var isClaimedByAnyQueue = !!claimerId;
1358
+ if (claimerId === queue.id) return;
1250
1359
  // Check if any queue `claimed` before, if yes, we don't should do anything.
1251
1360
  if (isClaimedByAnyQueue) {
1252
1361
  // We need to keep the latest swap messages
1253
1362
  markRunningSwapAsDependsOnOtherQueues({
1254
1363
  getStorage: queue.getStorage.bind(queue),
1255
- setStorage: queue.setStorage.bind(queue)
1364
+ setStorage: queue.setStorage.bind(queue),
1365
+ notifier: context.notifier
1256
1366
  });
1257
1367
  return;
1258
1368
  }
@@ -1277,7 +1387,7 @@ function onDependsOnOtherQueues(_event, meta) {
1277
1387
  resetClaimedBy: function resetClaimedBy() {
1278
1388
  reset();
1279
1389
  // TODO: Use key generator
1280
- retryOn(type + "-" + network + "-" + address, manager);
1390
+ retryOn(type + "-" + network + ":" + address, context.notifier, manager);
1281
1391
  }
1282
1392
  });
1283
1393
  }
@@ -1286,16 +1396,28 @@ function isRequiredWalletConnected(swap, getState) {
1286
1396
  type = _getRequiredWallet4.type,
1287
1397
  address = _getRequiredWallet4.address;
1288
1398
  if (!type || !address) {
1289
- return false;
1399
+ return {
1400
+ ok: false,
1401
+ reason: 'not_connected'
1402
+ };
1290
1403
  }
1291
1404
  var walletState = getState(type);
1292
- var accounts = walletState.accounts;
1405
+ var accounts = walletState.accounts,
1406
+ connected = walletState.connected;
1293
1407
  var connectedAccounts = accounts || [];
1294
- return connectedAccounts.some(function (account) {
1408
+ if (!connected) return {
1409
+ ok: false,
1410
+ reason: 'not_connected'
1411
+ };
1412
+ var matched = connectedAccounts.some(function (account) {
1295
1413
  var _readAccountAddress = walletsCore.readAccountAddress(account),
1296
1414
  accountAddress = _readAccountAddress.address;
1297
1415
  return address === accountAddress;
1298
1416
  });
1417
+ return {
1418
+ ok: matched,
1419
+ reason: 'account_miss_match'
1420
+ };
1299
1421
  }
1300
1422
  function singTransaction(actions) {
1301
1423
  var getStorage = actions.getStorage,
@@ -1319,10 +1441,11 @@ function singTransaction(actions) {
1319
1441
  tronApprovalTransaction = currentStep.tronApprovalTransaction,
1320
1442
  starknetTransaction = currentStep.starknetTransaction,
1321
1443
  starknetApprovalTransaction = currentStep.starknetApprovalTransaction;
1322
- var sourceWallet = getRelatedWallet$1(swap, currentStep);
1323
- var walletAddress = getCurrentAddressOf$1(swap, currentStep);
1444
+ var sourceWallet = getRelatedWallet(swap, currentStep);
1445
+ var walletAddress = getCurrentAddressOf(swap, currentStep);
1324
1446
  var walletSigners = getSigners(sourceWallet.walletType);
1325
1447
  var onFinish = function onFinish() {
1448
+ // TODO resetClaimedBy is undefined here
1326
1449
  if (actions.context.resetClaimedBy) {
1327
1450
  actions.context.resetClaimedBy();
1328
1451
  }
@@ -1340,27 +1463,18 @@ function singTransaction(actions) {
1340
1463
  details: 'Waiting for approve transaction to be mined and confirmed successfully'
1341
1464
  });
1342
1465
  notifier(_extends({
1343
- eventType: 'confirm_contract'
1466
+ eventType: 'confirm_approve_contract'
1344
1467
  }, updateResult));
1345
1468
  // Execute transaction
1346
1469
  walletSigners.getSigner(rangoSdk.TransactionType.EVM).signAndSendTx(evmApprovalTransaction, walletAddress, null).then(function (hash) {
1347
- console.debug('transaction of approval minted successfully', hash);
1348
1470
  var approveUrl = getEvmApproveUrl(hash, getCurrentBlockchainOf(swap, currentStep), meta.evmBasedChains);
1349
- currentStep.explorerUrl = [].concat(currentStep.explorerUrl || [], [{
1350
- url: approveUrl,
1351
- description: "approve"
1352
- }]);
1353
- // `currentStep` has been mutated, let's update storage.
1354
- setStorage(_extends({}, getStorage(), {
1355
- swapDetails: swap
1356
- }));
1471
+ setStepTransactionIds(actions, hash, notifier, 'check_approve_tx_status', approveUrl);
1357
1472
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1358
1473
  next();
1359
1474
  onFinish();
1360
1475
  }, function (error) {
1361
1476
  var _error$root, _error$root2, _error$root3;
1362
1477
  if (swap.status === 'failed') return;
1363
- console.debug('error in approving', error);
1364
1478
  var _prettifyErrorMessage = prettifyErrorMessage(error),
1365
1479
  extraMessage = _prettifyErrorMessage.extraMessage,
1366
1480
  extraMessageDetail = _prettifyErrorMessage.extraMessageDetail,
@@ -1395,27 +1509,18 @@ function singTransaction(actions) {
1395
1509
  details: 'Waiting for approve transaction to be mined and confirmed successfully'
1396
1510
  });
1397
1511
  notifier(_extends({
1398
- eventType: 'confirm_contract'
1512
+ eventType: 'confirm_approve_contract'
1399
1513
  }, _updateResult));
1400
1514
  // Execute transaction
1401
1515
  walletSigners.getSigner(rangoSdk.TransactionType.TRON).signAndSendTx(tronApprovalTransaction, walletAddress, null).then(function (hash) {
1402
- console.debug('transaction of approval minted successfully', hash);
1403
1516
  var approveUrl = getTronApproveUrl(hash);
1404
- currentStep.explorerUrl = [].concat(currentStep.explorerUrl || [], [{
1405
- url: approveUrl,
1406
- description: "approve"
1407
- }]);
1408
- // `currentStep` has been mutated, let's update storage.
1409
- setStorage(_extends({}, getStorage(), {
1410
- swapDetails: swap
1411
- }));
1517
+ setStepTransactionIds(actions, hash, notifier, 'check_approve_tx_status', approveUrl);
1412
1518
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1413
1519
  next();
1414
1520
  onFinish();
1415
1521
  }, function (error) {
1416
1522
  var _error$root4, _error$root5, _error$root6;
1417
1523
  if (swap.status === 'failed') return;
1418
- console.debug('error in approving', error);
1419
1524
  var _prettifyErrorMessage2 = prettifyErrorMessage(error),
1420
1525
  extraMessage = _prettifyErrorMessage2.extraMessage,
1421
1526
  extraMessageDetail = _prettifyErrorMessage2.extraMessageDetail,
@@ -1450,27 +1555,18 @@ function singTransaction(actions) {
1450
1555
  details: 'Waiting for approve transaction to be mined and confirmed successfully'
1451
1556
  });
1452
1557
  notifier(_extends({
1453
- eventType: 'confirm_contract'
1558
+ eventType: 'confirm_approve_contract'
1454
1559
  }, _updateResult2));
1455
1560
  // Execute transaction
1456
1561
  walletSigners.getSigner(rangoSdk.TransactionType.STARKNET).signAndSendTx(starknetApprovalTransaction, walletAddress, null).then(function (hash) {
1457
- console.debug('transaction of approval minted successfully', hash);
1458
1562
  var approveUrl = getStarknetApproveUrl(hash);
1459
- currentStep.explorerUrl = [].concat(currentStep.explorerUrl || [], [{
1460
- url: approveUrl,
1461
- description: "approve"
1462
- }]);
1463
- // `currentStep` has been mutated, let's update storage.
1464
- setStorage(_extends({}, getStorage(), {
1465
- swapDetails: swap
1466
- }));
1563
+ setStepTransactionIds(actions, hash, notifier, 'check_approve_tx_status', approveUrl);
1467
1564
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1468
1565
  next();
1469
1566
  onFinish();
1470
1567
  }, function (error) {
1471
1568
  var _error$root7, _error$root8, _error$root9;
1472
1569
  if (swap.status === 'failed') return;
1473
- console.debug('error in approving', error);
1474
1570
  var _prettifyErrorMessage3 = prettifyErrorMessage(error),
1475
1571
  extraMessage = _prettifyErrorMessage3.extraMessage,
1476
1572
  extraMessageDetail = _prettifyErrorMessage3.extraMessageDetail,
@@ -1496,17 +1592,20 @@ function singTransaction(actions) {
1496
1592
  return;
1497
1593
  }
1498
1594
  var hasAlreadyProceededToSign = typeof swap.hasAlreadyProceededToSign === 'boolean';
1595
+ var nextStepStatusBasedOnHasAlreadyProceededToSign = hasAlreadyProceededToSign ? 'failed' : 'running';
1596
+ var errorCodeBasedOnHasAlreadyProceededToSign = hasAlreadyProceededToSign ? 'TX_EXPIRED' : null;
1499
1597
  var executeMessage = hasAlreadyProceededToSign ? 'Transaction is expired. Please try again' : 'executing transaction';
1500
1598
  var executeDetails = "" + (sourceWallet.walletType === walletsShared.WalletType.WALLET_CONNECT ? 'Check your mobile phone' : '');
1501
1599
  if (!!transferTransaction) {
1502
1600
  var _updateResult3 = updateSwapStatus({
1503
1601
  getStorage: getStorage,
1504
1602
  setStorage: setStorage,
1505
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1506
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1603
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1604
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1507
1605
  message: executeMessage,
1508
1606
  details: executeDetails,
1509
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1607
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1608
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1510
1609
  });
1511
1610
  var notification = getSwapNotitfication('confirm_transfer', _updateResult3);
1512
1611
  notifier(notification);
@@ -1515,7 +1614,7 @@ function singTransaction(actions) {
1515
1614
  onFinish();
1516
1615
  } else {
1517
1616
  walletSigners.getSigner(rangoSdk.TransactionType.TRANSFER).signAndSendTx(transferTransaction, walletAddress, null).then(function (txId) {
1518
- setStepTransactionIds(actions, txId, 'transfer_confirmed', notifier);
1617
+ setStepTransactionIds(actions, txId, notifier, 'check_tx_status');
1519
1618
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1520
1619
  next();
1521
1620
  onFinish();
@@ -1545,11 +1644,12 @@ function singTransaction(actions) {
1545
1644
  var _updateResult4 = updateSwapStatus({
1546
1645
  getStorage: getStorage,
1547
1646
  setStorage: setStorage,
1548
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1549
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1647
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1648
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1550
1649
  message: executeMessage,
1551
1650
  details: executeDetails,
1552
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1651
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1652
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1553
1653
  });
1554
1654
  var _notification = getSwapNotitfication('calling_smart_contract', _updateResult4);
1555
1655
  notifier(_notification);
@@ -1558,7 +1658,7 @@ function singTransaction(actions) {
1558
1658
  onFinish();
1559
1659
  } else {
1560
1660
  walletSigners.getSigner(rangoSdk.TransactionType.EVM).signAndSendTx(evmTransaction, walletAddress, null).then(function (id) {
1561
- setStepTransactionIds(actions, id, 'smart_contract_called', notifier);
1661
+ setStepTransactionIds(actions, id, notifier, 'check_tx_status');
1562
1662
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1563
1663
  next();
1564
1664
  onFinish();
@@ -1592,11 +1692,12 @@ function singTransaction(actions) {
1592
1692
  var _updateResult5 = updateSwapStatus({
1593
1693
  getStorage: getStorage,
1594
1694
  setStorage: setStorage,
1595
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1596
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1695
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1696
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1597
1697
  message: executeMessage,
1598
1698
  details: executeDetails,
1599
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1699
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1700
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1600
1701
  });
1601
1702
  var _notification2 = getSwapNotitfication('calling_smart_contract', _updateResult5);
1602
1703
  notifier(_notification2);
@@ -1631,7 +1732,7 @@ function singTransaction(actions) {
1631
1732
  walletSigners.getSigner(rangoSdk.TransactionType.COSMOS).signAndSendTx(cosmosTransaction, walletAddress, null).then(
1632
1733
  // todo
1633
1734
  function (id) {
1634
- setStepTransactionIds(actions, id, 'smart_contract_called', notifier);
1735
+ setStepTransactionIds(actions, id, notifier, 'check_tx_status');
1635
1736
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1636
1737
  next();
1637
1738
  onFinish();
@@ -1661,11 +1762,12 @@ function singTransaction(actions) {
1661
1762
  var _updateResult7 = updateSwapStatus({
1662
1763
  getStorage: getStorage,
1663
1764
  setStorage: setStorage,
1664
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1665
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1765
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1766
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1666
1767
  message: executeMessage,
1667
1768
  details: executeDetails,
1668
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1769
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1770
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1669
1771
  });
1670
1772
  var _notification3 = getSwapNotitfication('calling_smart_contract', _updateResult7);
1671
1773
  notifier(_notification3);
@@ -1675,7 +1777,7 @@ function singTransaction(actions) {
1675
1777
  } else {
1676
1778
  var tx = solanaTransaction;
1677
1779
  walletSigners.getSigner(rangoSdk.TransactionType.SOLANA).signAndSendTx(tx, walletAddress, null).then(function (txId) {
1678
- setStepTransactionIds(actions, txId, 'smart_contract_called', notifier);
1780
+ setStepTransactionIds(actions, txId, notifier, 'check_tx_status');
1679
1781
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1680
1782
  next();
1681
1783
  onFinish();
@@ -1705,11 +1807,12 @@ function singTransaction(actions) {
1705
1807
  var _updateResult8 = updateSwapStatus({
1706
1808
  getStorage: getStorage,
1707
1809
  setStorage: setStorage,
1708
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1709
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1810
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1811
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1710
1812
  message: executeMessage,
1711
1813
  details: executeDetails,
1712
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1814
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1815
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1713
1816
  });
1714
1817
  var _notification4 = getSwapNotitfication('calling_smart_contract', _updateResult8);
1715
1818
  notifier(_notification4);
@@ -1718,7 +1821,7 @@ function singTransaction(actions) {
1718
1821
  onFinish();
1719
1822
  } else {
1720
1823
  walletSigners.getSigner(rangoSdk.TransactionType.TRON).signAndSendTx(tronTransaction, walletAddress, null).then(function (id) {
1721
- setStepTransactionIds(actions, id, 'smart_contract_called', notifier);
1824
+ setStepTransactionIds(actions, id, notifier, 'check_tx_status');
1722
1825
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1723
1826
  next();
1724
1827
  onFinish();
@@ -1752,11 +1855,12 @@ function singTransaction(actions) {
1752
1855
  var _updateResult9 = updateSwapStatus({
1753
1856
  getStorage: getStorage,
1754
1857
  setStorage: setStorage,
1755
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1756
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1858
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1859
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1757
1860
  message: executeMessage,
1758
1861
  details: executeDetails,
1759
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1862
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1863
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1760
1864
  });
1761
1865
  var _notification5 = getSwapNotitfication('calling_smart_contract', _updateResult9);
1762
1866
  notifier(_notification5);
@@ -1765,7 +1869,7 @@ function singTransaction(actions) {
1765
1869
  onFinish();
1766
1870
  } else {
1767
1871
  walletSigners.getSigner(rangoSdk.TransactionType.STARKNET).signAndSendTx(starknetTransaction, walletAddress, null).then(function (id) {
1768
- setStepTransactionIds(actions, id, 'smart_contract_called', notifier);
1872
+ setStepTransactionIds(actions, id, notifier, 'check_tx_status');
1769
1873
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1770
1874
  next();
1771
1875
  onFinish();
@@ -1819,7 +1923,9 @@ function checkWaitingForConnectWalletChange(params) {
1819
1923
  var hasWaitingForConnect = Object.keys(q.list.state.tasks).some(function (taskId) {
1820
1924
  var _task$blockedFor;
1821
1925
  var task = q.list.state.tasks[taskId];
1822
- return task.status === queueManagerCore.Status.BLOCKED && [BlockReason.WAIT_FOR_CONNECT_WALLET].includes((_task$blockedFor = task.blockedFor) == null ? void 0 : _task$blockedFor.reason);
1926
+ return task.status === queueManagerCore.Status.BLOCKED &&
1927
+ // TODO double check later
1928
+ [BlockReason.WAIT_FOR_CONNECT_WALLET].includes((_task$blockedFor = task.blockedFor) == null ? void 0 : _task$blockedFor.reason);
1823
1929
  });
1824
1930
  if (currentStepRequiredWallet === wallet && hasWaitingForConnect && getCurrentBlockchainOfOrNull(swap, currentStep) != network) {
1825
1931
  var queueInstance = q.list;
@@ -1833,10 +1939,17 @@ function checkWaitingForConnectWalletChange(params) {
1833
1939
  },
1834
1940
  silent: true
1835
1941
  });
1836
- markRunningSwapAsSwitchingNetwork({
1942
+ var result = markRunningSwapAsSwitchingNetwork({
1837
1943
  getStorage: queueInstance.getStorage.bind(queueInstance),
1838
1944
  setStorage: queueInstance.setStorage.bind(queueInstance)
1839
1945
  });
1946
+ if (result) {
1947
+ params == null ? void 0 : params.notifier({
1948
+ eventType: 'waiting_for_network_change',
1949
+ swap: result.swap,
1950
+ step: result.step
1951
+ });
1952
+ }
1840
1953
  }
1841
1954
  }
1842
1955
  }
@@ -1867,6 +1980,49 @@ function checkWaitingForNetworkChange(manager) {
1867
1980
  }
1868
1981
  });
1869
1982
  }
1983
+ /**
1984
+ * Get list of all running swaps
1985
+ *
1986
+ * @param manager
1987
+ * @returns list of pending swaps
1988
+ */
1989
+ function getRunningSwaps(manager) {
1990
+ var queues = (manager == null ? void 0 : manager.getAll()) || new Map();
1991
+ var result = [];
1992
+ queues.forEach(function (q) {
1993
+ // retry only on affected queues
1994
+ var queueStorage = q.list.getStorage();
1995
+ var swap = queueStorage == null ? void 0 : queueStorage.swapDetails;
1996
+ if (!swap || swap.status !== 'running') return;
1997
+ result.push(swap);
1998
+ });
1999
+ return result;
2000
+ }
2001
+ /**
2002
+ *
2003
+ * Trying to reset notifications for pending swaps to correct message on page load.
2004
+ * We could remove this after supporting auto connect for wallets.
2005
+ *
2006
+ * @param swaps
2007
+ * @param notifier
2008
+ * @returns
2009
+ */
2010
+ function resetRunningSwapNotifsOnPageLoad(runningSwaps, notifier) {
2011
+ runningSwaps.forEach(function (swap) {
2012
+ var currentStep = getCurrentStep(swap);
2013
+ var eventType;
2014
+ if ((currentStep == null ? void 0 : currentStep.networkStatus) === exports.PendingSwapNetworkStatus.WaitingForQueue) eventType = 'waiting_for_queue';else if ((swap == null ? void 0 : swap.status) === 'running') {
2015
+ eventType = 'waiting_for_connecting_wallet';
2016
+ }
2017
+ if (!!eventType && !!notifier) {
2018
+ notifier({
2019
+ eventType: eventType,
2020
+ swap: swap,
2021
+ step: currentStep
2022
+ });
2023
+ }
2024
+ });
2025
+ }
1870
2026
  /**
1871
2027
  *
1872
2028
  * Try to run blocked tasks by wallet and network name.
@@ -1878,7 +2034,7 @@ function checkWaitingForNetworkChange(manager) {
1878
2034
  * @param manager
1879
2035
  * @returns
1880
2036
  */
1881
- function retryOn(wallet_network, manager, options) {
2037
+ function retryOn(wallet_network, notifier, manager, options) {
1882
2038
  var _finalQueueToBeRun;
1883
2039
  if (options === void 0) {
1884
2040
  options = {
@@ -1911,7 +2067,6 @@ function retryOn(wallet_network, manager, options) {
1911
2067
  }
1912
2068
  }
1913
2069
  });
1914
- // const isWaitingForConnectWallet = (status: Status) =>
1915
2070
  var finalQueueToBeRun = undefined;
1916
2071
  if (walletAndNetworkMatched.length > 0) {
1917
2072
  finalQueueToBeRun = walletAndNetworkMatched[0];
@@ -1920,7 +2075,8 @@ function retryOn(wallet_network, manager, options) {
1920
2075
  var currentQueue = walletAndNetworkMatched[i];
1921
2076
  markRunningSwapAsDependsOnOtherQueues({
1922
2077
  getStorage: currentQueue.getStorage.bind(currentQueue),
1923
- setStorage: currentQueue.setStorage.bind(currentQueue)
2078
+ setStorage: currentQueue.setStorage.bind(currentQueue),
2079
+ notifier: notifier
1924
2080
  });
1925
2081
  }
1926
2082
  }
@@ -1986,7 +2142,7 @@ function cancelSwap(swap) {
1986
2142
  });
1987
2143
  }
1988
2144
 
1989
- var INTERVAL_FOR_CHECK = 2000;
2145
+ var INTERVAL_FOR_CHECK = 3000;
1990
2146
  /**
1991
2147
  * Subscribe to status of swap transaction by checking from server periodically.
1992
2148
  * After getting the status, notify the user and schedule `SCHEDULE_NEXT_STEP`.
@@ -2033,7 +2189,7 @@ function _checkTransactionStatus() {
2033
2189
  outputAmount = ((_status = status) == null ? void 0 : _status.outputAmount) || (!!currentStep.outputAmount ? currentStep.outputAmount : null);
2034
2190
  prevOutputAmount = currentStep.outputAmount;
2035
2191
  swap.extraMessage = ((_status2 = status) == null ? void 0 : _status2.extraMessage) || swap.extraMessage;
2036
- swap.extraMessageSeverity = MessageSeverity.info;
2192
+ swap.extraMessageSeverity = exports.MessageSeverity.info;
2037
2193
  swap.extraMessageDetail = '';
2038
2194
  currentStep.status = ((_status3 = status) == null ? void 0 : _status3.status) || currentStep.status;
2039
2195
  currentStep.diagnosisUrl = ((_status4 = status) == null ? void 0 : _status4.diagnosisUrl) || currentStep.diagnosisUrl || null;
@@ -2044,6 +2200,7 @@ function _checkTransactionStatus() {
2044
2200
  if (!!newTransaction) {
2045
2201
  currentStep.status = 'created';
2046
2202
  currentStep.executedTransactionId = null;
2203
+ currentStep.executedTransactionTime = null;
2047
2204
  currentStep.transferTransaction = null;
2048
2205
  currentStep.cosmosTransaction = null;
2049
2206
  currentStep.evmTransaction = null;
@@ -2071,11 +2228,22 @@ function _checkTransactionStatus() {
2071
2228
  eventType: 'step_completed_with_output',
2072
2229
  swap: swap,
2073
2230
  step: currentStep
2074
- });
2231
+ });else if (prevOutputAmount === null && outputAmount === null) {
2232
+ // it is needed to set notification after reloading the page
2233
+ context.notifier({
2234
+ eventType: 'check_tx_status',
2235
+ swap: swap,
2236
+ step: currentStep
2237
+ });
2238
+ }
2075
2239
  if (currentStep.status === 'success') {
2076
2240
  nextStep = getNextStep(swap, currentStep);
2077
2241
  swap.extraMessageDetail = '';
2078
2242
  swap.extraMessage = !!nextStep ? "starting next step: " + nextStep.swapperId + ": " + nextStep.fromBlockchain + " -> " + nextStep.toBlockchain : '';
2243
+ } else if (currentStep.status === 'failed') {
2244
+ swap.extraMessage = 'Transaction failed in blockchain';
2245
+ swap.extraMessageSeverity = exports.MessageSeverity.error;
2246
+ swap.extraMessageDetail = '';
2079
2247
  }
2080
2248
  // Sync data with storage
2081
2249
  setStorage(_extends({}, getStorage(), {
@@ -2115,38 +2283,70 @@ function checkApprovalStatus(_x2) {
2115
2283
  */
2116
2284
  function _checkApprovalStatus() {
2117
2285
  _checkApprovalStatus = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref2) {
2118
- var getStorage, setStorage, next, schedule, retry, context, swap, currentStep, isApproved, response;
2286
+ var getStorage, setStorage, next, schedule, retry, failed, context, swap, currentStep, isApproved, response, updateResult;
2119
2287
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
2120
2288
  while (1) switch (_context2.prev = _context2.next) {
2121
2289
  case 0:
2122
- getStorage = _ref2.getStorage, setStorage = _ref2.setStorage, next = _ref2.next, schedule = _ref2.schedule, retry = _ref2.retry, context = _ref2.context;
2123
- swap = getStorage().swapDetails; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2290
+ getStorage = _ref2.getStorage, setStorage = _ref2.setStorage, next = _ref2.next, schedule = _ref2.schedule, retry = _ref2.retry, failed = _ref2.failed, context = _ref2.context;
2291
+ swap = getStorage().swapDetails; // double check it after fixing parallel
2292
+ // const onFinish = () => {
2293
+ // // TODO resetClaimedBy is undefined here
2294
+ // if (context.resetClaimedBy) {
2295
+ // context.resetClaimedBy();
2296
+ // }
2297
+ // };
2298
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2124
2299
  currentStep = getCurrentStep(swap);
2125
2300
  isApproved = false;
2126
2301
  _context2.prev = 4;
2127
2302
  _context2.next = 7;
2128
- return httpService.checkApproval(swap.requestId);
2303
+ return httpService.checkApproval(swap.requestId, currentStep.executedTransactionId || '');
2129
2304
  case 7:
2130
2305
  response = _context2.sent;
2131
2306
  isApproved = response.isApproved;
2307
+ if (!isApproved && response.txStatus === 'failed') {
2308
+ // approve transaction failed on
2309
+ // we should fail the whole swap
2310
+ updateResult = updateSwapStatus({
2311
+ getStorage: getStorage,
2312
+ setStorage: setStorage,
2313
+ nextStatus: 'failed',
2314
+ nextStepStatus: 'failed',
2315
+ errorCode: 'SEND_TX_FAILED',
2316
+ message: 'Approve transaction failed',
2317
+ details: 'Smart contract approval failed in blockchain.'
2318
+ });
2319
+ context.notifier(_extends({
2320
+ eventType: 'smart_contract_call_failed'
2321
+ }, updateResult));
2322
+ failed();
2323
+ // onFinish();
2324
+ } else if (!isApproved) {
2325
+ // it is needed to set notification after reloading the page
2326
+ context.notifier({
2327
+ eventType: 'check_approve_tx_status',
2328
+ swap: swap,
2329
+ step: currentStep
2330
+ });
2331
+ }
2132
2332
  _context2.next = 15;
2133
2333
  break;
2134
- case 11:
2135
- _context2.prev = 11;
2334
+ case 12:
2335
+ _context2.prev = 12;
2136
2336
  _context2.t0 = _context2["catch"](4);
2137
- console.error('Failed to check getApprovedAmount', _context2.t0);
2138
2337
  isApproved = false;
2139
2338
  case 15:
2140
2339
  if (!isApproved) {
2141
- _context2.next = 30;
2340
+ _context2.next = 31;
2142
2341
  break;
2143
2342
  }
2144
2343
  currentStep.status = 'approved';
2145
2344
  swap.extraMessage = "Spending " + currentStep.fromSymbol + " approved successfully.";
2146
2345
  swap.extraMessageDetail = null;
2147
- swap.extraMessageSeverity = MessageSeverity.success;
2346
+ swap.extraMessageSeverity = exports.MessageSeverity.success;
2148
2347
  currentStep.evmApprovalTransaction = null;
2149
2348
  currentStep.executedTransactionId = null;
2349
+ currentStep.executedTransactionTime = null;
2150
2350
  currentStep.starknetApprovalTransaction = null;
2151
2351
  currentStep.tronApprovalTransaction = null;
2152
2352
  setStorage(_extends({}, getStorage(), {
@@ -2159,18 +2359,18 @@ function _checkApprovalStatus() {
2159
2359
  });
2160
2360
  schedule(SwapActionTypes.SCHEDULE_NEXT_STEP);
2161
2361
  next();
2162
- _context2.next = 33;
2362
+ _context2.next = 34;
2163
2363
  break;
2164
- case 30:
2165
- _context2.next = 32;
2364
+ case 31:
2365
+ _context2.next = 33;
2166
2366
  return delay(2000);
2167
- case 32:
2168
- retry();
2169
2367
  case 33:
2368
+ retry();
2369
+ case 34:
2170
2370
  case "end":
2171
2371
  return _context2.stop();
2172
2372
  }
2173
- }, _callee2, null, [[4, 11]]);
2373
+ }, _callee2, null, [[4, 12]]);
2174
2374
  }));
2175
2375
  return _checkApprovalStatus.apply(this, arguments);
2176
2376
  }
@@ -2289,7 +2489,7 @@ function _createTransaction() {
2289
2489
  nextStepStatus: 'failed',
2290
2490
  message: extraMessage,
2291
2491
  details: extraMessageDetail,
2292
- errorCode: APIErrorCode.FETCH_TX_FAILED
2492
+ errorCode: 'FETCH_TX_FAILED'
2293
2493
  });
2294
2494
  context.notifier(_extends({
2295
2495
  eventType: 'task_failed'
@@ -2336,7 +2536,7 @@ function _executeTransaction() {
2336
2536
  currentStep = getCurrentStep(swap); // Resetting network status, so we will set it again during the running of this task.
2337
2537
  resetNetworkStatus(actions);
2338
2538
  /* Make sure wallet is connected and also the connected wallet is matched with tx by checking address. */
2339
- isWrongAddress = !isRequiredWalletConnected(swap, context.state);
2539
+ isWrongAddress = !isRequiredWalletConnected(swap, context.state).ok;
2340
2540
  if (!isWrongAddress) {
2341
2541
  _context.next = 15;
2342
2542
  break;
@@ -2361,13 +2561,13 @@ function _executeTransaction() {
2361
2561
  We only run one request at a time (In parallel mode).
2362
2562
  */
2363
2563
  needsToBlockQueue = isNeedBlockQueueForParallel(currentStep);
2364
- if (!(needsToBlockQueue && !isClaimed && context.claimedBy)) {
2564
+ if (!(needsToBlockQueue && !isClaimed)) {
2365
2565
  _context.next = 20;
2366
2566
  break;
2367
2567
  }
2368
2568
  _blockedFor = {
2369
2569
  reason: BlockReason.DEPENDS_ON_OTHER_QUEUES,
2370
- description: 'Waiting for other running tasks to be finished',
2570
+ description: 'Waiting for other swaps to complete',
2371
2571
  details: {}
2372
2572
  };
2373
2573
  requestBlock(_blockedFor);
@@ -2394,7 +2594,7 @@ function _executeTransaction() {
2394
2594
  updateNetworkStatus(actions, {
2395
2595
  message: '',
2396
2596
  details: 'Wallet network changed successfully',
2397
- status: PendingSwapNetworkStatus.NetworkChanged
2597
+ status: exports.PendingSwapNetworkStatus.NetworkChanged
2398
2598
  });
2399
2599
  case 32:
2400
2600
  // All the conditions are met. We can safely send the tx to wallet for sign.
@@ -2431,6 +2631,7 @@ function scheduleNextStep(_ref) {
2431
2631
  schedule(SwapActionTypes.EXECUTE_TRANSACTION);
2432
2632
  return next();
2433
2633
  }
2634
+ // TODO double check it after approval changes
2434
2635
  if (currentStep != null && currentStep.executedTransactionId) {
2435
2636
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
2436
2637
  return next();
@@ -2466,6 +2667,29 @@ function start(_ref) {
2466
2667
  next();
2467
2668
  }
2468
2669
 
2670
+ var _actions;
2671
+ /**
2672
+ *
2673
+ * The idea behind this queue is to be able dynamically add some steps.
2674
+ * After running a swap, it can be blocked (like on waiting for switch netwrok)
2675
+ * or waits for something happend (like checking status of a transaction from server)
2676
+ *
2677
+ */
2678
+ var swapQueueDef = {
2679
+ name: 'swap',
2680
+ actions: (_actions = {}, _actions[SwapActionTypes.START] = start, _actions[SwapActionTypes.SCHEDULE_NEXT_STEP] = scheduleNextStep, _actions[SwapActionTypes.CREATE_TRANSACTION] = createTransaction, _actions[SwapActionTypes.EXECUTE_TRANSACTION] = executeTransaction, _actions[SwapActionTypes.CHECK_TRANSACTION_STATUS] = checkStatus, _actions),
2681
+ run: [SwapActionTypes.START],
2682
+ whenTaskBlocked: function whenTaskBlocked(event, meta) {
2683
+ if (event.reason.reason === BlockReason.WAIT_FOR_CONNECT_WALLET) {
2684
+ onBlockForConnectWallet(event, meta);
2685
+ } else if (event.reason.reason === BlockReason.WAIT_FOR_NETWORK_CHANGE) {
2686
+ onBlockForChangeNetwork(event, meta);
2687
+ } else if (event.reason.reason === BlockReason.DEPENDS_ON_OTHER_QUEUES) {
2688
+ onDependsOnOtherQueues(event, meta);
2689
+ }
2690
+ }
2691
+ };
2692
+
2469
2693
  var MIGRATED_KEY = 'migratedToQueueManager';
2470
2694
  /**
2471
2695
  *
@@ -2657,9 +2881,10 @@ function useQueueManager(params) {
2657
2881
  checkWaitingForConnectWalletChange({
2658
2882
  evmChains: params.evmChains,
2659
2883
  wallet_network: params.lastConnectedWallet,
2660
- manager: manager
2884
+ manager: manager,
2885
+ notifier: params.notifier
2661
2886
  });
2662
- retryOn(params.lastConnectedWallet, manager);
2887
+ retryOn(params.lastConnectedWallet, params.notifier, manager);
2663
2888
  }
2664
2889
  }, [params.lastConnectedWallet]);
2665
2890
  react.useEffect(function () {
@@ -2674,34 +2899,20 @@ function useQueueManager(params) {
2674
2899
  }, [params.disconnectedWallet]);
2675
2900
  }
2676
2901
 
2677
- var _actions;
2678
- /**
2679
- *
2680
- * The idea behind this queue is to be able dynamically add some steps.
2681
- * After running a swap, it can be blocked (like on waiting for switch netwrok)
2682
- * or waits for something happend (like checking status of a transaction from server)
2683
- *
2684
- */
2685
- var swapQueueDef = {
2686
- name: 'swap',
2687
- actions: (_actions = {}, _actions[SwapActionTypes.START] = start, _actions[SwapActionTypes.SCHEDULE_NEXT_STEP] = scheduleNextStep, _actions[SwapActionTypes.CREATE_TRANSACTION] = createTransaction, _actions[SwapActionTypes.EXECUTE_TRANSACTION] = executeTransaction, _actions[SwapActionTypes.CHECK_TRANSACTION_STATUS] = checkStatus, _actions),
2688
- run: [SwapActionTypes.START],
2689
- whenTaskBlocked: function whenTaskBlocked(event, meta) {
2690
- if (event.reason.reason === BlockReason.WAIT_FOR_CONNECT_WALLET) {
2691
- onBlockForConnectWallet(event, meta);
2692
- } else if (event.reason.reason === BlockReason.WAIT_FOR_NETWORK_CHANGE) {
2693
- onBlockForChangeNetwork(event, meta);
2694
- } else if (event.reason.reason === BlockReason.DEPENDS_ON_OTHER_QUEUES) {
2695
- onDependsOnOtherQueues(event, meta);
2696
- }
2697
- }
2698
- };
2699
-
2902
+ exports.PrettyError = PrettyError;
2903
+ exports.calculatePendingSwap = calculatePendingSwap;
2700
2904
  exports.cancelSwap = cancelSwap;
2701
2905
  exports.checkWaitingForNetworkChange = checkWaitingForNetworkChange;
2906
+ exports.getCurrentBlockchainOfOrNull = getCurrentBlockchainOfOrNull;
2702
2907
  exports.getCurrentStep = getCurrentStep;
2703
2908
  exports.getEvmProvider = getEvmProvider;
2704
- exports.getRelatedWallet = getRelatedWallet$1;
2909
+ exports.getRelatedWallet = getRelatedWallet;
2910
+ exports.getRelatedWalletOrNull = getRelatedWalletOrNull;
2911
+ exports.getRequiredWallet = getRequiredWallet;
2912
+ exports.getRunningSwaps = getRunningSwaps;
2913
+ exports.prettifyErrorMessage = prettifyErrorMessage;
2914
+ exports.resetRunningSwapNotifsOnPageLoad = resetRunningSwapNotifsOnPageLoad;
2915
+ exports.splitWalletNetwork = splitWalletNetwork;
2705
2916
  exports.swapQueueDef = swapQueueDef;
2706
2917
  exports.updateSwapStatus = updateSwapStatus;
2707
2918
  exports.useMigration = useMigration;