@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
@@ -1,28 +1,14 @@
1
+ import { SignerError, isAPIErrorCode, isSignerErrorCode, SignerErrorCode } from 'rango-types';
1
2
  import { WalletType, Network, getBlockChainNameFromId } from '@rango-dev/wallets-shared';
3
+ import BigNumber from 'bignumber.js';
2
4
  import { readAccountAddress } from '@rango-dev/wallets-core';
3
5
  import { RangoClient, TransactionType } from 'rango-sdk';
4
6
  import { Status, Persistor, DB_NAME } from '@rango-dev/queue-manager-core';
5
- import { isSignerErrorCode, SignerErrorCode, SignerError } from 'rango-types';
6
7
  import { captureException } from '@sentry/browser';
7
8
  import { useManager } from '@rango-dev/queue-manager-react';
8
9
  import { useState, useEffect } from 'react';
9
10
  import { v4 } from 'uuid';
10
11
 
11
- var SwapActionTypes;
12
- (function (SwapActionTypes) {
13
- SwapActionTypes["START"] = "START";
14
- SwapActionTypes["SCHEDULE_NEXT_STEP"] = "SCHEDULE_NEXT_STEP";
15
- SwapActionTypes["CREATE_TRANSACTION"] = "CREATE_TRANSACTION";
16
- SwapActionTypes["EXECUTE_TRANSACTION"] = "EXECUTE_TRANSACTION";
17
- SwapActionTypes["CHECK_TRANSACTION_STATUS"] = "CHECK_TRANSACTION_STATUS";
18
- })(SwapActionTypes || (SwapActionTypes = {}));
19
- var BlockReason;
20
- (function (BlockReason) {
21
- BlockReason["WAIT_FOR_CONNECT_WALLET"] = "waiting_for_connecting_wallet";
22
- BlockReason["WAIT_FOR_NETWORK_CHANGE"] = "waiting_for_network_change";
23
- BlockReason["DEPENDS_ON_OTHER_QUEUES"] = "depends_on_other_queues";
24
- })(BlockReason || (BlockReason = {}));
25
-
26
12
  function _regeneratorRuntime() {
27
13
  _regeneratorRuntime = function () {
28
14
  return exports;
@@ -448,46 +434,6 @@ function _assertThisInitialized(self) {
448
434
  return self;
449
435
  }
450
436
 
451
- var RANGO_DAPP_API_KEY = process.env.REACT_APP_API_KEY;
452
- var RANGO_DAPP_API_BASE_URL = process.env.REACT_APP_API_BASE_URL;
453
- var ERROR_MESSAGE_WAIT_FOR_WALLET = 'Waiting for connecting wallet';
454
- var ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET = function ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET(type, address) {
455
- return "Please change your " + (type || 'wallet') + " account to " + (address || 'proper address');
456
- };
457
- var ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION = function ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION(type) {
458
- return "Please connect to " + (type || 'your wallet') + " by using bellow button or top right button on page.";
459
- };
460
- var ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK = function ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK(network) {
461
- return "Please change your network to " + network + ".";
462
- };
463
-
464
- var APIErrorCode;
465
- (function (APIErrorCode) {
466
- APIErrorCode["TX_FAIL"] = "TX_FAIL";
467
- APIErrorCode["FETCH_TX_FAILED"] = "FETCH_TX_FAILED";
468
- APIErrorCode["USER_REJECT"] = "USER_REJECT";
469
- APIErrorCode["CALL_WALLET_FAILED"] = "CALL_WALLET_FAILED";
470
- APIErrorCode["SEND_TX_FAILED"] = "SEND_TX_FAILED";
471
- APIErrorCode["CALL_OR_SEND_FAILED"] = "CALL_OR_SEND_FAILED";
472
- APIErrorCode["USER_CANCEL"] = "USER_CANCEL";
473
- APIErrorCode["CLIENT_UNEXPECTED_BEHAVIOUR"] = "CLIENT_UNEXPECTED_BEHAVIOUR";
474
- })(APIErrorCode || (APIErrorCode = {}));
475
- var ApiMethodName;
476
- (function (ApiMethodName) {
477
- ApiMethodName["RequestingSwapTransaction"] = "Requesting Swap Transaction";
478
- ApiMethodName["CreatingSwap"] = "Creating Swap";
479
- ApiMethodName["CheckingTransactionStatus"] = "Checking transaction status";
480
- ApiMethodName["CreateTransaction"] = "Create Transaction";
481
- ApiMethodName["CheckApproval"] = "Check TX Approval";
482
- ApiMethodName["GettingSwapDetail"] = "Getting Swap Detail";
483
- ApiMethodName["GettingUserLimits"] = "Getting user limits";
484
- })(ApiMethodName || (ApiMethodName = {}));
485
- var TransactionName;
486
- (function (TransactionName) {
487
- TransactionName["GenericTransaction"] = "transaction";
488
- TransactionName["SendingOneInchTransaction"] = "1inch transaction";
489
- TransactionName["Approval"] = "approve transaction";
490
- })(TransactionName || (TransactionName = {}));
491
437
  var ERROR_ASSERTION_FAILED = 'Assertion failed (Unexpected behaviour)';
492
438
  var ERROR_CREATE_TRANSACTION = 'Create transaction failed in Rango Server';
493
439
  var ERROR_INPUT_WALLET_NOT_FOUND = 'Input wallet not found';
@@ -496,12 +442,17 @@ var PrettyError = /*#__PURE__*/function (_Error) {
496
442
  function PrettyError(code, m, root, detail) {
497
443
  var _this;
498
444
  _this = _Error.call(this, m) || this;
445
+ _this._isPrettyError = true;
499
446
  Object.setPrototypeOf(_assertThisInitialized(_this), PrettyError.prototype);
447
+ PrettyError.prototype._isPrettyError = true;
500
448
  _this.code = code;
501
449
  _this.detail = detail;
502
450
  _this.root = root;
503
451
  return _this;
504
452
  }
453
+ PrettyError.isPrettyError = function isPrettyError(obj) {
454
+ return obj instanceof PrettyError || Object.prototype.hasOwnProperty('_isPrettyError');
455
+ };
505
456
  var _proto = PrettyError.prototype;
506
457
  _proto.getErrorDetail = function getErrorDetail() {
507
458
  var rawMessage = typeof this.root === 'object' && this.root && this.root.error ? this.root.error : JSON.stringify(this.root);
@@ -513,33 +464,30 @@ var PrettyError = /*#__PURE__*/function (_Error) {
513
464
  };
514
465
  };
515
466
  PrettyError.AssertionFailed = function AssertionFailed(m) {
516
- return new PrettyError(APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR, ERROR_ASSERTION_FAILED, m);
467
+ return new PrettyError('CLIENT_UNEXPECTED_BEHAVIOUR', ERROR_ASSERTION_FAILED, m);
517
468
  };
518
469
  PrettyError.BadStatusCode = function BadStatusCode(message, statusCode) {
519
- return new PrettyError(APIErrorCode.TX_FAIL, message, null, "status code = " + statusCode);
470
+ return new PrettyError('TX_FAIL', message, null, "status code = " + statusCode);
520
471
  };
521
472
  PrettyError.CreateTransaction = function CreateTransaction(detail) {
522
- return new PrettyError(APIErrorCode.FETCH_TX_FAILED, ERROR_CREATE_TRANSACTION, null, detail);
473
+ return new PrettyError('FETCH_TX_FAILED', ERROR_CREATE_TRANSACTION, null, detail);
523
474
  };
524
475
  PrettyError.WalletMissing = function WalletMissing() {
525
- return new PrettyError(APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR, ERROR_INPUT_WALLET_NOT_FOUND, null, 'Server requested for a blockchain or address not selected by user');
476
+ return new PrettyError('CLIENT_UNEXPECTED_BEHAVIOUR', ERROR_INPUT_WALLET_NOT_FOUND, null, 'Server requested for a blockchain or address not selected by user');
526
477
  };
527
478
  PrettyError.BlockchainMissing = function BlockchainMissing() {
528
- return new PrettyError(APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR, ERROR_INPUT_WALLET_NOT_FOUND, null, 'Server requested for a blockchain or address not selected by user');
479
+ return new PrettyError('CLIENT_UNEXPECTED_BEHAVIOUR', ERROR_INPUT_WALLET_NOT_FOUND, null, 'Server requested for a blockchain or address not selected by user');
529
480
  };
530
481
  return PrettyError;
531
482
  }( /*#__PURE__*/_wrapNativeSuper(Error));
532
- function isAPIErrorCode(value) {
533
- return Object.values(APIErrorCode).includes(value);
534
- }
535
483
  function mapAppErrorCodesToAPIErrorCode(errorCode) {
536
- var defaultErrorCode = APIErrorCode.CLIENT_UNEXPECTED_BEHAVIOUR;
484
+ var defaultErrorCode = 'CLIENT_UNEXPECTED_BEHAVIOUR';
537
485
  try {
538
486
  if (!errorCode) return defaultErrorCode;
539
487
  if (isAPIErrorCode(errorCode)) return errorCode;
540
488
  if (isSignerErrorCode(errorCode)) {
541
489
  var _t;
542
- var t = (_t = {}, _t[SignerErrorCode.REJECTED_BY_USER] = APIErrorCode.USER_REJECT, _t[SignerErrorCode.SIGN_TX_ERROR] = APIErrorCode.CALL_WALLET_FAILED, _t[SignerErrorCode.SEND_TX_ERROR] = APIErrorCode.SEND_TX_FAILED, _t[SignerErrorCode.NOT_IMPLEMENTED] = defaultErrorCode, _t[SignerErrorCode.OPERATION_UNSUPPORTED] = defaultErrorCode, _t[SignerErrorCode.UNEXPECTED_BEHAVIOUR] = defaultErrorCode, _t);
490
+ var t = (_t = {}, _t[SignerErrorCode.REJECTED_BY_USER] = 'USER_REJECT', _t[SignerErrorCode.SIGN_TX_ERROR] = 'CALL_WALLET_FAILED', _t[SignerErrorCode.SEND_TX_ERROR] = 'SEND_TX_FAILED', _t[SignerErrorCode.NOT_IMPLEMENTED] = defaultErrorCode, _t[SignerErrorCode.OPERATION_UNSUPPORTED] = defaultErrorCode, _t[SignerErrorCode.UNEXPECTED_BEHAVIOUR] = defaultErrorCode, _t);
543
491
  return t[errorCode];
544
492
  }
545
493
  return defaultErrorCode;
@@ -547,6 +495,61 @@ function mapAppErrorCodesToAPIErrorCode(errorCode) {
547
495
  return defaultErrorCode;
548
496
  }
549
497
  }
498
+ var prettifyErrorMessage = function prettifyErrorMessage(obj) {
499
+ if (!obj) return {
500
+ extraMessage: '',
501
+ extraMessageErrorCode: null
502
+ };
503
+ if (PrettyError.isPrettyError(obj)) return obj.getErrorDetail();
504
+ if (SignerError.isSignerError(obj)) {
505
+ var t = obj.getErrorDetail();
506
+ return {
507
+ extraMessage: t.message,
508
+ extraMessageDetail: t.detail,
509
+ extraMessageErrorCode: t.code
510
+ };
511
+ }
512
+ if (obj instanceof Error) return {
513
+ extraMessage: obj.toString(),
514
+ extraMessageErrorCode: null
515
+ };
516
+ if (typeof obj !== 'string') return {
517
+ extraMessage: JSON.stringify(obj),
518
+ extraMessageErrorCode: null
519
+ };
520
+ return {
521
+ extraMessage: obj,
522
+ extraMessageErrorCode: null
523
+ };
524
+ };
525
+
526
+ var numberToString = function numberToString(number, minDecimals, maxDecimals) {
527
+ if (minDecimals === void 0) {
528
+ minDecimals = null;
529
+ }
530
+ if (maxDecimals === void 0) {
531
+ maxDecimals = null;
532
+ }
533
+ if (number === null) return '';
534
+ if (number === '') return '';
535
+ var n = new BigNumber(number);
536
+ var roundingMode = 1;
537
+ var maxI = 1000;
538
+ for (var i = 0; i < 60; i++) {
539
+ if (new BigNumber(n.toFixed(i, roundingMode)).eq(n)) {
540
+ maxI = i;
541
+ break;
542
+ }
543
+ }
544
+ if (n.gte(10000)) return n.toFormat(0, roundingMode);
545
+ if (n.gte(1000)) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))), roundingMode);
546
+ if (n.gte(100)) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 1))), roundingMode);
547
+ if (n.gte(1)) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 2))), roundingMode);
548
+ if (n.gte(0.01)) return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 4))), roundingMode);
549
+ 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);
550
+ if (n.isEqualTo(0)) return '0';
551
+ return n.toFormat(Math.min(maxI, Math.min(maxDecimals || 100, Math.max(minDecimals || 0, 8))), roundingMode);
552
+ };
550
553
 
