@bitpay-labs/bitcore-wallet-service 11.11.0 → 11.11.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.
- package/Dockerfile +1 -1
- package/package.json +5 -5
- package/src/config.ts +0 -20
- package/src/externalservices/banxa.ts +51 -10
- package/src/externalservices/changelly.ts +54 -6
- package/src/externalservices/moonpay.ts +85 -19
- package/src/externalservices/oneInch.ts +13 -5
- package/src/externalservices/ramp.ts +42 -8
- package/src/externalservices/sardine.ts +51 -10
- package/src/externalservices/simplex.ts +58 -11
- package/src/externalservices/thorswap.ts +46 -11
- package/src/externalservices/transak.ts +53 -11
- package/src/lib/chain/btc/index.ts +3 -2
- package/src/lib/chain/eth/index.ts +134 -117
- package/src/lib/chain/sol/index.ts +1 -1
- package/src/lib/chain/xrp/index.ts +1 -1
- package/src/lib/routes/services.ts +0 -12
- package/src/lib/routes/wallets.ts +3 -1
- package/src/lib/server.ts +136 -91
- package/src/lib/storage.ts +90 -20
- package/src/types/externalservices.d.ts +0 -1
- package/test/chain/eth.test.ts +70 -0
- package/test/chain/sol.test.ts +1 -1
- package/test/chain/xrp.test.ts +1 -1
- package/test/expressapp.test.ts +144 -0
- package/test/integration/addressReads.test.ts +503 -0
- package/test/integration/bcmonitor.test.ts +44 -0
- package/test/integration/externalservices/banxa.test.ts +95 -5
- package/test/integration/externalservices/changelly.test.ts +118 -6
- package/test/integration/externalservices/coinGecko.test.ts +4 -0
- package/test/integration/externalservices/moonpay.test.ts +178 -9
- package/test/integration/externalservices/oneInch.test.ts +28 -1
- package/test/integration/externalservices/ramp.test.ts +126 -4
- package/test/integration/externalservices/sardine.test.ts +95 -5
- package/test/integration/externalservices/simplex.test.ts +95 -5
- package/test/integration/externalservices/thorswap.test.ts +81 -5
- package/test/integration/externalservices/transak.test.ts +98 -6
- package/test/integration/helpers.ts +1 -1
- package/test/integration/server.test.ts +254 -136
- package/test/integration/walletReads.test.ts +488 -0
- package/ts_build/package.json +3 -3
- package/ts_build/src/config.d.ts.map +1 -1
- package/ts_build/src/config.js +0 -4
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/externalservices/banxa.d.ts.map +1 -1
- package/ts_build/src/externalservices/banxa.js +51 -10
- package/ts_build/src/externalservices/banxa.js.map +1 -1
- package/ts_build/src/externalservices/changelly.d.ts.map +1 -1
- package/ts_build/src/externalservices/changelly.js +54 -6
- package/ts_build/src/externalservices/changelly.js.map +1 -1
- package/ts_build/src/externalservices/moonpay.d.ts.map +1 -1
- package/ts_build/src/externalservices/moonpay.js +85 -19
- package/ts_build/src/externalservices/moonpay.js.map +1 -1
- package/ts_build/src/externalservices/oneInch.d.ts.map +1 -1
- package/ts_build/src/externalservices/oneInch.js +13 -5
- package/ts_build/src/externalservices/oneInch.js.map +1 -1
- package/ts_build/src/externalservices/ramp.d.ts.map +1 -1
- package/ts_build/src/externalservices/ramp.js +42 -8
- package/ts_build/src/externalservices/ramp.js.map +1 -1
- package/ts_build/src/externalservices/sardine.d.ts.map +1 -1
- package/ts_build/src/externalservices/sardine.js +51 -10
- package/ts_build/src/externalservices/sardine.js.map +1 -1
- package/ts_build/src/externalservices/simplex.d.ts.map +1 -1
- package/ts_build/src/externalservices/simplex.js +55 -11
- package/ts_build/src/externalservices/simplex.js.map +1 -1
- package/ts_build/src/externalservices/thorswap.d.ts.map +1 -1
- package/ts_build/src/externalservices/thorswap.js +45 -11
- package/ts_build/src/externalservices/thorswap.js.map +1 -1
- package/ts_build/src/externalservices/transak.d.ts.map +1 -1
- package/ts_build/src/externalservices/transak.js +53 -11
- package/ts_build/src/externalservices/transak.js.map +1 -1
- package/ts_build/src/lib/chain/btc/index.d.ts.map +1 -1
- package/ts_build/src/lib/chain/btc/index.js +3 -2
- package/ts_build/src/lib/chain/btc/index.js.map +1 -1
- package/ts_build/src/lib/chain/eth/index.d.ts +8 -1
- package/ts_build/src/lib/chain/eth/index.d.ts.map +1 -1
- package/ts_build/src/lib/chain/eth/index.js +114 -102
- package/ts_build/src/lib/chain/eth/index.js.map +1 -1
- package/ts_build/src/lib/chain/sol/index.js +1 -1
- package/ts_build/src/lib/chain/sol/index.js.map +1 -1
- package/ts_build/src/lib/chain/xrp/index.js +1 -1
- package/ts_build/src/lib/chain/xrp/index.js.map +1 -1
- package/ts_build/src/lib/routes/services.d.ts.map +1 -1
- package/ts_build/src/lib/routes/services.js +0 -10
- package/ts_build/src/lib/routes/services.js.map +1 -1
- package/ts_build/src/lib/routes/wallets.d.ts.map +1 -1
- package/ts_build/src/lib/routes/wallets.js +2 -1
- package/ts_build/src/lib/routes/wallets.js.map +1 -1
- package/ts_build/src/lib/server.d.ts +1 -3
- package/ts_build/src/lib/server.d.ts.map +1 -1
- package/ts_build/src/lib/server.js +128 -96
- package/ts_build/src/lib/server.js.map +1 -1
- package/ts_build/src/lib/storage.d.ts +17 -10
- package/ts_build/src/lib/storage.d.ts.map +1 -1
- package/ts_build/src/lib/storage.js +73 -20
- package/ts_build/src/lib/storage.js.map +1 -1
- package/ts_build/test/chain/eth.test.js +59 -0
- package/ts_build/test/chain/eth.test.js.map +1 -1
- package/ts_build/test/chain/sol.test.js +1 -1
- package/ts_build/test/chain/sol.test.js.map +1 -1
- package/ts_build/test/chain/xrp.test.js +1 -1
- package/ts_build/test/chain/xrp.test.js.map +1 -1
- package/ts_build/test/expressapp.test.js +132 -0
- package/ts_build/test/expressapp.test.js.map +1 -1
- package/ts_build/test/integration/addressReads.test.d.ts +2 -0
- package/ts_build/test/integration/addressReads.test.d.ts.map +1 -0
- package/ts_build/test/integration/addressReads.test.js +465 -0
- package/ts_build/test/integration/addressReads.test.js.map +1 -0
- package/ts_build/test/integration/bcmonitor.test.js +40 -0
- package/ts_build/test/integration/bcmonitor.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/banxa.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/banxa.test.js +93 -5
- package/ts_build/test/integration/externalservices/banxa.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/changelly.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/changelly.test.js +111 -6
- package/ts_build/test/integration/externalservices/changelly.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/coinGecko.test.js +4 -0
- package/ts_build/test/integration/externalservices/coinGecko.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/moonpay.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/moonpay.test.js +169 -9
- package/ts_build/test/integration/externalservices/moonpay.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/oneInch.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/oneInch.test.js +26 -1
- package/ts_build/test/integration/externalservices/oneInch.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/ramp.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/ramp.test.js +115 -4
- package/ts_build/test/integration/externalservices/ramp.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/sardine.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/sardine.test.js +94 -5
- package/ts_build/test/integration/externalservices/sardine.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/simplex.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/simplex.test.js +89 -5
- package/ts_build/test/integration/externalservices/simplex.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/thorswap.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/thorswap.test.js +76 -5
- package/ts_build/test/integration/externalservices/thorswap.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/transak.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/transak.test.js +93 -6
- package/ts_build/test/integration/externalservices/transak.test.js.map +1 -1
- package/ts_build/test/integration/helpers.js +1 -1
- package/ts_build/test/integration/helpers.js.map +1 -1
- package/ts_build/test/integration/server.test.js +225 -124
- package/ts_build/test/integration/server.test.js.map +1 -1
- package/ts_build/test/integration/walletReads.test.d.ts +2 -0
- package/ts_build/test/integration/walletReads.test.d.ts.map +1 -0
- package/ts_build/test/integration/walletReads.test.js +436 -0
- package/ts_build/test/integration/walletReads.test.js.map +1 -0
- package/src/externalservices/wyre.ts +0 -131
- package/test/integration/externalservices/wyre.test.ts +0 -270
- package/ts_build/src/externalservices/wyre.d.ts +0 -7
- package/ts_build/src/externalservices/wyre.d.ts.map +0 -1
- package/ts_build/src/externalservices/wyre.js +0 -144
- package/ts_build/src/externalservices/wyre.js.map +0 -1
- package/ts_build/test/integration/externalservices/wyre.test.d.ts +0 -2
- package/ts_build/test/integration/externalservices/wyre.test.d.ts.map +0 -1
- package/ts_build/test/integration/externalservices/wyre.test.js +0 -281
- package/ts_build/test/integration/externalservices/wyre.test.js.map +0 -1
|
@@ -61,7 +61,6 @@ const sardine_1 = require("../externalservices/sardine");
|
|
|
61
61
|
const simplex_1 = require("../externalservices/simplex");
|
|
62
62
|
const thorswap_1 = require("../externalservices/thorswap");
|
|
63
63
|
const transak_1 = require("../externalservices/transak");
|
|
64
|
-
const wyre_1 = require("../externalservices/wyre");
|
|
65
64
|
const serverMessages_1 = require("../serverMessages");
|
|
66
65
|
const bchaddresstranslator_1 = require("./bchaddresstranslator");
|
|
67
66
|
const blockchainexplorer_1 = require("./blockchainexplorer");
|
|
@@ -145,7 +144,6 @@ class WalletService {
|
|
|
145
144
|
simplex: new simplex_1.SimplexService(),
|
|
146
145
|
thorswap: new thorswap_1.ThorswapService(),
|
|
147
146
|
transak: new transak_1.TransakService(),
|
|
148
|
-
wyre: new wyre_1.WyreService(),
|
|
149
147
|
coinGecko: new coingecko_1.CoinGeckoService(this.storage),
|
|
150
148
|
};
|
|
151
149
|
}
|
|
@@ -643,25 +641,25 @@ class WalletService {
|
|
|
643
641
|
getStatus(opts, cb) {
|
|
644
642
|
opts = opts || {};
|
|
645
643
|
const status = {};
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
644
|
+
this.getWallet({}, (err, fetchedWallet) => {
|
|
645
|
+
if (err)
|
|
646
|
+
return cb(err);
|
|
647
|
+
const copyOfWallet = () => model_1.Wallet.fromObj(fetchedWallet.toObject());
|
|
648
|
+
const omit = (obj, keys) => Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
|
|
649
|
+
async.parallel([
|
|
650
|
+
next => {
|
|
651
|
+
let wallet = copyOfWallet();
|
|
654
652
|
const walletExtendedKeys = ['publicKeyRing', 'pubKey', 'addressManager'];
|
|
655
653
|
const copayerExtendedKeys = ['xPubKey', 'requestPubKey', 'signature', 'addressManager', 'customData'];
|
|
656
654
|
wallet.copayers = (wallet.copayers || []).map(copayer => {
|
|
657
655
|
if (copayer.id == this.copayerId)
|
|
658
656
|
return copayer;
|
|
659
|
-
return
|
|
657
|
+
return omit(copayer, ['customData']);
|
|
660
658
|
});
|
|
661
659
|
if (!opts.includeExtendedInfo) {
|
|
662
|
-
wallet =
|
|
660
|
+
wallet = omit(wallet, walletExtendedKeys);
|
|
663
661
|
wallet.copayers = (wallet.copayers || []).map(copayer => {
|
|
664
|
-
return
|
|
662
|
+
return omit(copayer, copayerExtendedKeys);
|
|
665
663
|
});
|
|
666
664
|
}
|
|
667
665
|
status.wallet = wallet;
|
|
@@ -672,43 +670,42 @@ class WalletService {
|
|
|
672
670
|
status.serverMessage = (0, deprecated_serverMessages_1.serverMessages)(wallet, this.appName, this.appVersion);
|
|
673
671
|
}
|
|
674
672
|
next();
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
673
|
+
},
|
|
674
|
+
next => {
|
|
675
|
+
this.getBalance({ ...opts, wallet: copyOfWallet() }, (err, balance) => {
|
|
676
|
+
if (opts.includeExtendedInfo) {
|
|
677
|
+
if (err && err.code != 'WALLET_NEED_SCAN') {
|
|
678
|
+
return next(err);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
else if (err) {
|
|
682
682
|
return next(err);
|
|
683
683
|
}
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
if (err)
|
|
710
|
-
return cb(err);
|
|
711
|
-
return cb(null, status);
|
|
684
|
+
status.balance = balance;
|
|
685
|
+
next();
|
|
686
|
+
});
|
|
687
|
+
},
|
|
688
|
+
next => {
|
|
689
|
+
this.getPendingTxs({ ...opts, wallet: copyOfWallet() }, (err, pendingTxps) => {
|
|
690
|
+
if (err)
|
|
691
|
+
return next(err);
|
|
692
|
+
status.pendingTxps = pendingTxps;
|
|
693
|
+
next();
|
|
694
|
+
});
|
|
695
|
+
},
|
|
696
|
+
next => {
|
|
697
|
+
this.getPreferences({}, (err, preferences) => {
|
|
698
|
+
if (err)
|
|
699
|
+
return next(err);
|
|
700
|
+
status.preferences = preferences;
|
|
701
|
+
next();
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
], err => {
|
|
705
|
+
if (err)
|
|
706
|
+
return cb(err);
|
|
707
|
+
return cb(null, status);
|
|
708
|
+
});
|
|
712
709
|
});
|
|
713
710
|
}
|
|
714
711
|
_verifySignature(text, signature, pubkey) {
|
|
@@ -1138,10 +1135,11 @@ class WalletService {
|
|
|
1138
1135
|
_canCreateAddress(ignoreMaxGap, cb) {
|
|
1139
1136
|
if (ignoreMaxGap)
|
|
1140
1137
|
return cb(null, true);
|
|
1141
|
-
|
|
1138
|
+
const newest = { noChange: true, reverse: true, limit: Defaults.MAX_MAIN_ADDRESS_GAP };
|
|
1139
|
+
this.storage.fetchAddressesPage(this.walletId, newest, (err, addresses) => {
|
|
1142
1140
|
if (err)
|
|
1143
1141
|
return cb(err);
|
|
1144
|
-
const latestAddresses = addresses.
|
|
1142
|
+
const latestAddresses = addresses.reverse();
|
|
1145
1143
|
if (latestAddresses.length < Defaults.MAX_MAIN_ADDRESS_GAP ||
|
|
1146
1144
|
latestAddresses.some(a => a.hasActivity))
|
|
1147
1145
|
return cb(null, true);
|
|
@@ -1214,7 +1212,7 @@ class WalletService {
|
|
|
1214
1212
|
}, true);
|
|
1215
1213
|
};
|
|
1216
1214
|
const getFirstAddress = (wallet, cb) => {
|
|
1217
|
-
this.storage.
|
|
1215
|
+
this.storage.fetchAddressesPage(this.walletId, { limit: 1 }, (err, addresses) => {
|
|
1218
1216
|
if (err)
|
|
1219
1217
|
return cb(err);
|
|
1220
1218
|
if (addresses?.length) {
|
|
@@ -1259,21 +1257,10 @@ class WalletService {
|
|
|
1259
1257
|
}
|
|
1260
1258
|
getAddresses(opts, cb) {
|
|
1261
1259
|
opts = opts || {};
|
|
1262
|
-
|
|
1260
|
+
const { noChange, addresses: only, reverse, skip, limit } = opts;
|
|
1261
|
+
this.storage.fetchAddressesPage(this.walletId, { noChange, addresses: only, reverse, skip, limit }, (err, addresses) => {
|
|
1263
1262
|
if (err)
|
|
1264
1263
|
return cb(err);
|
|
1265
|
-
if (opts.noChange) {
|
|
1266
|
-
addresses = addresses.filter(a => !a.isChange);
|
|
1267
|
-
}
|
|
1268
|
-
if (opts.addresses) {
|
|
1269
|
-
addresses = addresses.filter(a => opts.addresses.includes(a.address));
|
|
1270
|
-
}
|
|
1271
|
-
if (opts.reverse)
|
|
1272
|
-
addresses.reverse();
|
|
1273
|
-
if (opts.skip > 0)
|
|
1274
|
-
addresses = addresses.slice(opts.skip);
|
|
1275
|
-
if (opts.limit > 0)
|
|
1276
|
-
addresses = addresses.slice(0, opts.limit);
|
|
1277
1264
|
this.getWallet({}, (err, wallet) => {
|
|
1278
1265
|
if (err)
|
|
1279
1266
|
return cb(err);
|
|
@@ -1329,7 +1316,7 @@ class WalletService {
|
|
|
1329
1316
|
let allAddresses, allUtxos, utxoIndex, bc, wallet, blockchainHeight;
|
|
1330
1317
|
async.series([
|
|
1331
1318
|
next => {
|
|
1332
|
-
|
|
1319
|
+
const useWallet = (err, w) => {
|
|
1333
1320
|
if (err)
|
|
1334
1321
|
return next(err);
|
|
1335
1322
|
wallet = w;
|
|
@@ -1339,7 +1326,10 @@ class WalletService {
|
|
|
1339
1326
|
if (!bc)
|
|
1340
1327
|
return cb(new Error('Could not get blockchain explorer instance'));
|
|
1341
1328
|
return next();
|
|
1342
|
-
}
|
|
1329
|
+
};
|
|
1330
|
+
if (opts.wallet)
|
|
1331
|
+
return useWallet(null, opts.wallet);
|
|
1332
|
+
this.getWallet({}, useWallet);
|
|
1343
1333
|
},
|
|
1344
1334
|
next => {
|
|
1345
1335
|
if (Array.isArray(opts.addresses)) {
|
|
@@ -1422,7 +1412,7 @@ class WalletService {
|
|
|
1422
1412
|
},
|
|
1423
1413
|
next => {
|
|
1424
1414
|
utxoIndex = _.keyBy(allUtxos, utxoKey);
|
|
1425
|
-
this.getPendingTxs({ numberFormat: opts.numberFormat }, (err, txps) => {
|
|
1415
|
+
this.getPendingTxs({ numberFormat: opts.numberFormat, wallet }, (err, txps) => {
|
|
1426
1416
|
if (err)
|
|
1427
1417
|
return next(err);
|
|
1428
1418
|
const lockedInputs = txps.flatMap(t => t.inputs).map(utxoKey);
|
|
@@ -1456,7 +1446,7 @@ class WalletService {
|
|
|
1456
1446
|
});
|
|
1457
1447
|
logger_1.default.debug(`Got ${allUtxos.length} usable UTXOs`);
|
|
1458
1448
|
return next();
|
|
1459
|
-
});
|
|
1449
|
+
}, wallet);
|
|
1460
1450
|
},
|
|
1461
1451
|
next => {
|
|
1462
1452
|
const addressToPath = _.keyBy(allAddresses, 'address');
|
|
@@ -1468,6 +1458,7 @@ class WalletService {
|
|
|
1468
1458
|
}
|
|
1469
1459
|
utxo.path = addressToPath[utxo.address].path;
|
|
1470
1460
|
utxo.publicKeys = addressToPath[utxo.address].publicKeys;
|
|
1461
|
+
utxo.isChange = addressToPath[utxo.address].isChange;
|
|
1471
1462
|
}
|
|
1472
1463
|
return next();
|
|
1473
1464
|
}
|
|
@@ -1817,12 +1808,42 @@ class WalletService {
|
|
|
1817
1808
|
return null;
|
|
1818
1809
|
}
|
|
1819
1810
|
_validateAndSanitizeTxOpts(wallet, opts, cb) {
|
|
1811
|
+
const gasFeeFields = ['gasPrice', 'maxGasFee', 'priorityGasFee'];
|
|
1812
|
+
const hasGasFeeOverride = gasFeeFields.some(key => opts[key] != null);
|
|
1813
|
+
if (hasGasFeeOverride) {
|
|
1814
|
+
if (!Constants.EVM_CHAINS[wallet.chain.toUpperCase()]) {
|
|
1815
|
+
return cb(new clienterror_1.ClientError('Gas fee overrides are only supported for EVM chains'));
|
|
1816
|
+
}
|
|
1817
|
+
for (const key of gasFeeFields) {
|
|
1818
|
+
if (opts[key] != null && (!Number.isSafeInteger(opts[key]) || opts[key] <= 0)) {
|
|
1819
|
+
return cb(new clienterror_1.ClientError(`${key} must be a positive safe integer in wei`));
|
|
1820
|
+
}
|
|
1821
|
+
}
|
|
1822
|
+
if (opts.gasPrice != null && Number(opts.txType || 0) !== 0) {
|
|
1823
|
+
return cb(new clienterror_1.ClientError('gasPrice requires a type 0 transaction'));
|
|
1824
|
+
}
|
|
1825
|
+
if ((opts.maxGasFee != null || opts.priorityGasFee != null) && Number(opts.txType) !== 2) {
|
|
1826
|
+
return cb(new clienterror_1.ClientError('maxGasFee and priorityGasFee require a type 2 transaction'));
|
|
1827
|
+
}
|
|
1828
|
+
if ((opts.maxGasFee != null) !== (opts.priorityGasFee != null)) {
|
|
1829
|
+
return cb(new clienterror_1.ClientError('maxGasFee and priorityGasFee must be supplied together'));
|
|
1830
|
+
}
|
|
1831
|
+
if (opts.priorityGasFee > opts.maxGasFee) {
|
|
1832
|
+
return cb(new clienterror_1.ClientError('priorityGasFee must not exceed maxGasFee'));
|
|
1833
|
+
}
|
|
1834
|
+
if (opts.feePerKb != null || opts.fee != null) {
|
|
1835
|
+
return cb(new clienterror_1.ClientError('Gas fee overrides cannot be combined with feePerKb or fee'));
|
|
1836
|
+
}
|
|
1837
|
+
if (opts.sendMax) {
|
|
1838
|
+
return cb(new clienterror_1.ClientError('Gas fee overrides are not supported with sendMax'));
|
|
1839
|
+
}
|
|
1840
|
+
}
|
|
1820
1841
|
async.series([
|
|
1821
1842
|
next => {
|
|
1822
1843
|
const feeArgs = boolToNum(!!opts.feeLevel) + boolToNum(Utils.isNumber(opts.feePerKb)) + boolToNum(Utils.isNumber(opts.fee));
|
|
1823
1844
|
if (feeArgs > 1)
|
|
1824
1845
|
return next(new clienterror_1.ClientError('Only one of feeLevel/feePerKb/fee can be specified'));
|
|
1825
|
-
if (feeArgs == 0) {
|
|
1846
|
+
if (feeArgs == 0 && !hasGasFeeOverride) {
|
|
1826
1847
|
opts.feeLevel = 'normal';
|
|
1827
1848
|
}
|
|
1828
1849
|
const feeLevels = Defaults.FEE_LEVELS[wallet.chain];
|
|
@@ -1830,6 +1851,9 @@ class WalletService {
|
|
|
1830
1851
|
if (!feeLevels.some(lvl => lvl.name === opts.feeLevel))
|
|
1831
1852
|
return next(new clienterror_1.ClientError('Invalid fee level. Valid values are ' + feeLevels.map(lvl => lvl.name).join(', ')));
|
|
1832
1853
|
}
|
|
1854
|
+
if (hasGasFeeOverride) {
|
|
1855
|
+
delete opts.feeLevel;
|
|
1856
|
+
}
|
|
1833
1857
|
const error = index_1.ChainService.checkUtxos(wallet.chain, opts);
|
|
1834
1858
|
if (error) {
|
|
1835
1859
|
return next(new clienterror_1.ClientError('fee can only be set when inputs are specified'));
|
|
@@ -2467,39 +2491,47 @@ class WalletService {
|
|
|
2467
2491
|
});
|
|
2468
2492
|
}
|
|
2469
2493
|
getTx(opts, cb) {
|
|
2470
|
-
this.storage.
|
|
2494
|
+
this.storage.fetchWallet(this.walletId, (err, wallet) => {
|
|
2471
2495
|
if (err)
|
|
2472
2496
|
return cb(err);
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
if (
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2497
|
+
this.storage.fetchTx(this.walletId, opts.txProposalId, (err, txp) => {
|
|
2498
|
+
if (err)
|
|
2499
|
+
return cb(err);
|
|
2500
|
+
if (!txp)
|
|
2501
|
+
return cb(errordefinitions_1.Errors.TX_NOT_FOUND);
|
|
2502
|
+
if (!txp.txid)
|
|
2503
|
+
return cb(null, txp);
|
|
2504
|
+
this.storage.fetchTxNote(this.walletId, txp.txid, (err, note) => {
|
|
2505
|
+
if (err) {
|
|
2506
|
+
this.logw(`Error fetching tx note for ${txp.txid}:`, err);
|
|
2507
|
+
}
|
|
2508
|
+
txp.note = note;
|
|
2509
|
+
return cb(null, txp);
|
|
2510
|
+
}, wallet);
|
|
2511
|
+
}, wallet);
|
|
2484
2512
|
});
|
|
2485
2513
|
}
|
|
2486
2514
|
getTxByHash(opts, cb) {
|
|
2487
2515
|
if (!checkRequired(opts, 'txid', cb))
|
|
2488
2516
|
return;
|
|
2489
|
-
this.storage.
|
|
2517
|
+
this.storage.fetchWallet(this.walletId, (err, wallet) => {
|
|
2490
2518
|
if (err)
|
|
2491
2519
|
return cb(err);
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
if (
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2520
|
+
this.storage.fetchTxByHashForWallet(this.walletId, opts.txid, (err, txp) => {
|
|
2521
|
+
if (err)
|
|
2522
|
+
return cb(err);
|
|
2523
|
+
if (!txp)
|
|
2524
|
+
return cb(errordefinitions_1.Errors.TX_NOT_FOUND);
|
|
2525
|
+
if (!txp.txid)
|
|
2526
|
+
return cb(null, txp);
|
|
2527
|
+
this.storage.fetchTxNote(this.walletId, txp.txid, (err, note) => {
|
|
2528
|
+
if (err) {
|
|
2529
|
+
this.logw(`Error fetching tx note for ${txp.txid}:`, err);
|
|
2530
|
+
}
|
|
2531
|
+
txp.note = note;
|
|
2532
|
+
return cb(null, txp);
|
|
2533
|
+
}, wallet);
|
|
2534
|
+
}, wallet);
|
|
2503
2535
|
});
|
|
2504
2536
|
}
|
|
2505
2537
|
editTxNote(opts, cb) {
|
|
@@ -2975,7 +3007,7 @@ class WalletService {
|
|
|
2975
3007
|
}
|
|
2976
3008
|
return cb(err, txps);
|
|
2977
3009
|
});
|
|
2978
|
-
});
|
|
3010
|
+
}, opts.wallet);
|
|
2979
3011
|
}
|
|
2980
3012
|
}
|
|
2981
3013
|
getPendingTxsPromise(opts) {
|
|
@@ -3757,12 +3789,12 @@ class WalletService {
|
|
|
3757
3789
|
this.storage.fetchTxs(this.walletId, {
|
|
3758
3790
|
minTs,
|
|
3759
3791
|
maxTs
|
|
3760
|
-
}, done);
|
|
3792
|
+
}, done, wallet);
|
|
3761
3793
|
},
|
|
3762
3794
|
done => {
|
|
3763
3795
|
this.storage.fetchTxNotes(this.walletId, {
|
|
3764
3796
|
minTs
|
|
3765
|
-
}, done);
|
|
3797
|
+
}, done, wallet);
|
|
3766
3798
|
}
|
|
3767
3799
|
], (err, res) => {
|
|
3768
3800
|
return next(err, {
|