@rango-dev/queue-manager-rango-preset 0.1.10-next.82 → 0.1.10-next.85

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.
@@ -1,9 +1,12 @@
1
- import { WalletType, getBlockChainNameFromId, Network } from '@rango-dev/wallets-shared';
1
+ import { WalletType, Network, getBlockChainNameFromId } from '@rango-dev/wallets-shared';
2
2
  import { readAccountAddress } from '@rango-dev/wallets-core';
3
3
  import { RangoClient, TransactionType } from 'rango-sdk';
4
- import { Status } from '@rango-dev/queue-manager-core';
4
+ import { Status, Persistor } from '@rango-dev/queue-manager-core';
5
5
  import { isSignerErrorCode, SignerErrorCode, SignerError } from 'rango-types';
6
6
  import { captureException } from '@sentry/browser';
7
+ import { useManager } from '@rango-dev/queue-manager-react';
8
+ import { useState, useEffect } from 'react';
9
+ import { v4 } from 'uuid';
7
10
 
8
11
  var SwapActionTypes;
9
12
  (function (SwapActionTypes) {
@@ -1732,6 +1735,76 @@ function singTransaction(actions) {
1732
1735
  });
1733
1736
  }
1734
1737
  }
1738
+ function checkWaitingForConnectWalletChange(params) {
1739
+ var wallet_network = params.wallet_network,
1740
+ evmChains = params.evmChains,
1741
+ manager = params.manager;
1742
+ var _wallet_network$split = wallet_network.split('-'),
1743
+ wallet = _wallet_network$split[0],
1744
+ network = _wallet_network$split[1];
1745
+ // We only need change network for EVM chains.
1746
+ if (!evmChains.some(function (chain) {
1747
+ return chain.name == network;
1748
+ })) return;
1749
+ manager == null ? void 0 : manager.getAll().forEach(function (q) {
1750
+ var queueStorage = q.list.getStorage();
1751
+ var swap = queueStorage == null ? void 0 : queueStorage.swapDetails;
1752
+ if (swap) {
1753
+ var currentStep = getCurrentStep(swap);
1754
+ if (currentStep) {
1755
+ var _queueStorage$swapDet;
1756
+ var currentStepRequiredWallet = queueStorage == null ? void 0 : (_queueStorage$swapDet = queueStorage.swapDetails.wallets[currentStep.fromBlockchain]) == null ? void 0 : _queueStorage$swapDet.walletType;
1757
+ var hasWaitingForConnect = Object.keys(q.list.state.tasks).some(function (taskId) {
1758
+ var _task$blockedFor;
1759
+ var task = q.list.state.tasks[taskId];
1760
+ return task.status === Status.BLOCKED && [BlockReason.WAIT_FOR_CONNECT_WALLET].includes((_task$blockedFor = task.blockedFor) == null ? void 0 : _task$blockedFor.reason);
1761
+ });
1762
+ if (currentStepRequiredWallet === wallet && hasWaitingForConnect) {
1763
+ var _queueInstance$getSto;
1764
+ var queueInstance = q.list;
1765
+ var _swap = (_queueInstance$getSto = queueInstance.getStorage()) == null ? void 0 : _queueInstance$getSto.swapDetails;
1766
+ var _getRequiredWallet5 = getRequiredWallet(_swap),
1767
+ type = _getRequiredWallet5.type;
1768
+ var description = ERROR_MESSAGE_WAIT_FOR_CHANGE_NETWORK(type);
1769
+ q.list.block({
1770
+ reason: {
1771
+ reason: BlockReason.WAIT_FOR_NETWORK_CHANGE,
1772
+ description: description
1773
+ },
1774
+ silent: true
1775
+ });
1776
+ markRunningSwapAsSwitchingNetwork({
1777
+ getStorage: queueInstance.getStorage.bind(queueInstance),
1778
+ setStorage: queueInstance.setStorage.bind(queueInstance)
1779
+ });
1780
+ }
1781
+ }
1782
+ }
1783
+ });
1784
+ }
1785
+ function checkWaitingForNetworkChange(manager) {
1786
+ manager == null ? void 0 : manager.getAll().forEach(function (q) {
1787
+ var hasWaitingForNetwork = Object.keys(q.list.state.tasks).some(function (taskId) {
1788
+ var _task$blockedFor2;
1789
+ var task = q.list.state.tasks[taskId];
1790
+ return task.status === Status.BLOCKED && [BlockReason.WAIT_FOR_NETWORK_CHANGE, BlockReason.DEPENDS_ON_OTHER_QUEUES].includes((_task$blockedFor2 = task.blockedFor) == null ? void 0 : _task$blockedFor2.reason);
1791
+ });
1792
+ if (hasWaitingForNetwork) {
1793
+ var _q$list$getStorage;
1794
+ var swap = (_q$list$getStorage = q.list.getStorage()) == null ? void 0 : _q$list$getStorage.swapDetails;
1795
+ var _getRequiredWallet6 = getRequiredWallet(swap),
1796
+ type = _getRequiredWallet6.type;
1797
+ var description = ERROR_MESSAGE_WAIT_FOR_WALLET_DESCRIPTION(type);
1798
+ // Change the block reason to waiting for connecting wallet
1799
+ q.list.block({
1800
+ reason: {
1801
+ reason: BlockReason.WAIT_FOR_CONNECT_WALLET,
1802
+ description: description
1803
+ }
1804
+ });
1805
+ }
1806
+ });
1807
+ }
1735
1808
  /**
1736
1809
  *
1737
1810
  * Try to run blocked tasks by wallet and network name.
@@ -2276,6 +2349,183 @@ function start(_ref) {
2276
2349
  next();
2277
2350
  }
2278
2351
 
2352
+ var MIGRATED_KEY = 'migratedToQueueManager';
2353
+ /**
2354
+ *
2355
+ * If `MIGRATED_KEY` is set, it means we already migrated data from localstorage.
2356
+ *
2357
+ */
2358
+ function migrated() {
2359
+ return !!window.localStorage.getItem(MIGRATED_KEY);
2360
+ }
2361
+ /**
2362
+ *
2363
+ * By calling this function, we first check if the data already migrated or not,
2364
+ * If not, starting to migrating to IndexedDb with proper format that queue manager is understand.
2365
+ *
2366
+ */
2367
+ function migration() {
2368
+ return _migration.apply(this, arguments);
2369
+ }
2370
+ function _migration() {
2371
+ _migration = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
2372
+ var swapsFromStorage, swaps, convertedSwaps, persistor, promises;
2373
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
2374
+ while (1) switch (_context.prev = _context.next) {
2375
+ case 0:
2376
+ swapsFromStorage = window.localStorage.getItem('pendingSwaps'); // For new users or already migrated.
2377
+ if (!(!swapsFromStorage || migrated())) {
2378
+ _context.next = 3;
2379
+ break;
2380
+ }
2381
+ return _context.abrupt("return", true);
2382
+ case 3:
2383
+ // For old users, but they didn't do any swaps yet.
2384
+ swaps = JSON.parse(swapsFromStorage);
2385
+ convertedSwaps = [];
2386
+ swaps.forEach(function (swap) {
2387
+ /*
2388
+ For running task we need to add some more work
2389
+ We need to create a queue task to be run and resume the running task from queue manager.
2390
+ */
2391
+ if (swap.status === 'running') {
2392
+ var _tasks;
2393
+ var taskId = v4();
2394
+ var convertedSwap = {
2395
+ id: v4(),
2396
+ createdAt: Number(swap.creationTime),
2397
+ name: 'swap',
2398
+ status: Status.RUNNING,
2399
+ storage: {
2400
+ swapDetails: swap
2401
+ },
2402
+ state: {
2403
+ status: Status.RUNNING,
2404
+ activeTaskIndex: 0,
2405
+ tasks: (_tasks = {}, _tasks[taskId] = {
2406
+ blockedFor: null,
2407
+ status: Status.RUNNING
2408
+ }, _tasks)
2409
+ },
2410
+ tasks: [{
2411
+ id: taskId,
2412
+ action: SwapActionTypes.SCHEDULE_NEXT_STEP
2413
+ }]
2414
+ };
2415
+ convertedSwaps.push(convertedSwap);
2416
+ } else {
2417
+ /*
2418
+ * For failed or successful swaps, we only move it to IndexedDB,
2419
+ * And there is no need to consider them to be run.
2420
+ */
2421
+ var status = swap.status === 'success' ? Status.SUCCESS : Status.FAILED;
2422
+ var _convertedSwap = {
2423
+ id: v4(),
2424
+ createdAt: Number(swap.creationTime),
2425
+ name: 'swap',
2426
+ status: status,
2427
+ storage: {
2428
+ swapDetails: swap
2429
+ },
2430
+ state: {
2431
+ status: status,
2432
+ activeTaskIndex: 0,
2433
+ tasks: {}
2434
+ },
2435
+ tasks: []
2436
+ };
2437
+ convertedSwaps.push(_convertedSwap);
2438
+ }
2439
+ });
2440
+ // Getting an instance from persistor, so we can directly put our data inside it.
2441
+ persistor = new Persistor();
2442
+ promises = convertedSwaps.map(function (queue) {
2443
+ return persistor.insertQueue(queue);
2444
+ });
2445
+ _context.next = 10;
2446
+ return Promise.all(promises);
2447
+ case 10:
2448
+ // Mark as the data has been successfully migrated.
2449
+ window.localStorage.setItem(MIGRATED_KEY, '1');
2450
+ return _context.abrupt("return", true);
2451
+ case 12:
2452
+ case "end":
2453
+ return _context.stop();
2454
+ }
2455
+ }, _callee);
2456
+ }));
2457
+ return _migration.apply(this, arguments);
2458
+ }
2459
+
2460
+ var isCalled = 0;
2461
+ /**
2462
+ *
2463
+ * Runs a migration (old swaps from localstorage to queue manager's IndexedDB)
2464
+ * It will be run only once on page load.
2465
+ *
2466
+ */
2467
+ function useMigration() {
2468
+ var isMigrated = migrated();
2469
+ var _useState = useState(isMigrated),
2470
+ status = _useState[0],
2471
+ setStatus = _useState[1];
2472
+ useEffect(function () {
2473
+ _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
2474
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
2475
+ while (1) switch (_context.prev = _context.next) {
2476
+ case 0:
2477
+ if (!isCalled) {
2478
+ _context.next = 2;
2479
+ break;
2480
+ }
2481
+ return _context.abrupt("return");
2482
+ case 2:
2483
+ isCalled = 1;
2484
+ migration()["finally"](function () {
2485
+ setStatus(true);
2486
+ });
2487
+ case 4:
2488
+ case "end":
2489
+ return _context.stop();
2490
+ }
2491
+ }, _callee);
2492
+ }))();
2493
+ }, []);
2494
+ return {
2495
+ status: status
2496
+ };
2497
+ }
2498
+ /**
2499
+ *
2500
+ * On initial load and also connect/disconnet we may need to update swap's notified message.
2501
+ * And also if a new wallet is connected we will retry the queue to see we can resume it or not.
2502
+ *
2503
+ */
2504
+ function useQueueManager(params) {
2505
+ var _useManager = useManager(),
2506
+ manager = _useManager.manager;
2507
+ useEffect(function () {
2508
+ if (params.lastConnectedWallet) {
2509
+ checkWaitingForConnectWalletChange({
2510
+ evmChains: params.evmChains,
2511
+ wallet_network: params.lastConnectedWallet,
2512
+ manager: manager
2513
+ });
2514
+ retryOn(params.lastConnectedWallet, manager);
2515
+ }
2516
+ }, [params.lastConnectedWallet]);
2517
+ useEffect(function () {
2518
+ if (params.disconnectedWallet) {
2519
+ checkWaitingForNetworkChange(manager);
2520
+ /*
2521
+ We need to reset the state value, so if a wallet disconnected twice (after reconnect),
2522
+ this effect will be run properly.
2523
+ */
2524
+ params.clearDisconnectedWallet();
2525
+ }
2526
+ }, [params.disconnectedWallet]);
2527
+ }
2528
+
2279
2529
  var _actions;
2280
2530
  /**
2281
2531
  *
@@ -2299,5 +2549,5 @@ var swapQueueDef = {
2299
2549
  }
2300
2550
  };
2301
2551
 
2302
- export { swapQueueDef };
2552
+ export { checkWaitingForNetworkChange, getCurrentStep, getEvmProvider, getRelatedWallet$1 as getRelatedWallet, swapQueueDef, updateSwapStatus, useMigration, useQueueManager };
2303
2553
  //# sourceMappingURL=queue-manager-rango-preset.esm.js.map