551
554
  var PendingSwapNetworkStatus;
552
555
  (function (PendingSwapNetworkStatus) {
@@ -599,48 +602,22 @@ var getStarknetApproveUrl = function getStarknetApproveUrl(tx) {
599
602
  var getTronApproveUrl = function getTronApproveUrl(tx) {
600
603
  return 'https://tronscan.org/#/transaction/{txHash}'.replace('{txHash}', tx.toLowerCase());
601
604
  };
602
- var prettifyErrorMessage = function prettifyErrorMessage(obj) {
603
- if (!obj) return {
604
- extraMessage: '',
605
- extraMessageErrorCode: null
606
- };
607
- if (obj instanceof PrettyError) return obj.getErrorDetail();
608
- if (obj instanceof SignerError) {
609
- var t = obj.getErrorDetail();
610
- return {
611
- extraMessage: t.message,
612
- extraMessageDetail: t.detail,
613
- extraMessageErrorCode: t.code
614
- };
615
- }
616
- if (obj instanceof Error) return {
617
- extraMessage: obj.toString(),
618
- extraMessageErrorCode: null
619
- };
620
- if (typeof obj !== 'string') return {
621
- extraMessage: JSON.stringify(obj),
622
- extraMessageErrorCode: null
623
- };
624
- return {
625
- extraMessage: obj,
626
- extraMessageErrorCode: null
627
- };
628
- };
629
605
  function getNextStep(swap, currentStep) {
630
606
  return swap.steps.find(function (step) {
631
607
  return step.status !== 'failed' && step.status !== 'success' && step.id !== currentStep.id;
632
608
  }) || null;
633
609
  }
634
- // TODO: we have samething in `helpers`, for fixing circular dependency, we copied and should be removed eventually.
610
+ /**
611
+ * Returns the wallet address, based on the current step of `PendingSwap`.
612
+ */
635
613
  var getCurrentAddressOf = function getCurrentAddressOf(swap, step) {
636
- var _step$evmTransaction2, _step$evmApprovalTran2, _step$cosmosTransacti2, _step$solanaTransacti2, _step$transferTransac2, _step$transferTransac3;
637
- 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 ? {
614
+ var _step$evmTransaction2, _step$evmApprovalTran2, _step$tronTransaction2, _step$tronApprovalTra2, _step$starknetTransac2, _step$starknetApprova2, _step$cosmosTransacti2, _step$solanaTransacti2, _step$transferTransac2, _step$transferTransac3;
615
+ 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 ? {
638
616
  address: (_step$transferTransac3 = step.transferTransaction) == null ? void 0 : _step$transferTransac3.fromWalletAddress
639
617
  } : null) || null;
640
618
  if (result == null) throw PrettyError.WalletMissing();
641
619
  return result.address;
642
620
  };
643
- // TODO: we have samething in `helpers`, for fixing circular dependency, we copied and should be removed eventually.
644
621
  function getRelatedWallet(swap, currentStep) {
645
622
  var walletAddress = getCurrentAddressOf(swap, currentStep);
646
623
  var walletKV = Object.keys(swap.wallets).map(function (k) {
@@ -665,6 +642,130 @@ function getRelatedWalletOrNull(swap, currentStep) {
665
642
  return null;
666
643
  }
667
644
  }
645
+ var getUsdPrice = function getUsdPrice(blockchain, symbol, address, allTokens) {
646
+ var token = allTokens == null ? void 0 : allTokens.find(function (t) {
647
+ var _t$symbol;
648
+ return t.blockchain === blockchain && ((_t$symbol = t.symbol) == null ? void 0 : _t$symbol.toUpperCase()) === (symbol == null ? void 0 : symbol.toUpperCase()) && t.address === address;
649
+ });
650
+ return (token == null ? void 0 : token.usdPrice) || null;
651
+ };
652
+ function getUsdFeeOfStep(step, allTokens) {
653
+ var totalFeeInUsd = new BigNumber(0);
654
+ for (var i = 0; i < step.fee.length; i++) {
655
+ var fee = step.fee[i];
656
+ if (fee.expenseType === 'DECREASE_FROM_OUTPUT') continue;
657
+ var unitPrice = getUsdPrice(fee.asset.blockchain, fee.asset.symbol, fee.asset.address, allTokens);
658
+ totalFeeInUsd = totalFeeInUsd.plus(new BigNumber(fee.amount).multipliedBy(unitPrice || 0));
659
+ }
660
+ return totalFeeInUsd;
661
+ }
662
+ function calculatePendingSwap(inputAmount, bestRoute, wallets, settings, validateBalanceOrFee, meta) {
663
+ var _bestRoute$result, _bestRoute$result$swa;
664
+ var simulationResult = bestRoute.result;
665
+ if (!simulationResult) throw Error('Simulation result should not be null');
666
+ return {
667
+ creationTime: new Date().getTime().toString(),
668
+ finishTime: null,
669
+ requestId: bestRoute.requestId || '',
670
+ inputAmount: inputAmount,
671
+ wallets: wallets,
672
+ status: 'running',
673
+ isPaused: false,
674
+ extraMessage: null,
675
+ extraMessageSeverity: null,
676
+ extraMessageDetail: null,
677
+ extraMessageErrorCode: null,
678
+ networkStatusExtraMessage: null,
679
+ networkStatusExtraMessageDetail: null,
680
+ lastNotificationTime: null,
681
+ settings: settings,
682
+ simulationResult: simulationResult,
683
+ validateBalanceOrFee: validateBalanceOrFee,
684
+ steps: ((_bestRoute$result = bestRoute.result) == null ? void 0 : (_bestRoute$result$swa = _bestRoute$result.swaps) == null ? void 0 : _bestRoute$result$swa.map(function (swap, index) {
685
+ return {
686
+ id: index + 1,
687
+ // from
688
+ fromBlockchain: swap.from.blockchain,
689
+ fromBlockchainLogo: swap.from.blockchainLogo,
690
+ fromLogo: swap.from.logo,
691
+ fromSymbol: swap.from.symbol,
692
+ fromSymbolAddress: swap.from.address,
693
+ fromDecimals: swap.from.decimals,
694
+ fromAmountPrecision: swap.fromAmountPrecision,
695
+ fromAmountMinValue: swap.fromAmountMinValue,
696
+ fromAmountMaxValue: swap.fromAmountMaxValue,
697
+ fromAmountRestrictionType: swap.fromAmountRestrictionType,
698
+ // to
699
+ toBlockchain: swap.to.blockchain,
700
+ toBlockchainLogo: swap.to.blockchainLogo,
701
+ toSymbol: swap.to.symbol,
702
+ toSymbolAddress: swap.to.address,
703
+ toDecimals: swap.to.decimals,
704
+ toLogo: swap.to.logo,
705
+ // swapper
706
+ swapperId: swap.swapperId,
707
+ swapperLogo: swap.swapperLogo,
708
+ swapperType: swap.swapperType,
709
+ // output, fee, timing
710
+ expectedOutputAmountHumanReadable: swap.toAmount,
711
+ outputAmount: '',
712
+ feeInUsd: meta ? numberToString(getUsdFeeOfStep(swap, meta == null ? void 0 : meta.tokens), null, 8) : null,
713
+ estimatedTimeInSeconds: swap.estimatedTimeInSeconds || null,
714
+ // status, tracking
715
+ status: 'created',
716
+ networkStatus: null,
717
+ startTransactionTime: new Date().getTime(),
718
+ externalTransactionId: null,
719
+ executedTransactionId: null,
720
+ executedTransactionTime: null,
721
+ explorerUrl: null,
722
+ diagnosisUrl: null,
723
+ trackingCode: null,
724
+ internalSteps: null,
725
+ // transactions
726
+ evmTransaction: null,
727
+ evmApprovalTransaction: null,
728
+ starknetTransaction: null,
729
+ starknetApprovalTransaction: null,
730
+ tronTransaction: null,
731
+ tronApprovalTransaction: null,
732
+ cosmosTransaction: null,
733
+ solanaTransaction: null,
734
+ transferTransaction: null,
735
+ // front fields
736
+ hasAlreadyProceededToSign: false
737
+ };
738
+ })) || []
739
+ };
740
+ }
741
+
742
+ var SwapActionTypes;
743
+ (function (SwapActionTypes) {
744
+ SwapActionTypes["START"] = "START";
745
+ SwapActionTypes["SCHEDULE_NEXT_STEP"] = "SCHEDULE_NEXT_STEP";
746
+ SwapActionTypes["CREATE_TRANSACTION"] = "CREATE_TRANSACTION";
747
+ SwapActionTypes["EXECUTE_TRANSACTION"] = "EXECUTE_TRANSACTION";
748
+ SwapActionTypes["CHECK_TRANSACTION_STATUS"] = "CHECK_TRANSACTION_STATUS";
749
+ })(SwapActionTypes || (SwapActionTypes = {}));
750
+ var BlockReason;
751
+ (function (BlockReason) {
752
+ BlockReason["WAIT_FOR_CONNECT_WALLET"] = "waiting_for_connecting_wallet";
753
+ BlockReason["WAIT_FOR_NETWORK_CHANGE"] = "waiting_for_network_change";
754
+ BlockReason["DEPENDS_ON_OTHER_QUEUES"] = "depends_on_other_queues";
755
+ })(BlockReason || (BlockReason = {}));
756
+
757
+ var RANGO_DAPP_API_KEY = process.env.REACT_APP_API_KEY;
758
+ var RANGO_DAPP_API_BASE_URL = process.env.REACT_APP_API_BASE_URL;
759
+ var ERROR_MESSAGE_WAIT_FOR_WALLET = 'Waiting for connecting wallet';
760
+ var ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET = function ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION_WRONG_WALLET(type, address) {
761
+ return "Please change your " + (type || 'wallet') + " account to " + (address || 'proper address');
762
+ };
763
+ var ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION = function ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION(type) {
764
+ return "Please connect to " + (type || 'your wallet') + " by using bellow button or top right button on page.";
765
+ };
766
+ var ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK = function ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK(network) {
767
+ return "Please change your network to " + network + ".";
768
+ };
668
769
 
669
770
  function logRPCError(error, swap, currentStep, walletType) {
670
771
  try {
@@ -709,12 +810,23 @@ function claimQueue() {
709
810
  };
710
811
  }
711
812
  /**
712
- *
813
+ * Sample inputs are:
814
+ * - "metamask-ETH"
815
+ * - "metamask-BSC-BSC:0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
816
+ * - "token-pocket-BSC-BSC:0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
713
817
  * Returns "wallet and network" separately, even if the wallet is dashed inside.
714
818
  *
715
819
  */
716
820
  function splitWalletNetwork(input) {
717
- return input == null ? void 0 : input.split(/-(?=[^-]*$)/);
821
+ var removedAddressInput = (input == null ? void 0 : input.split(':')[0]) || '';
822
+ var splittedInput = removedAddressInput.split('-');
823
+ var network = splittedInput[splittedInput.length - 1];
824
+ var walletNetwork = splittedInput.slice(0, -1);
825
+ if (walletNetwork[walletNetwork.length - 1] === network) {
826
+ walletNetwork.pop();
827
+ }
828
+ var wallet = walletNetwork.join('-');
829
+ return [wallet, network];
718
830
  }
719
831
  /**
720
832
  *
@@ -747,8 +859,10 @@ function updateSwapStatus(_ref) {
747
859
  if (!!nextStatus) swap.status = nextStatus;
748
860
  swap.hasAlreadyProceededToSign = hasAlreadyProceededToSign;
749
861
  if (!!nextStatus && ['failed', 'success'].includes(nextStatus)) swap.finishTime = new Date().getTime().toString();
750
- if (!!message) swap.extraMessage = message;
751
- if (!!details) swap.extraMessageDetail = details;
862
+ if (!!message || !!details) {
863
+ swap.extraMessage = message || '';
864
+ swap.extraMessageDetail = details || '';
865
+ }
752
866
  if (!!nextStepStatus && ['failed'].includes(nextStepStatus)) {
753
867
  var _getRelatedWalletOrNu;
754
868
  //if user cancel the swap, we should pass relevant reason to the server.
@@ -758,7 +872,7 @@ function updateSwapStatus(_ref) {
758
872
  httpService.reportFailure({
759
873
  requestId: swap.requestId,
760
874
  step: (currentStep == null ? void 0 : currentStep.id) || 1,
761
- eventType: mapAppErrorCodesToAPIErrorCode(hasAlreadyProceededToSign ? APIErrorCode.TX_FAIL : errorCode),
875
+ eventType: mapAppErrorCodesToAPIErrorCode(errorCode),
762
876
  reason: errorReason || '',
763
877
  data: walletType ? {
764
878
  wallet: walletType
@@ -774,18 +888,32 @@ function updateSwapStatus(_ref) {
774
888
  step: currentStep
775
889
  };
776
890
  }
777
- function setStepTransactionIds(_ref2, txId, eventType, notifier) {
891
+ function setStepTransactionIds(_ref2, txId, notifier, eventType, approveUrl) {
778
892
  var getStorage = _ref2.getStorage,
779
893
  setStorage = _ref2.setStorage;
780
894
  var swap = getStorage().swapDetails;
781
895
  swap.hasAlreadyProceededToSign = null;
782
896
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
783
897
  var currentStep = getCurrentStep(swap);
784
- currentStep.executedTransactionId = txId || currentStep.executedTransactionId;
898
+ currentStep.executedTransactionId = txId;
899
+ currentStep.executedTransactionTime = new Date().getTime().toString();
900
+ if (!!approveUrl) currentStep.explorerUrl = [].concat(currentStep.explorerUrl || [], [{
901
+ url: approveUrl,
902
+ description: "approve"
903
+ }]);
904
+ if (eventType === 'check_tx_status') {
905
+ swap.extraMessage = 'Checking transaction status ...';
906
+ swap.extraMessageDetail = '';
907
+ swap.extraMessageSeverity = MessageSeverity.info;
908
+ } else if (eventType === 'check_approve_tx_status') {
909
+ swap.extraMessage = 'Checking approve transaction status ...';
910
+ swap.extraMessageDetail = '';
911
+ swap.extraMessageSeverity = MessageSeverity.info;
912
+ }
785
913
  setStorage(_extends({}, getStorage(), {
786
914
  swapDetails: swap
787
915
  }));
788
- notifier({
916
+ if (!!eventType) notifier({
789
917
  eventType: eventType,
790
918
  swap: swap,
791
919
  step: currentStep
@@ -860,13 +988,19 @@ function markRunningSwapAsSwitchingNetwork(_ref4) {
860
988
  */
861
989
  function markRunningSwapAsDependsOnOtherQueues(_ref5) {
862
990
  var getStorage = _ref5.getStorage,
863
- setStorage = _ref5.setStorage;
991
+ setStorage = _ref5.setStorage,
992
+ notifier = _ref5.notifier;
864
993
  var swap = getStorage().swapDetails;
865
994
  var currentStep = getCurrentStep(swap);
866
995
  if (!currentStep) return;
867
996
  swap.networkStatusExtraMessage = '';
868
997
  swap.networkStatusExtraMessageDetail = '';
869
998
  currentStep.networkStatus = PendingSwapNetworkStatus.WaitingForQueue;
999
+ notifier({
1000
+ eventType: 'waiting_for_queue',
1001
+ swap: swap,
1002
+ step: currentStep
1003
+ });
870
1004
  setStorage(_extends({}, getStorage(), {
871
1005
  swapDetails: swap
872
1006
  }));
@@ -998,9 +1132,6 @@ function _getChainId() {
998
1132
  function isNetworkMatchedForTransaction(_x2, _x3, _x4, _x5, _x6) {
999
1133
  return _isNetworkMatchedForTransaction.apply(this, arguments);
1000
1134
  }
1001
- /**
1002
- * Returns the wallet address, based on the current step of `PendingSwap`.
1003
- */
1004
1135
  function _isNetworkMatchedForTransaction() {
1005
1136
  _isNetworkMatchedForTransaction = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(swap, step, wallet, meta, providers) {
1006
1137
  var fromBlockChain, sourceWallet, provider, chainId, blockChain;
@@ -1008,112 +1139,85 @@ function _isNetworkMatchedForTransaction() {
1008
1139
  while (1) switch (_context2.prev = _context2.next) {
1009
1140
  case 0:
1010
1141
  if (!isWalletNull(wallet)) {
1011
- _context2.next = 3;
1142
+ _context2.next = 2;
1012
1143
  break;
1013
1144
  }
1014
- console.warn('wallet object is null');
1015
1145
  return _context2.abrupt("return", false);
1016
- case 3:
1146
+ case 2:
1017
1147
  fromBlockChain = getCurrentBlockchainOfOrNull(swap, step);
1018
1148
  if (fromBlockChain) {
1019
- _context2.next = 6;
1149
+ _context2.next = 5;
1020
1150
  break;
1021
1151
  }
1022
1152
  return _context2.abrupt("return", false);
1023
- case 6:
1153
+ case 5:
1024
1154
  if (!meta.evmBasedChains.find(function (evmBlochain) {
1025
1155
  return evmBlochain.name === fromBlockChain;
1026
1156
  })) {
1027
- _context2.next = 30;
1157
+ _context2.next = 29;
1028
1158
  break;
1029
1159
  }
1030
- _context2.prev = 7;
1160
+ _context2.prev = 6;
1031
1161
  sourceWallet = swap.wallets[fromBlockChain];
1032
1162
  if (!sourceWallet) {
1033
- _context2.next = 24;
1163
+ _context2.next = 23;
1034
1164
  break;
1035
1165
  }
1036
1166
  if (![WalletType.META_MASK, WalletType.BINANCE_CHAIN, WalletType.XDEFI, WalletType.WALLET_CONNECT, WalletType.TRUST_WALLET, WalletType.COIN98, WalletType.EXODUS, WalletType.OKX, WalletType.COINBASE, WalletType.TOKEN_POCKET, WalletType.MATH, WalletType.SAFEPAL, WalletType.COSMOSTATION, WalletType.CLOVER, WalletType.BRAVE, WalletType.FRONTIER, WalletType.KUCOIN].includes(sourceWallet.walletType)) {
1037
- _context2.next = 23;
1167
+ _context2.next = 22;
1038
1168
  break;
1039
1169
  }
1040
1170
  provider = getEvmProvider(providers, sourceWallet.walletType);
1041
- _context2.next = 14;
1171
+ _context2.next = 13;
1042
1172
  return getChainId(provider);
1043
- case 14:
1173
+ case 13:
1044
1174
  chainId = _context2.sent;
1045
1175
  if (!chainId) {
1046
- _context2.next = 21;
1176
+ _context2.next = 20;
1047
1177
  break;
1048
1178
  }
1049
- blockChain = getBlockChainNameFromId(chainId, Object.entries(meta.blockchains).map(function (_ref7) {
1050
- var blockchainMeta = _ref7[1];
1179
+ blockChain = getBlockChainNameFromId(chainId, Object.entries(meta.blockchains).map(function (_ref6) {
1180
+ var blockchainMeta = _ref6[1];
1051
1181
  return blockchainMeta;
1052
1182
  }));
1053
1183
  if (!(blockChain && blockChain.toLowerCase() === fromBlockChain.toLowerCase())) {
1054
- _context2.next = 19;
1184
+ _context2.next = 18;
1055
1185
  break;
1056
1186
  }
1057
1187
  return _context2.abrupt("return", true);
1058
- case 19:
1188
+ case 18:
1059
1189
  if (!(blockChain && blockChain.toLowerCase() !== fromBlockChain.toLowerCase())) {
1060
- _context2.next = 21;
1190
+ _context2.next = 20;
1061
1191
  break;
1062
1192
  }
1063
1193
  return _context2.abrupt("return", false);
1064
- case 21:
1065
- _context2.next = 24;
1194
+ case 20:
1195
+ _context2.next = 23;
1066
1196
  break;
1067
- case 23:
1197
+ case 22:
1068
1198
  return _context2.abrupt("return", true);
1069
- case 24:
1070
- _context2.next = 29;
1199
+ case 23:
1200
+ _context2.next = 28;
1071
1201
  break;
1072
- case 26:
1073
- _context2.prev = 26;
1074
- _context2.t0 = _context2["catch"](7);
1202
+ case 25:
1203
+ _context2.prev = 25;
1204
+ _context2.t0 = _context2["catch"](6);
1075
1205
  console.log(_context2.t0);
1076
- case 29:
1206
+ case 28:
1077
1207
  return _context2.abrupt("return", false);
1078
- case 30:
1208
+ case 29:
1079
1209
  return _context2.abrupt("return", true);
1080
- case 31:
1210
+ case 30:
1081
1211
  case "end":
1082
1212
  return _context2.stop();
1083
1213
  }
1084
- }, _callee2, null, [[7, 26]]);
1214
+ }, _callee2, null, [[6, 25]]);
1085
1215
  }));
1086
1216
  return _isNetworkMatchedForTransaction.apply(this, arguments);
1087
1217
  }
1088
- var getCurrentAddressOf$1 = function getCurrentAddressOf(swap, step) {
1089
- var _step$evmTransaction, _step$evmApprovalTran, _step$tronTransaction, _step$tronApprovalTra, _step$starknetTransac, _step$starknetApprova, _step$cosmosTransacti, _step$solanaTransacti, _step$transferTransac, _step$transferTransac2;
1090
- 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 ? {
1091
- address: (_step$transferTransac2 = step.transferTransaction) == null ? void 0 : _step$transferTransac2.fromWalletAddress
1092
- } : null) || null;
1093
- if (result == null) throw PrettyError.WalletMissing();
1094
- return result.address;
1095
- };
1096
- // Todo: Is it same with `getRequiredWallet`?
1097
- function getRelatedWallet$1(swap, currentStep) {
1098
- var walletAddress = getCurrentAddressOf$1(swap, currentStep);
1099
- var walletKV = Object.keys(swap.wallets).map(function (k) {
1100
- return {
1101
- k: k,
1102
- v: swap.wallets[k]
1103
- };
1104
- }).find(function (_ref6) {
1105
- var v = _ref6.v;
1106
- return v.address === walletAddress;
1107
- }) || null;
1108
- var blockchain = (walletKV == null ? void 0 : walletKV.k) || null;
1109
- var wallet = (walletKV == null ? void 0 : walletKV.v) || null;
1110
- var walletType = wallet == null ? void 0 : wallet.walletType;
1111
- if (walletType === WalletType.UNKNOWN || wallet === null) throw PrettyError.AssertionFailed("Wallet for source " + blockchain + " not passed: walletType: " + walletType);
1112
- return wallet;
1113
- }
1114
1218
  var isTxAlreadyCreated = function isTxAlreadyCreated(swap, step) {
1115
- var _step$evmTransaction2, _step$evmApprovalTran2, _step$tronTransaction2, _step$tronApprovalTra2, _step$starknetTransac2, _step$starknetApprova2, _step$cosmosTransacti2, _step$solanaTransacti2, _step$transferTransac3;
1116
- 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;
1219
+ var _step$evmTransaction, _step$evmApprovalTran, _step$tronTransaction, _step$tronApprovalTra, _step$starknetTransac, _step$starknetApprova, _step$cosmosTransacti, _step$solanaTransacti, _step$transferTransac;
1220
+ 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;
1117
1221
  return result !== null;
1118
1222
  };
1119
1223
  function resetNetworkStatus(actions) {
@@ -1155,7 +1259,7 @@ function updateNetworkStatus(actions, data) {
1155
1259
  }
1156
1260
  /**
1157
1261
  * Event handler for blocked tasks.
1158
- * If a transcation execution is manually blocked (like for parallel or waiting for walle),
1262
+ * If a transcation execution is manually blocked (like for parallel or waiting for wallet),
1159
1263
  * This function will be called by queue manager using `queue definition`.
1160
1264
  *
1161
1265
  * It checks if the required wallet is connected, unblock the queue to be run.
@@ -1164,11 +1268,14 @@ function onBlockForConnectWallet(event, meta) {
1164
1268
  var context = meta.context,
1165
1269
  queue = meta.queue;
1166
1270
  var swap = queue.getStorage().swapDetails;
1167
- if (!isRequiredWalletConnected(swap, context.state)) {
1271
+ var _isRequiredWalletConn = isRequiredWalletConnected(swap, context.state),
1272
+ ok = _isRequiredWalletConn.ok,
1273
+ reason = _isRequiredWalletConn.reason;
1274
+ if (!ok) {
1168
1275
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
1169
1276
  var currentStep = getCurrentStep(swap);
1170
1277
  context.notifier({
1171
- eventType: 'waiting_for_connecting_wallet',
1278
+ eventType: reason === 'account_miss_match' ? 'waiting_for_change_wallet_account' : 'waiting_for_connecting_wallet',
1172
1279
  swap: swap,
1173
1280
  step: currentStep
1174
1281
  });
@@ -1220,7 +1327,7 @@ function onBlockForChangeNetwork(_event, meta) {
1220
1327
  }
1221
1328
  /**
1222
1329
  * Event handler for blocked tasks. (Parallel mode)
1223
- * If a transcation execution is manually blocked (like for parallel or waiting for walle),
1330
+ * If a transcation execution flow is manually blocked (like for parallel or waiting for walle),
1224
1331
  * This function will be called by queue manager using `queue definition`.
1225
1332
  *
1226
1333
  * It checks the blocked tasks, if there is no active `claimed` queue, try to give it to the best candidate.
@@ -1229,7 +1336,8 @@ function onDependsOnOtherQueues(_event, meta) {
1229
1336
  var getBlockedTasks = meta.getBlockedTasks,
1230
1337
  forceExecute = meta.forceExecute,
1231
1338
  queue = meta.queue,
1232
- manager = meta.manager;
1339
+ manager = meta.manager,
1340
+ context = meta.context;
1233
1341
  var _claimQueue = claimQueue(),
1234
1342
  setClaimer = _claimQueue.setClaimer,
1235
1343
  claimedBy = _claimQueue.claimedBy,
@@ -1243,12 +1351,14 @@ function onDependsOnOtherQueues(_event, meta) {
1243
1351
  }
1244
1352
  var claimerId = claimedBy();
1245
1353
  var isClaimedByAnyQueue = !!claimerId;
1354
+ if (claimerId === queue.id) return;
1246
1355
  // Check if any queue `claimed` before, if yes, we don't should do anything.
1247
1356
  if (isClaimedByAnyQueue) {
1248
1357
  // We need to keep the latest swap messages
1249
1358
  markRunningSwapAsDependsOnOtherQueues({
1250
1359
  getStorage: queue.getStorage.bind(queue),
1251
- setStorage: queue.setStorage.bind(queue)
1360
+ setStorage: queue.setStorage.bind(queue),
1361
+ notifier: context.notifier
1252
1362
  });
1253
1363
  return;
1254
1364
  }
@@ -1273,7 +1383,7 @@ function onDependsOnOtherQueues(_event, meta) {
1273
1383
  resetClaimedBy: function resetClaimedBy() {
1274
1384
  reset();
1275
1385
  // TODO: Use key generator
1276
- retryOn(type + "-" + network + "-" + address, manager);
1386
+ retryOn(type + "-" + network + ":" + address, context.notifier, manager);
1277
1387
  }
1278
1388
  });
1279
1389
  }
@@ -1282,16 +1392,28 @@ function isRequiredWalletConnected(swap, getState) {
1282
1392
  type = _getRequiredWallet4.type,
1283
1393
  address = _getRequiredWallet4.address;
1284
1394
  if (!type || !address) {
1285
- return false;
1395
+ return {
1396
+ ok: false,
1397
+ reason: 'not_connected'
1398
+ };
1286
1399
  }
1287
1400
  var walletState = getState(type);
1288
- var accounts = walletState.accounts;
1401
+ var accounts = walletState.accounts,
1402
+ connected = walletState.connected;
1289
1403
  var connectedAccounts = accounts || [];
1290
- return connectedAccounts.some(function (account) {
1404
+ if (!connected) return {
1405
+ ok: false,
1406
+ reason: 'not_connected'
1407
+ };
1408
+ var matched = connectedAccounts.some(function (account) {
1291
1409
  var _readAccountAddress = readAccountAddress(account),
1292
1410
  accountAddress = _readAccountAddress.address;
1293
1411
  return address === accountAddress;
1294
1412
  });
1413
+ return {
1414
+ ok: matched,
1415
+ reason: 'account_miss_match'
1416
+ };
1295
1417
  }
1296
1418
  function singTransaction(actions) {
1297
1419
  var getStorage = actions.getStorage,
@@ -1315,10 +1437,11 @@ function singTransaction(actions) {
1315
1437
  tronApprovalTransaction = currentStep.tronApprovalTransaction,
1316
1438
  starknetTransaction = currentStep.starknetTransaction,
1317
1439
  starknetApprovalTransaction = currentStep.starknetApprovalTransaction;
1318
- var sourceWallet = getRelatedWallet$1(swap, currentStep);
1319
- var walletAddress = getCurrentAddressOf$1(swap, currentStep);
1440
+ var sourceWallet = getRelatedWallet(swap, currentStep);
1441
+ var walletAddress = getCurrentAddressOf(swap, currentStep);
1320
1442
  var walletSigners = getSigners(sourceWallet.walletType);
1321
1443
  var onFinish = function onFinish() {
1444
+ // TODO resetClaimedBy is undefined here
1322
1445
  if (actions.context.resetClaimedBy) {
1323
1446
  actions.context.resetClaimedBy();
1324
1447
  }
@@ -1336,27 +1459,18 @@ function singTransaction(actions) {
1336
1459
  details: 'Waiting for approve transaction to be mined and confirmed successfully'
1337
1460
  });
1338
1461
  notifier(_extends({
1339
- eventType: 'confirm_contract'
1462
+ eventType: 'confirm_approve_contract'
1340
1463
  }, updateResult));
1341
1464
  // Execute transaction
1342
1465
  walletSigners.getSigner(TransactionType.EVM).signAndSendTx(evmApprovalTransaction, walletAddress, null).then(function (hash) {
1343
- console.debug('transaction of approval minted successfully', hash);
1344
1466
  var approveUrl = getEvmApproveUrl(hash, getCurrentBlockchainOf(swap, currentStep), meta.evmBasedChains);
1345
- currentStep.explorerUrl = [].concat(currentStep.explorerUrl || [], [{
1346
- url: approveUrl,
1347
- description: "approve"
1348
- }]);
1349
- // `currentStep` has been mutated, let's update storage.
1350
- setStorage(_extends({}, getStorage(), {
1351
- swapDetails: swap
1352
- }));
1467
+ setStepTransactionIds(actions, hash, notifier, 'check_approve_tx_status', approveUrl);
1353
1468
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1354
1469
  next();
1355
1470
  onFinish();
1356
1471
  }, function (error) {
1357
1472
  var _error$root, _error$root2, _error$root3;
1358
1473
  if (swap.status === 'failed') return;
1359
- console.debug('error in approving', error);
1360
1474
  var _prettifyErrorMessage = prettifyErrorMessage(error),
1361
1475
  extraMessage = _prettifyErrorMessage.extraMessage,
1362
1476
  extraMessageDetail = _prettifyErrorMessage.extraMessageDetail,
@@ -1391,27 +1505,18 @@ function singTransaction(actions) {
1391
1505
  details: 'Waiting for approve transaction to be mined and confirmed successfully'
1392
1506
  });
1393
1507
  notifier(_extends({
1394
- eventType: 'confirm_contract'
1508
+ eventType: 'confirm_approve_contract'
1395
1509
  }, _updateResult));
1396
1510
  // Execute transaction
1397
1511
  walletSigners.getSigner(TransactionType.TRON).signAndSendTx(tronApprovalTransaction, walletAddress, null).then(function (hash) {
1398
- console.debug('transaction of approval minted successfully', hash);
1399
1512
  var approveUrl = getTronApproveUrl(hash);
1400
- currentStep.explorerUrl = [].concat(currentStep.explorerUrl || [], [{
1401
- url: approveUrl,
1402
- description: "approve"
1403
- }]);
1404
- // `currentStep` has been mutated, let's update storage.
1405
- setStorage(_extends({}, getStorage(), {
1406
- swapDetails: swap
1407
- }));
1513
+ setStepTransactionIds(actions, hash, notifier, 'check_approve_tx_status', approveUrl);
1408
1514
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1409
1515
  next();
1410
1516
  onFinish();
1411
1517
  }, function (error) {
1412
1518
  var _error$root4, _error$root5, _error$root6;
1413
1519
  if (swap.status === 'failed') return;
1414
- console.debug('error in approving', error);
1415
1520
  var _prettifyErrorMessage2 = prettifyErrorMessage(error),
1416
1521
  extraMessage = _prettifyErrorMessage2.extraMessage,
1417
1522
  extraMessageDetail = _prettifyErrorMessage2.extraMessageDetail,
@@ -1446,27 +1551,18 @@ function singTransaction(actions) {
1446
1551
  details: 'Waiting for approve transaction to be mined and confirmed successfully'
1447
1552
  });
1448
1553
  notifier(_extends({
1449
- eventType: 'confirm_contract'
1554
+ eventType: 'confirm_approve_contract'
1450
1555
  }, _updateResult2));
1451
1556
  // Execute transaction
1452
1557
  walletSigners.getSigner(TransactionType.STARKNET).signAndSendTx(starknetApprovalTransaction, walletAddress, null).then(function (hash) {
1453
- console.debug('transaction of approval minted successfully', hash);
1454
1558
  var approveUrl = getStarknetApproveUrl(hash);
1455
- currentStep.explorerUrl = [].concat(currentStep.explorerUrl || [], [{
1456
- url: approveUrl,
1457
- description: "approve"
1458
- }]);
1459
- // `currentStep` has been mutated, let's update storage.
1460
- setStorage(_extends({}, getStorage(), {
1461
- swapDetails: swap
1462
- }));
1559
+ setStepTransactionIds(actions, hash, notifier, 'check_approve_tx_status', approveUrl);
1463
1560
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1464
1561
  next();
1465
1562
  onFinish();
1466
1563
  }, function (error) {
1467
1564
  var _error$root7, _error$root8, _error$root9;
1468
1565
  if (swap.status === 'failed') return;
1469
- console.debug('error in approving', error);
1470
1566
  var _prettifyErrorMessage3 = prettifyErrorMessage(error),
1471
1567
  extraMessage = _prettifyErrorMessage3.extraMessage,
1472
1568
  extraMessageDetail = _prettifyErrorMessage3.extraMessageDetail,
@@ -1492,17 +1588,20 @@ function singTransaction(actions) {
1492
1588
  return;
1493
1589
  }
1494
1590
  var hasAlreadyProceededToSign = typeof swap.hasAlreadyProceededToSign === 'boolean';
1591
+ var nextStepStatusBasedOnHasAlreadyProceededToSign = hasAlreadyProceededToSign ? 'failed' : 'running';
1592
+ var errorCodeBasedOnHasAlreadyProceededToSign = hasAlreadyProceededToSign ? 'TX_EXPIRED' : null;
1495
1593
  var executeMessage = hasAlreadyProceededToSign ? 'Transaction is expired. Please try again' : 'executing transaction';
1496
1594
  var executeDetails = "" + (sourceWallet.walletType === WalletType.WALLET_CONNECT ? 'Check your mobile phone' : '');
1497
1595
  if (!!transferTransaction) {
1498
1596
  var _updateResult3 = updateSwapStatus({
1499
1597
  getStorage: getStorage,
1500
1598
  setStorage: setStorage,
1501
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1502
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1599
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1600
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1503
1601
  message: executeMessage,
1504
1602
  details: executeDetails,
1505
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1603
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1604
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1506
1605
  });
1507
1606
  var notification = getSwapNotitfication('confirm_transfer', _updateResult3);
1508
1607
  notifier(notification);
@@ -1511,7 +1610,7 @@ function singTransaction(actions) {
1511
1610
  onFinish();
1512
1611
  } else {
1513
1612
  walletSigners.getSigner(TransactionType.TRANSFER).signAndSendTx(transferTransaction, walletAddress, null).then(function (txId) {
1514
- setStepTransactionIds(actions, txId, 'transfer_confirmed', notifier);
1613
+ setStepTransactionIds(actions, txId, notifier, 'check_tx_status');
1515
1614
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1516
1615
  next();
1517
1616
  onFinish();
@@ -1541,11 +1640,12 @@ function singTransaction(actions) {
1541
1640
  var _updateResult4 = updateSwapStatus({
1542
1641
  getStorage: getStorage,
1543
1642
  setStorage: setStorage,
1544
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1545
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1643
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1644
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1546
1645
  message: executeMessage,
1547
1646
  details: executeDetails,
1548
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1647
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1648
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1549
1649
  });
1550
1650
  var _notification = getSwapNotitfication('calling_smart_contract', _updateResult4);
1551
1651
  notifier(_notification);
@@ -1554,7 +1654,7 @@ function singTransaction(actions) {
1554
1654
  onFinish();
1555
1655
  } else {
1556
1656
  walletSigners.getSigner(TransactionType.EVM).signAndSendTx(evmTransaction, walletAddress, null).then(function (id) {
1557
- setStepTransactionIds(actions, id, 'smart_contract_called', notifier);
1657
+ setStepTransactionIds(actions, id, notifier, 'check_tx_status');
1558
1658
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1559
1659
  next();
1560
1660
  onFinish();
@@ -1588,11 +1688,12 @@ function singTransaction(actions) {
1588
1688
  var _updateResult5 = updateSwapStatus({
1589
1689
  getStorage: getStorage,
1590
1690
  setStorage: setStorage,
1591
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1592
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1691
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1692
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1593
1693
  message: executeMessage,
1594
1694
  details: executeDetails,
1595
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1695
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1696
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1596
1697
  });
1597
1698
  var _notification2 = getSwapNotitfication('calling_smart_contract', _updateResult5);
1598
1699
  notifier(_notification2);
@@ -1627,7 +1728,7 @@ function singTransaction(actions) {
1627
1728
  walletSigners.getSigner(TransactionType.COSMOS).signAndSendTx(cosmosTransaction, walletAddress, null).then(
1628
1729
  // todo
1629
1730
  function (id) {
1630
- setStepTransactionIds(actions, id, 'smart_contract_called', notifier);
1731
+ setStepTransactionIds(actions, id, notifier, 'check_tx_status');
1631
1732
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1632
1733
  next();
1633
1734
  onFinish();
@@ -1657,11 +1758,12 @@ function singTransaction(actions) {
1657
1758
  var _updateResult7 = updateSwapStatus({
1658
1759
  getStorage: getStorage,
1659
1760
  setStorage: setStorage,
1660
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1661
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1761
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1762
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1662
1763
  message: executeMessage,
1663
1764
  details: executeDetails,
1664
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1765
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1766
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1665
1767
  });
1666
1768
  var _notification3 = getSwapNotitfication('calling_smart_contract', _updateResult7);
1667
1769
  notifier(_notification3);
@@ -1671,7 +1773,7 @@ function singTransaction(actions) {
1671
1773
  } else {
1672
1774
  var tx = solanaTransaction;
1673
1775
  walletSigners.getSigner(TransactionType.SOLANA).signAndSendTx(tx, walletAddress, null).then(function (txId) {
1674
- setStepTransactionIds(actions, txId, 'smart_contract_called', notifier);
1776
+ setStepTransactionIds(actions, txId, notifier, 'check_tx_status');
1675
1777
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1676
1778
  next();
1677
1779
  onFinish();
@@ -1701,11 +1803,12 @@ function singTransaction(actions) {
1701
1803
  var _updateResult8 = updateSwapStatus({
1702
1804
  getStorage: getStorage,
1703
1805
  setStorage: setStorage,
1704
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1705
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1806
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1807
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1706
1808
  message: executeMessage,
1707
1809
  details: executeDetails,
1708
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1810
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1811
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1709
1812
  });
1710
1813
  var _notification4 = getSwapNotitfication('calling_smart_contract', _updateResult8);
1711
1814
  notifier(_notification4);
@@ -1714,7 +1817,7 @@ function singTransaction(actions) {
1714
1817
  onFinish();
1715
1818
  } else {
1716
1819
  walletSigners.getSigner(TransactionType.TRON).signAndSendTx(tronTransaction, walletAddress, null).then(function (id) {
1717
- setStepTransactionIds(actions, id, 'smart_contract_called', notifier);
1820
+ setStepTransactionIds(actions, id, notifier, 'check_tx_status');
1718
1821
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1719
1822
  next();
1720
1823
  onFinish();
@@ -1748,11 +1851,12 @@ function singTransaction(actions) {
1748
1851
  var _updateResult9 = updateSwapStatus({
1749
1852
  getStorage: getStorage,
1750
1853
  setStorage: setStorage,
1751
- nextStepStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1752
- nextStatus: hasAlreadyProceededToSign ? 'failed' : 'running',
1854
+ nextStepStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1855
+ nextStatus: nextStepStatusBasedOnHasAlreadyProceededToSign,
1753
1856
  message: executeMessage,
1754
1857
  details: executeDetails,
1755
- hasAlreadyProceededToSign: hasAlreadyProceededToSign
1858
+ hasAlreadyProceededToSign: hasAlreadyProceededToSign,
1859
+ errorCode: errorCodeBasedOnHasAlreadyProceededToSign
1756
1860
  });
1757
1861
  var _notification5 = getSwapNotitfication('calling_smart_contract', _updateResult9);
1758
1862
  notifier(_notification5);
@@ -1761,7 +1865,7 @@ function singTransaction(actions) {
1761
1865
  onFinish();
1762
1866
  } else {
1763
1867
  walletSigners.getSigner(TransactionType.STARKNET).signAndSendTx(starknetTransaction, walletAddress, null).then(function (id) {
1764
- setStepTransactionIds(actions, id, 'smart_contract_called', notifier);
1868
+ setStepTransactionIds(actions, id, notifier, 'check_tx_status');
1765
1869
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
1766
1870
  next();
1767
1871
  onFinish();
@@ -1815,7 +1919,9 @@ function checkWaitingForConnectWalletChange(params) {
1815
1919
  var hasWaitingForConnect = Object.keys(q.list.state.tasks).some(function (taskId) {
1816
1920
  var _task$blockedFor;
1817
1921
  var task = q.list.state.tasks[taskId];
1818
- return task.status === Status.BLOCKED && [BlockReason.WAIT_FOR_CONNECT_WALLET].includes((_task$blockedFor = task.blockedFor) == null ? void 0 : _task$blockedFor.reason);
1922
+ return task.status === Status.BLOCKED &&
1923
+ // TODO double check later
1924
+ [BlockReason.WAIT_FOR_CONNECT_WALLET].includes((_task$blockedFor = task.blockedFor) == null ? void 0 : _task$blockedFor.reason);
1819
1925
  });
1820
1926
  if (currentStepRequiredWallet === wallet && hasWaitingForConnect && getCurrentBlockchainOfOrNull(swap, currentStep) != network) {
1821
1927
  var queueInstance = q.list;
@@ -1829,10 +1935,17 @@ function checkWaitingForConnectWalletChange(params) {
1829
1935
  },
1830
1936
  silent: true
1831
1937
  });
1832
- markRunningSwapAsSwitchingNetwork({
1938
+ var result = markRunningSwapAsSwitchingNetwork({
1833
1939
  getStorage: queueInstance.getStorage.bind(queueInstance),
1834
1940
  setStorage: queueInstance.setStorage.bind(queueInstance)
1835
1941
  });
1942
+ if (result) {
1943
+ params == null ? void 0 : params.notifier({
1944
+ eventType: 'waiting_for_network_change',
1945
+ swap: result.swap,
1946
+ step: result.step
1947
+ });
1948
+ }
1836
1949
  }
1837
1950
  }
1838
1951
  }
@@ -1863,6 +1976,49 @@ function checkWaitingForNetworkChange(manager) {
1863
1976
  }
1864
1977
  });
1865
1978
  }
1979
+ /**
1980
+ * Get list of all running swaps
1981
+ *
1982
+ * @param manager
1983
+ * @returns list of pending swaps
1984
+ */
1985
+ function getRunningSwaps(manager) {
1986
+ var queues = (manager == null ? void 0 : manager.getAll()) || new Map();
1987
+ var result = [];
1988
+ queues.forEach(function (q) {
1989
+ // retry only on affected queues
1990
+ var queueStorage = q.list.getStorage();
1991
+ var swap = queueStorage == null ? void 0 : queueStorage.swapDetails;
1992
+ if (!swap || swap.status !== 'running') return;
1993
+ result.push(swap);
1994
+ });
1995
+ return result;
1996
+ }
1997
+ /**
1998
+ *
1999
+ * Trying to reset notifications for pending swaps to correct message on page load.
2000
+ * We could remove this after supporting auto connect for wallets.
2001
+ *
2002
+ * @param swaps
2003
+ * @param notifier
2004
+ * @returns
2005
+ */
2006
+ function resetRunningSwapNotifsOnPageLoad(runningSwaps, notifier) {
2007
+ runningSwaps.forEach(function (swap) {
2008
+ var currentStep = getCurrentStep(swap);
2009
+ var eventType;
2010
+ if ((currentStep == null ? void 0 : currentStep.networkStatus) === PendingSwapNetworkStatus.WaitingForQueue) eventType = 'waiting_for_queue';else if ((swap == null ? void 0 : swap.status) === 'running') {
2011
+ eventType = 'waiting_for_connecting_wallet';
2012
+ }
2013
+ if (!!eventType && !!notifier) {
2014
+ notifier({
2015
+ eventType: eventType,
2016
+ swap: swap,
2017
+ step: currentStep
2018
+ });
2019
+ }
2020
+ });
2021
+ }
1866
2022
  /**
1867
2023
  *
1868
2024
  * Try to run blocked tasks by wallet and network name.
@@ -1874,7 +2030,7 @@ function checkWaitingForNetworkChange(manager) {
1874
2030
  * @param manager
1875
2031
  * @returns
1876
2032
  */
1877
- function retryOn(wallet_network, manager, options) {
2033
+ function retryOn(wallet_network, notifier, manager, options) {
1878
2034
  var _finalQueueToBeRun;
1879
2035
  if (options === void 0) {
1880
2036
  options = {
@@ -1907,7 +2063,6 @@ function retryOn(wallet_network, manager, options) {
1907
2063
  }
1908
2064
  }
1909
2065
  });
1910
- // const isWaitingForConnectWallet = (status: Status) =>
1911
2066
  var finalQueueToBeRun = undefined;
1912
2067
  if (walletAndNetworkMatched.length > 0) {
1913
2068
  finalQueueToBeRun = walletAndNetworkMatched[0];
@@ -1916,7 +2071,8 @@ function retryOn(wallet_network, manager, options) {
1916
2071
  var currentQueue = walletAndNetworkMatched[i];
1917
2072
  markRunningSwapAsDependsOnOtherQueues({
1918
2073
  getStorage: currentQueue.getStorage.bind(currentQueue),
1919
- setStorage: currentQueue.setStorage.bind(currentQueue)
2074
+ setStorage: currentQueue.setStorage.bind(currentQueue),
2075
+ notifier: notifier
1920
2076
  });
1921
2077
  }
1922
2078
  }
@@ -1982,7 +2138,7 @@ function cancelSwap(swap) {
1982
2138
  });
1983
2139
  }
1984
2140
 
1985
- var INTERVAL_FOR_CHECK = 2000;
2141
+ var INTERVAL_FOR_CHECK = 3000;
1986
2142
  /**
1987
2143
  * Subscribe to status of swap transaction by checking from server periodically.
1988
2144
  * After getting the status, notify the user and schedule `SCHEDULE_NEXT_STEP`.
@@ -2040,6 +2196,7 @@ function _checkTransactionStatus() {
2040
2196
  if (!!newTransaction) {
2041
2197
  currentStep.status = 'created';
2042
2198
  currentStep.executedTransactionId = null;
2199
+ currentStep.executedTransactionTime = null;
2043
2200
  currentStep.transferTransaction = null;
2044
2201
  currentStep.cosmosTransaction = null;
2045
2202
  currentStep.evmTransaction = null;
@@ -2067,11 +2224,22 @@ function _checkTransactionStatus() {
2067
2224
  eventType: 'step_completed_with_output',
2068
2225
  swap: swap,
2069
2226
  step: currentStep
2070
- });
2227
+ });else if (prevOutputAmount === null && outputAmount === null) {
2228
+ // it is needed to set notification after reloading the page
2229
+ context.notifier({
2230
+ eventType: 'check_tx_status',
2231
+ swap: swap,
2232
+ step: currentStep
2233
+ });
2234
+ }
2071
2235
  if (currentStep.status === 'success') {
2072
2236
  nextStep = getNextStep(swap, currentStep);
2073
2237
  swap.extraMessageDetail = '';
2074
2238
  swap.extraMessage = !!nextStep ? "starting next step: " + nextStep.swapperId + ": " + nextStep.fromBlockchain + " -> " + nextStep.toBlockchain : '';
2239
+ } else if (currentStep.status === 'failed') {
2240
+ swap.extraMessage = 'Transaction failed in blockchain';
2241
+ swap.extraMessageSeverity = MessageSeverity.error;
2242
+ swap.extraMessageDetail = '';
2075
2243
  }
2076
2244
  // Sync data with storage
2077
2245
  setStorage(_extends({}, getStorage(), {
@@ -2111,30 +2279,61 @@ function checkApprovalStatus(_x2) {
2111
2279
  */
2112
2280
  function _checkApprovalStatus() {
2113
2281
  _checkApprovalStatus = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref2) {
2114
- var getStorage, setStorage, next, schedule, retry, context, swap, currentStep, isApproved, response;
2282
+ var getStorage, setStorage, next, schedule, retry, failed, context, swap, currentStep, isApproved, response, updateResult;
2115
2283
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
2116
2284
  while (1) switch (_context2.prev = _context2.next) {
2117
2285
  case 0:
2118
- getStorage = _ref2.getStorage, setStorage = _ref2.setStorage, next = _ref2.next, schedule = _ref2.schedule, retry = _ref2.retry, context = _ref2.context;
2119
- swap = getStorage().swapDetails; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2286
+ getStorage = _ref2.getStorage, setStorage = _ref2.setStorage, next = _ref2.next, schedule = _ref2.schedule, retry = _ref2.retry, failed = _ref2.failed, context = _ref2.context;
2287
+ swap = getStorage().swapDetails; // double check it after fixing parallel
2288
+ // const onFinish = () => {
2289
+ // // TODO resetClaimedBy is undefined here
2290
+ // if (context.resetClaimedBy) {
2291
+ // context.resetClaimedBy();
2292
+ // }
2293
+ // };
2294
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2120
2295
  currentStep = getCurrentStep(swap);
2121
2296
  isApproved = false;
2122
2297
  _context2.prev = 4;
2123
2298
  _context2.next = 7;
2124
- return httpService.checkApproval(swap.requestId);
2299
+ return httpService.checkApproval(swap.requestId, currentStep.executedTransactionId || '');
2125
2300
  case 7:
2126
2301
  response = _context2.sent;
2127
2302
  isApproved = response.isApproved;
2303
+ if (!isApproved && response.txStatus === 'failed') {
2304
+ // approve transaction failed on
2305
+ // we should fail the whole swap
2306
+ updateResult = updateSwapStatus({
2307
+ getStorage: getStorage,
2308
+ setStorage: setStorage,
2309
+ nextStatus: 'failed',
2310
+ nextStepStatus: 'failed',
2311
+ errorCode: 'SEND_TX_FAILED',
2312
+ message: 'Approve transaction failed',
2313
+ details: 'Smart contract approval failed in blockchain.'
2314
+ });
2315
+ context.notifier(_extends({
2316
+ eventType: 'smart_contract_call_failed'
2317
+ }, updateResult));
2318
+ failed();
2319
+ // onFinish();
2320
+ } else if (!isApproved) {
2321
+ // it is needed to set notification after reloading the page
2322
+ context.notifier({
2323
+ eventType: 'check_approve_tx_status',
2324
+ swap: swap,
2325
+ step: currentStep
2326
+ });
2327
+ }
2128
2328
  _context2.next = 15;
2129
2329
  break;
2130
- case 11:
2131
- _context2.prev = 11;
2330
+ case 12:
2331
+ _context2.prev = 12;
2132
2332
  _context2.t0 = _context2["catch"](4);
2133
- console.error('Failed to check getApprovedAmount', _context2.t0);
2134
2333
  isApproved = false;
2135
2334
  case 15:
2136
2335
  if (!isApproved) {
2137
- _context2.next = 30;
2336
+ _context2.next = 31;
2138
2337
  break;
2139
2338
  }
2140
2339
  currentStep.status = 'approved';
@@ -2143,6 +2342,7 @@ function _checkApprovalStatus() {
2143
2342
  swap.extraMessageSeverity = MessageSeverity.success;
2144
2343
  currentStep.evmApprovalTransaction = null;
2145
2344
  currentStep.executedTransactionId = null;
2345
+ currentStep.executedTransactionTime = null;
2146
2346
  currentStep.starknetApprovalTransaction = null;
2147
2347
  currentStep.tronApprovalTransaction = null;
2148
2348
  setStorage(_extends({}, getStorage(), {
@@ -2155,18 +2355,18 @@ function _checkApprovalStatus() {
2155
2355
  });
2156
2356
  schedule(SwapActionTypes.SCHEDULE_NEXT_STEP);
2157
2357
  next();
2158
- _context2.next = 33;
2358
+ _context2.next = 34;
2159
2359
  break;
2160
- case 30:
2161
- _context2.next = 32;
2360
+ case 31:
2361
+ _context2.next = 33;
2162
2362
  return delay(2000);
2163
- case 32:
2164
- retry();
2165
2363
  case 33:
2364
+ retry();
2365
+ case 34:
2166
2366
  case "end":
2167
2367
  return _context2.stop();
2168
2368
  }
2169
- }, _callee2, null, [[4, 11]]);
2369
+ }, _callee2, null, [[4, 12]]);
2170
2370
  }));
2171
2371
  return _checkApprovalStatus.apply(this, arguments);
2172
2372
  }
@@ -2285,7 +2485,7 @@ function _createTransaction() {
2285
2485
  nextStepStatus: 'failed',
2286
2486
  message: extraMessage,
2287
2487
  details: extraMessageDetail,
2288
- errorCode: APIErrorCode.FETCH_TX_FAILED
2488
+ errorCode: 'FETCH_TX_FAILED'
2289
2489
  });
