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