2290
2490
  context.notifier(_extends({
2291
2491
  eventType: 'task_failed'
@@ -2332,7 +2532,7 @@ function _executeTransaction() {
2332
2532
  currentStep = getCurrentStep(swap); // Resetting network status, so we will set it again during the running of this task.
2333
2533
  resetNetworkStatus(actions);
2334
2534
  /* Make sure wallet is connected and also the connected wallet is matched with tx by checking address. */
2335
- isWrongAddress = !isRequiredWalletConnected(swap, context.state);
2535
+ isWrongAddress = !isRequiredWalletConnected(swap, context.state).ok;
2336
2536
  if (!isWrongAddress) {
2337
2537
  _context.next = 15;
2338
2538
  break;
@@ -2357,13 +2557,13 @@ function _executeTransaction() {
2357
2557
  We only run one request at a time (In parallel mode).
2358
2558
  */
2359
2559
  needsToBlockQueue = isNeedBlockQueueForParallel(currentStep);
2360
- if (!(needsToBlockQueue && !isClaimed && context.claimedBy)) {
2560
+ if (!(needsToBlockQueue && !isClaimed)) {
2361
2561
  _context.next = 20;
2362
2562
  break;
2363
2563
  }
2364
2564
  _blockedFor = {
2365
2565
  reason: BlockReason.DEPENDS_ON_OTHER_QUEUES,
2366
- description: 'Waiting for other running tasks to be finished',
2566
+ description: 'Waiting for other swaps to complete',
2367
2567
  details: {}
2368
2568
  };
2369
2569
  requestBlock(_blockedFor);
@@ -2427,6 +2627,7 @@ function scheduleNextStep(_ref) {
2427
2627
  schedule(SwapActionTypes.EXECUTE_TRANSACTION);
2428
2628
  return next();
2429
2629
  }
2630
+ // TODO double check it after approval changes
2430
2631
  if (currentStep != null && currentStep.executedTransactionId) {
2431
2632
  schedule(SwapActionTypes.CHECK_TRANSACTION_STATUS);
2432
2633
  return next();
@@ -2462,6 +2663,29 @@ function start(_ref) {
2462
2663
  next();
2463
2664
  }
2464
2665
 
2666
+ var _actions;
2667
+ /**
2668
+ *
2669
+ * The idea behind this queue is to be able dynamically add some steps.
2670
+ * After running a swap, it can be blocked (like on waiting for switch netwrok)
2671
+ * or waits for something happend (like checking status of a transaction from server)
2672
+ *
2673
+ */
2674
+ var swapQueueDef = {
2675
+ name: 'swap',
2676
+ 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),
2677
+ run: [SwapActionTypes.START],
2678
+ whenTaskBlocked: function whenTaskBlocked(event, meta) {
2679
+ if (event.reason.reason === BlockReason.WAIT_FOR_CONNECT_WALLET) {
2680
+ onBlockForConnectWallet(event, meta);
2681
+ } else if (event.reason.reason === BlockReason.WAIT_FOR_NETWORK_CHANGE) {
2682
+ onBlockForChangeNetwork(event, meta);
2683
+ } else if (event.reason.reason === BlockReason.DEPENDS_ON_OTHER_QUEUES) {
2684
+ onDependsOnOtherQueues(event, meta);
2685
+ }
2686
+ }
2687
+ };
2688
+
2465
2689
  var MIGRATED_KEY = 'migratedToQueueManager';
2466
2690
  /**
2467
2691
  *
@@ -2653,9 +2877,10 @@ function useQueueManager(params) {
2653
2877
  checkWaitingForConnectWalletChange({
2654
2878
  evmChains: params.evmChains,
2655
2879
  wallet_network: params.lastConnectedWallet,
2656
- manager: manager
2880
+ manager: manager,
2881
+ notifier: params.notifier
2657
2882
  });
2658
- retryOn(params.lastConnectedWallet, manager);
2883
+ retryOn(params.lastConnectedWallet, params.notifier, manager);
2659
2884
  }
2660
2885
  }, [params.lastConnectedWallet]);
2661
2886
  useEffect(function () {
@@ -2670,28 +2895,5 @@ function useQueueManager(params) {
2670
2895
  }, [params.disconnectedWallet]);
2671
2896
  }
2672
2897
 
2673
- var _actions;
2674
- /**
2675
- *
2676
- * The idea behind this queue is to be able dynamically add some steps.
2677
- * After running a swap, it can be blocked (like on waiting for switch netwrok)
2678
- * or waits for something happend (like checking status of a transaction from server)
2679
- *
2680
- */
2681
- var swapQueueDef = {
2682
- name: 'swap',
2683
- 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),
2684
- run: [SwapActionTypes.START],
2685
- whenTaskBlocked: function whenTaskBlocked(event, meta) {
2686
- if (event.reason.reason === BlockReason.WAIT_FOR_CONNECT_WALLET) {
2687
- onBlockForConnectWallet(event, meta);
2688
- } else if (event.reason.reason === BlockReason.WAIT_FOR_NETWORK_CHANGE) {
2689
- onBlockForChangeNetwork(event, meta);
2690
- } else if (event.reason.reason === BlockReason.DEPENDS_ON_OTHER_QUEUES) {
2691
- onDependsOnOtherQueues(event, meta);
2692
- }
2693
- }
2694
- };
2695
-
2696
- export { cancelSwap, checkWaitingForNetworkChange, getCurrentStep, getEvmProvider, getRelatedWallet$1 as getRelatedWallet, swapQueueDef, updateSwapStatus, useMigration, useQueueManager };
2898
+ export { MessageSeverity, PendingSwapNetworkStatus, PrettyError, calculatePendingSwap, cancelSwap, checkWaitingForNetworkChange, getCurrentBlockchainOfOrNull, getCurrentStep, getEvmProvider, getRelatedWallet, getRelatedWalletOrNull, getRequiredWallet, getRunningSwaps, prettifyErrorMessage, resetRunningSwapNotifsOnPageLoad, splitWalletNetwork, swapQueueDef, updateSwapStatus, useMigration, useQueueManager };
2697
2899
  //# sourceMappingURL=queue-manager-rango-preset.esm.js.map