@bitpay-labs/bitcore-wallet-service 11.8.2 → 11.10.0
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/bws.example.config.js +4 -2
- package/package.json +4 -4
- package/src/config.ts +4 -2
- package/src/externalservices/moonpay.ts +85 -1
- package/src/lib/blockchainexplorers/v8.ts +1 -1
- package/src/lib/chain/eth/index.ts +8 -7
- package/src/lib/chain/index.ts +1 -1
- package/src/lib/chain/sol/index.ts +4 -4
- package/src/lib/chain/xrp/index.ts +3 -3
- package/src/lib/common/utils.ts +12 -5
- package/src/lib/errors/errordefinitions.ts +2 -0
- package/src/lib/expressapp.ts +6 -3
- package/src/lib/model/txnote.ts +3 -0
- package/src/lib/model/txproposal.ts +153 -68
- package/src/lib/model/txproposal_legacy.ts +5 -4
- package/src/lib/model/txproposalaction.ts +9 -0
- package/src/lib/routes/blockchain.ts +2 -3
- package/src/lib/routes/context.ts +10 -1
- package/src/lib/routes/maintenance.ts +6 -3
- package/src/lib/routes/services.ts +12 -0
- package/src/lib/routes/transactions.ts +17 -2
- package/src/lib/routes/walletdata.ts +1 -2
- package/src/lib/routes/wallets.ts +9 -4
- package/src/lib/server.ts +62 -9
- package/src/lib/storage.ts +13 -12
- package/src/types/expressapp.d.ts +2 -1
- package/test/chain/bch.test.ts +8 -1
- package/test/chain/btc.test.ts +2 -2
- package/test/chain/doge.test.ts +4 -6
- package/test/chain/ltc.test.ts +4 -5
- package/test/chain/xrp.test.ts +4 -39
- package/test/integration/externalservices/moonpay.test.ts +149 -0
- package/test/model/txproposal.test.ts +64 -1
- package/test/utils.test.ts +29 -0
- package/ts_build/package.json +3 -3
- package/ts_build/src/config.d.ts.map +1 -1
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/externalservices/moonpay.d.ts +4 -0
- package/ts_build/src/externalservices/moonpay.d.ts.map +1 -1
- package/ts_build/src/externalservices/moonpay.js +68 -1
- package/ts_build/src/externalservices/moonpay.js.map +1 -1
- package/ts_build/src/lib/blockchainexplorers/v8.js +1 -1
- package/ts_build/src/lib/chain/eth/index.d.ts +6 -5
- package/ts_build/src/lib/chain/eth/index.d.ts.map +1 -1
- package/ts_build/src/lib/chain/eth/index.js +5 -5
- package/ts_build/src/lib/chain/eth/index.js.map +1 -1
- package/ts_build/src/lib/chain/index.d.ts +1 -1
- package/ts_build/src/lib/chain/index.d.ts.map +1 -1
- package/ts_build/src/lib/chain/index.js.map +1 -1
- package/ts_build/src/lib/chain/sol/index.js +4 -4
- package/ts_build/src/lib/chain/sol/index.js.map +1 -1
- package/ts_build/src/lib/chain/xrp/index.js +3 -3
- package/ts_build/src/lib/chain/xrp/index.js.map +1 -1
- package/ts_build/src/lib/common/utils.d.ts.map +1 -1
- package/ts_build/src/lib/common/utils.js +14 -9
- package/ts_build/src/lib/common/utils.js.map +1 -1
- package/ts_build/src/lib/errors/errordefinitions.d.ts +1 -0
- package/ts_build/src/lib/errors/errordefinitions.d.ts.map +1 -1
- package/ts_build/src/lib/errors/errordefinitions.js +1 -0
- package/ts_build/src/lib/errors/errordefinitions.js.map +1 -1
- package/ts_build/src/lib/expressapp.d.ts.map +1 -1
- package/ts_build/src/lib/expressapp.js +5 -3
- package/ts_build/src/lib/expressapp.js.map +1 -1
- package/ts_build/src/lib/model/txnote.d.ts +1 -0
- package/ts_build/src/lib/model/txnote.d.ts.map +1 -1
- package/ts_build/src/lib/model/txnote.js +1 -0
- package/ts_build/src/lib/model/txnote.js.map +1 -1
- package/ts_build/src/lib/model/txproposal.d.ts +72 -52
- package/ts_build/src/lib/model/txproposal.d.ts.map +1 -1
- package/ts_build/src/lib/model/txproposal.js +69 -17
- package/ts_build/src/lib/model/txproposal.js.map +1 -1
- package/ts_build/src/lib/model/txproposal_legacy.d.ts +3 -3
- package/ts_build/src/lib/model/txproposal_legacy.d.ts.map +1 -1
- package/ts_build/src/lib/model/txproposal_legacy.js +1 -0
- package/ts_build/src/lib/model/txproposal_legacy.js.map +1 -1
- package/ts_build/src/lib/model/txproposalaction.d.ts +2 -0
- package/ts_build/src/lib/model/txproposalaction.d.ts.map +1 -1
- package/ts_build/src/lib/model/txproposalaction.js +2 -0
- package/ts_build/src/lib/model/txproposalaction.js.map +1 -1
- package/ts_build/src/lib/routes/blockchain.d.ts.map +1 -1
- package/ts_build/src/lib/routes/blockchain.js +2 -36
- package/ts_build/src/lib/routes/blockchain.js.map +1 -1
- package/ts_build/src/lib/routes/context.d.ts +1 -0
- package/ts_build/src/lib/routes/context.d.ts.map +1 -1
- package/ts_build/src/lib/routes/context.js +8 -1
- package/ts_build/src/lib/routes/context.js.map +1 -1
- package/ts_build/src/lib/routes/maintenance.d.ts.map +1 -1
- package/ts_build/src/lib/routes/maintenance.js +6 -36
- package/ts_build/src/lib/routes/maintenance.js.map +1 -1
- package/ts_build/src/lib/routes/services.d.ts.map +1 -1
- package/ts_build/src/lib/routes/services.js +10 -0
- package/ts_build/src/lib/routes/services.js.map +1 -1
- package/ts_build/src/lib/routes/transactions.d.ts +1 -0
- package/ts_build/src/lib/routes/transactions.d.ts.map +1 -1
- package/ts_build/src/lib/routes/transactions.js +14 -2
- package/ts_build/src/lib/routes/transactions.js.map +1 -1
- package/ts_build/src/lib/routes/walletdata.d.ts.map +1 -1
- package/ts_build/src/lib/routes/walletdata.js +1 -35
- package/ts_build/src/lib/routes/walletdata.js.map +1 -1
- package/ts_build/src/lib/routes/wallets.d.ts +1 -0
- package/ts_build/src/lib/routes/wallets.d.ts.map +1 -1
- package/ts_build/src/lib/routes/wallets.js +8 -4
- package/ts_build/src/lib/routes/wallets.js.map +1 -1
- package/ts_build/src/lib/server.d.ts +6 -2
- package/ts_build/src/lib/server.d.ts.map +1 -1
- package/ts_build/src/lib/server.js +45 -3
- package/ts_build/src/lib/server.js.map +1 -1
- package/ts_build/src/lib/storage.d.ts +6 -6
- package/ts_build/src/lib/storage.d.ts.map +1 -1
- package/ts_build/src/lib/storage.js +6 -6
- package/ts_build/src/lib/storage.js.map +1 -1
- package/ts_build/test/chain/bch.test.js +7 -0
- package/ts_build/test/chain/bch.test.js.map +1 -1
- package/ts_build/test/chain/btc.test.js +2 -2
- package/ts_build/test/chain/btc.test.js.map +1 -1
- package/ts_build/test/chain/doge.test.js +3 -5
- package/ts_build/test/chain/doge.test.js.map +1 -1
- package/ts_build/test/chain/ltc.test.js +3 -4
- package/ts_build/test/chain/ltc.test.js.map +1 -1
- package/ts_build/test/chain/xrp.test.js +3 -38
- package/ts_build/test/chain/xrp.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/moonpay.test.js +139 -0
- package/ts_build/test/integration/externalservices/moonpay.test.js.map +1 -1
- package/ts_build/test/model/txproposal.test.js +57 -0
- package/ts_build/test/model/txproposal.test.js.map +1 -1
- package/ts_build/test/utils.test.js +23 -0
- package/ts_build/test/utils.test.js.map +1 -1
package/bws.example.config.js
CHANGED
|
@@ -214,10 +214,11 @@ module.exports = {
|
|
|
214
214
|
// moonpay: {
|
|
215
215
|
// sandbox: {
|
|
216
216
|
// apiKey: 'moonpay_sandbox_api_key_here',
|
|
217
|
-
// api: 'https://api.moonpay.
|
|
217
|
+
// api: 'https://api.moonpay.dev',
|
|
218
218
|
// widgetApi: 'https://buy-sandbox.moonpay.com',
|
|
219
219
|
// sellWidgetApi: 'https://sell-sandbox.moonpay.com',
|
|
220
220
|
// secretKey: 'moonpay_sandbox_secret_key_here',
|
|
221
|
+
// secretKeyEmbedded: 'moonpay_sandbox_secret_key_embedded_here',
|
|
221
222
|
// },
|
|
222
223
|
// production: {
|
|
223
224
|
// apiKey: 'moonpay_production_api_key_here',
|
|
@@ -225,10 +226,11 @@ module.exports = {
|
|
|
225
226
|
// widgetApi: 'https://buy.moonpay.com',
|
|
226
227
|
// sellWidgetApi: 'https://sell.moonpay.com',
|
|
227
228
|
// secretKey: 'moonpay_production_secret_key_here',
|
|
229
|
+
// secretKeyEmbedded: 'moonpay_production_secret_key_embedded_here',
|
|
228
230
|
// },
|
|
229
231
|
// sandboxWeb: {
|
|
230
232
|
// apiKey: 'moonpay_sandbox_web_api_key_here',
|
|
231
|
-
// api: 'https://api.moonpay.
|
|
233
|
+
// api: 'https://api.moonpay.dev',
|
|
232
234
|
// widgetApi: 'https://buy-sandbox.moonpay.com',
|
|
233
235
|
// sellWidgetApi: 'https://sell-sandbox.moonpay.com',
|
|
234
236
|
// secretKey: 'moonpay_sandbox_web_secret_key_here',
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@bitpay-labs/bitcore-wallet-service",
|
|
3
3
|
"description": "A service for Mutisig HD Bitcoin Wallets",
|
|
4
4
|
"author": "BitPay Inc",
|
|
5
|
-
"version": "11.
|
|
5
|
+
"version": "11.10.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "ts_build/src/index.js",
|
|
8
8
|
"types": "./ts_build/src/index.d.ts",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@bitpay-labs/bitcore-logging": "^11.8.1",
|
|
47
|
-
"@bitpay-labs/bitcore-tss": "^11.
|
|
48
|
-
"@bitpay-labs/crypto-wallet-core": "^11.
|
|
47
|
+
"@bitpay-labs/bitcore-tss": "^11.10.0",
|
|
48
|
+
"@bitpay-labs/crypto-wallet-core": "^11.10.0",
|
|
49
49
|
"@sendgrid/mail": "6.5.4",
|
|
50
50
|
"abi-decoder": "2.4.0",
|
|
51
51
|
"async": "0.9.2",
|
|
@@ -126,5 +126,5 @@
|
|
|
126
126
|
"email": "kjoseph@bitpay.com"
|
|
127
127
|
}
|
|
128
128
|
],
|
|
129
|
-
"gitHead": "
|
|
129
|
+
"gitHead": "cccc9de4342d56cfcfc14d8b563d7542e4b08b6a"
|
|
130
130
|
}
|
package/src/config.ts
CHANGED
|
@@ -289,10 +289,11 @@ const Config = (): any => {
|
|
|
289
289
|
// moonpay: {
|
|
290
290
|
// sandbox: {
|
|
291
291
|
// apiKey: 'moonpay_sandbox_api_key_here',
|
|
292
|
-
// api: 'https://api.moonpay.
|
|
292
|
+
// api: 'https://api.moonpay.dev',
|
|
293
293
|
// widgetApi: 'https://buy-sandbox.moonpay.com',
|
|
294
294
|
// sellWidgetApi: 'https://sell-sandbox.moonpay.com',
|
|
295
295
|
// secretKey: 'moonpay_sandbox_secret_key_here',
|
|
296
|
+
// secretKeyEmbedded: 'moonpay_sandbox_secret_key_embedded_here',
|
|
296
297
|
// },
|
|
297
298
|
// production: {
|
|
298
299
|
// apiKey: 'moonpay_production_api_key_here',
|
|
@@ -300,10 +301,11 @@ const Config = (): any => {
|
|
|
300
301
|
// widgetApi: 'https://buy.moonpay.com',
|
|
301
302
|
// sellWidgetApi: 'https://sell.moonpay.com',
|
|
302
303
|
// secretKey: 'moonpay_production_secret_key_here',
|
|
304
|
+
// secretKeyEmbedded: 'moonpay_production_secret_key_embedded_here',
|
|
303
305
|
// },
|
|
304
306
|
// sandboxWeb: {
|
|
305
307
|
// apiKey: 'moonpay_sandbox_web_api_key_here',
|
|
306
|
-
// api: 'https://api.moonpay.
|
|
308
|
+
// api: 'https://api.moonpay.dev',
|
|
307
309
|
// widgetApi: 'https://buy-sandbox.moonpay.com',
|
|
308
310
|
// sellWidgetApi: 'https://sell-sandbox.moonpay.com',
|
|
309
311
|
// secretKey: 'moonpay_sandbox_web_secret_key_here',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BitcoreLib as Bitcore } from '@bitpay-labs/crypto-wallet-core';
|
|
2
2
|
import * as request from 'request';
|
|
3
3
|
import config from '../config';
|
|
4
|
+
import { Utils } from '../lib/common/utils';
|
|
4
5
|
import { ClientError } from '../lib/errors/clienterror';
|
|
5
6
|
import { checkRequired } from '../lib/server';
|
|
6
7
|
|
|
@@ -25,12 +26,14 @@ export class MoonpayService {
|
|
|
25
26
|
SELL_WIDGET_API: string;
|
|
26
27
|
API_KEY: string;
|
|
27
28
|
SECRET_KEY: string;
|
|
29
|
+
SECRET_KEY_EMBEDDED: string | undefined;
|
|
28
30
|
} = {
|
|
29
31
|
API: config.moonpay[env].api,
|
|
30
32
|
WIDGET_API: config.moonpay[env].widgetApi,
|
|
31
33
|
SELL_WIDGET_API: config.moonpay[env].sellWidgetApi,
|
|
32
34
|
API_KEY: config.moonpay[env].apiKey,
|
|
33
|
-
SECRET_KEY: config.moonpay[env].secretKey
|
|
35
|
+
SECRET_KEY: config.moonpay[env].secretKey,
|
|
36
|
+
SECRET_KEY_EMBEDDED: config.moonpay[env].secretKeyEmbedded
|
|
34
37
|
};
|
|
35
38
|
|
|
36
39
|
return keys;
|
|
@@ -435,4 +438,85 @@ export class MoonpayService {
|
|
|
435
438
|
);
|
|
436
439
|
});
|
|
437
440
|
}
|
|
441
|
+
|
|
442
|
+
moonpayCreateSession(req): Promise<{ sessionToken: string }> {
|
|
443
|
+
return new Promise((resolve, reject) => {
|
|
444
|
+
const keys = this.moonpayGetKeys(req);
|
|
445
|
+
const API = keys.API;
|
|
446
|
+
const SECRET_KEY = keys.SECRET_KEY_EMBEDDED;
|
|
447
|
+
|
|
448
|
+
if (!checkRequired(req.body, ['externalCustomerId'])) {
|
|
449
|
+
return reject(new ClientError("Moonpay's request missing arguments"));
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const deviceIp = Utils.getIpFromReq(req);
|
|
453
|
+
if (!deviceIp) {
|
|
454
|
+
return reject(new ClientError('Could not determine device IP address'));
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
const headers = {
|
|
458
|
+
'Content-Type': 'application/json',
|
|
459
|
+
Authorization: 'Api-Key ' + SECRET_KEY,
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
const body: any = {
|
|
463
|
+
externalCustomerId: req.body.externalCustomerId,
|
|
464
|
+
deviceIp
|
|
465
|
+
};
|
|
466
|
+
if (req.body.email) body.email = req.body.email;
|
|
467
|
+
if (req.body.phoneNumber) body.phoneNumber = req.body.phoneNumber;
|
|
468
|
+
|
|
469
|
+
const URL = API + '/platform/v1/session';
|
|
470
|
+
|
|
471
|
+
this.request.post(
|
|
472
|
+
URL,
|
|
473
|
+
{
|
|
474
|
+
headers,
|
|
475
|
+
body,
|
|
476
|
+
json: true
|
|
477
|
+
},
|
|
478
|
+
(err, data) => {
|
|
479
|
+
if (err) {
|
|
480
|
+
return reject(err.body ?? err);
|
|
481
|
+
} else {
|
|
482
|
+
return resolve(data.body ?? data);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
);
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
moonpayRevokeActiveSession(req): Promise<void> {
|
|
490
|
+
return new Promise((resolve, reject) => {
|
|
491
|
+
const keys = this.moonpayGetKeys(req);
|
|
492
|
+
const API = keys.API;
|
|
493
|
+
const SECRET_KEY = keys.SECRET_KEY_EMBEDDED;
|
|
494
|
+
|
|
495
|
+
if (!checkRequired(req.body, ['externalCustomerId'])) {
|
|
496
|
+
return reject(new ClientError("Moonpay's request missing arguments"));
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
const headers = {
|
|
500
|
+
Accept: 'application/json',
|
|
501
|
+
Authorization: 'Api-Key ' + SECRET_KEY
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
const URL = API + '/platform/v1/sessions?externalCustomerId=' + encodeURIComponent(req.body.externalCustomerId);
|
|
505
|
+
|
|
506
|
+
this.request.delete(
|
|
507
|
+
URL,
|
|
508
|
+
{
|
|
509
|
+
headers,
|
|
510
|
+
json: true
|
|
511
|
+
},
|
|
512
|
+
(err, data) => {
|
|
513
|
+
if (err) {
|
|
514
|
+
return reject(err.body ? err.body : err);
|
|
515
|
+
} else {
|
|
516
|
+
return resolve(data.body ? data.body : data);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
);
|
|
520
|
+
});
|
|
521
|
+
}
|
|
438
522
|
}
|
|
@@ -695,7 +695,7 @@ export class V8 {
|
|
|
695
695
|
return cb(null, ret || Defaults.MIN_SOL_BALANCE);
|
|
696
696
|
} catch (err) {
|
|
697
697
|
logger.error('[v8.js] Error getting rentMinimum: %o', err);
|
|
698
|
-
return cb(null, Defaults.
|
|
698
|
+
return cb(null, Defaults.MIN_SOL_BALANCE);
|
|
699
699
|
}
|
|
700
700
|
})
|
|
701
701
|
.catch(cb);
|
|
@@ -3,13 +3,14 @@ import _ from 'lodash';
|
|
|
3
3
|
import { IWallet } from 'src/lib/model';
|
|
4
4
|
import { IAddress } from 'src/lib/model/address';
|
|
5
5
|
import { WalletService } from 'src/lib/server';
|
|
6
|
-
import { IChain } from '../../../types/chain';
|
|
7
6
|
import { Common } from '../../common';
|
|
8
7
|
import { ClientError } from '../../errors/clienterror';
|
|
9
8
|
import { Errors } from '../../errors/errordefinitions';
|
|
10
9
|
import logger from '../../logger';
|
|
11
10
|
import { ERC20Abi } from './abi-erc20';
|
|
12
11
|
import { InvoiceAbi } from './abi-invoice';
|
|
12
|
+
import type { IChain } from '../../../types/chain';
|
|
13
|
+
import type { TxProposal } from '../../model/txproposal';
|
|
13
14
|
|
|
14
15
|
const {
|
|
15
16
|
Constants,
|
|
@@ -98,24 +99,24 @@ export class EthChain implements IChain {
|
|
|
98
99
|
// getPendingTxs returns all txps when given a native currency
|
|
99
100
|
server.getPendingTxs(opts, (err, txps) => {
|
|
100
101
|
if (err) return cb(err);
|
|
101
|
-
let fees =
|
|
102
|
-
let amounts =
|
|
102
|
+
let fees = 0n;
|
|
103
|
+
let amounts = 0n;
|
|
103
104
|
|
|
104
105
|
txps.filter(txp => {
|
|
105
106
|
// Add gas used for tokens when getting native balance
|
|
106
107
|
if (!opts.tokenAddress) {
|
|
107
|
-
fees += txp.fee
|
|
108
|
+
fees += txp.fee ? BigInt(txp.fee) : 0n;
|
|
108
109
|
}
|
|
109
110
|
// Filter tokens when getting native balance
|
|
110
111
|
if (txp.tokenAddress && !opts.tokenAddress) {
|
|
111
112
|
return false;
|
|
112
113
|
}
|
|
113
|
-
amounts += txp.amount;
|
|
114
|
+
amounts += txp.amount ? BigInt(txp.amount) : 0n;
|
|
114
115
|
return true;
|
|
115
116
|
});
|
|
116
117
|
|
|
117
118
|
// TODO support big int
|
|
118
|
-
const lockedSum = (amounts + fees) || 0; // previously set to 0 if opts.multisigContractAddress
|
|
119
|
+
const lockedSum = Number(amounts + fees) || 0; // previously set to 0 if opts.multisigContractAddress
|
|
119
120
|
const convertedBalance = this.convertBitcoreBalance(balance, lockedSum);
|
|
120
121
|
server.storage.fetchAddresses(server.walletId, (err, addresses: IAddress[]) => {
|
|
121
122
|
if (err) return cb(err);
|
|
@@ -286,7 +287,7 @@ export class EthChain implements IChain {
|
|
|
286
287
|
});
|
|
287
288
|
}
|
|
288
289
|
|
|
289
|
-
getBitcoreTx(txp, opts = { signed: true }) {
|
|
290
|
+
getBitcoreTx(txp: TxProposal, opts = { signed: true }) {
|
|
290
291
|
const {
|
|
291
292
|
data,
|
|
292
293
|
outputs,
|
package/src/lib/chain/index.ts
CHANGED
|
@@ -94,7 +94,7 @@ class ChainProxy {
|
|
|
94
94
|
return this.get(wallet.chain).getFee(server, wallet, opts);
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
getBitcoreTx(txp: TxProposal
|
|
97
|
+
getBitcoreTx(txp: TxProposal<any>, opts = { signed: true }) {
|
|
98
98
|
return this.get(txp.chain).getBitcoreTx(txp, { signed: opts.signed });
|
|
99
99
|
}
|
|
100
100
|
|
|
@@ -56,18 +56,18 @@ export class SolChain implements IChain {
|
|
|
56
56
|
const { fees, amounts } = txps.reduce((acc, txp) => {
|
|
57
57
|
// Add gas used for tokens when getting native balance
|
|
58
58
|
if (!opts.tokenAddress) {
|
|
59
|
-
acc.fees += txp.fee
|
|
59
|
+
acc.fees += txp.fee ? BigInt(txp.fee) : 0n;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
// Filter tokens when getting native balance
|
|
63
63
|
if (!(txp.tokenAddress && !opts.tokenAddress)) {
|
|
64
|
-
acc.amounts += txp.amount;
|
|
64
|
+
acc.amounts += txp.amount ? BigInt(txp.amount) : 0n;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
return acc;
|
|
68
|
-
}, { fees:
|
|
68
|
+
}, { fees: 0n, amounts: 0n });
|
|
69
69
|
|
|
70
|
-
const lockedSum = (amounts + fees) || 0; // previously set to 0 if opts.multisigContractAddress
|
|
70
|
+
const lockedSum = Number(amounts + fees) || 0; // previously set to 0 if opts.multisigContractAddress
|
|
71
71
|
const reserveAmount = opts.tokenAddress ? 0 : reserve;
|
|
72
72
|
const convertedBalance = this.convertBitcoreBalance(balance, lockedSum, reserveAmount);
|
|
73
73
|
server.storage.fetchAddresses(server.walletId, (err, addresses: IAddress[]) => {
|
|
@@ -65,9 +65,9 @@ export class XrpChain implements IChain {
|
|
|
65
65
|
server.getPendingTxs(opts, (err, txps) => {
|
|
66
66
|
if (err) return cb(err);
|
|
67
67
|
const lockedSum = txps.reduce((sum, txp) => {
|
|
68
|
-
return sum + txp.amount + (txp.fee || 0);
|
|
69
|
-
},
|
|
70
|
-
const convertedBalance = this.convertBitcoreBalance(balance, lockedSum, reserve);
|
|
68
|
+
return sum + BigInt(txp.amount || 0) + BigInt(txp.fee || 0);
|
|
69
|
+
}, 0n) || 0n;
|
|
70
|
+
const convertedBalance = this.convertBitcoreBalance(balance, Number(lockedSum), reserve);
|
|
71
71
|
server.storage.fetchAddresses(server.walletId, (err, addresses: IAddress[]) => {
|
|
72
72
|
if (err) return cb(err);
|
|
73
73
|
if (addresses.length > 0) {
|
package/src/lib/common/utils.ts
CHANGED
|
@@ -282,13 +282,20 @@ export const Utils = {
|
|
|
282
282
|
},
|
|
283
283
|
|
|
284
284
|
getIpFromReq(req): string {
|
|
285
|
+
let ip = '';
|
|
285
286
|
if (req.headers) {
|
|
286
|
-
if (req.headers['x-forwarded-for'])
|
|
287
|
-
|
|
287
|
+
if (req.headers['x-forwarded-for']) {
|
|
288
|
+
ip = req.headers['x-forwarded-for'].split(',')[0];
|
|
289
|
+
} else if (req.headers['x-real-ip']) {
|
|
290
|
+
ip = req.headers['x-real-ip'].split(',')[0];
|
|
291
|
+
}
|
|
288
292
|
}
|
|
289
|
-
if (req.ip)
|
|
290
|
-
if (
|
|
291
|
-
|
|
293
|
+
if (!ip && req.ip) ip = req.ip;
|
|
294
|
+
if (!ip && req.connection?.remoteAddress) ip = req.connection.remoteAddress;
|
|
295
|
+
|
|
296
|
+
if (ip && typeof ip === 'string') ip = ip.trim();
|
|
297
|
+
|
|
298
|
+
return ip;
|
|
292
299
|
},
|
|
293
300
|
|
|
294
301
|
checkValueInCollection(value, collection) {
|
|
@@ -61,6 +61,7 @@ interface Errors<T> {
|
|
|
61
61
|
WALLET_NOT_FOUND: T;
|
|
62
62
|
WALLET_NEED_SCAN: T;
|
|
63
63
|
WRONG_SIGNING_METHOD: T;
|
|
64
|
+
INVALID_NUMBER_FORMAT: T;
|
|
64
65
|
TSS_SESSION_NOT_FOUND: T;
|
|
65
66
|
TSS_INVALID_PASSWORD: T;
|
|
66
67
|
TSS_ROUND_ALREADY_DONE: T;
|
|
@@ -132,6 +133,7 @@ const errors: Errors<string> = {
|
|
|
132
133
|
WALLET_NOT_FOUND: 'Wallet not found',
|
|
133
134
|
WALLET_NEED_SCAN: 'Wallet needs addresses scan',
|
|
134
135
|
WRONG_SIGNING_METHOD: 'Wrong signed method for coin/network',
|
|
136
|
+
INVALID_NUMBER_FORMAT: 'Invalid number format. Supported formats are: number, string, hex',
|
|
135
137
|
TSS_SESSION_NOT_FOUND: 'Session not found',
|
|
136
138
|
TSS_INVALID_PASSWORD: 'Invalid password',
|
|
137
139
|
TSS_ROUND_ALREADY_DONE: 'Your message is for a round that has already finished',
|
package/src/lib/expressapp.ts
CHANGED
|
@@ -49,7 +49,8 @@ export class ExpressApp {
|
|
|
49
49
|
getServerWithAuth,
|
|
50
50
|
getServerWithMultiAuth,
|
|
51
51
|
logDeprecated,
|
|
52
|
-
setPublicCache
|
|
52
|
+
setPublicCache,
|
|
53
|
+
checkNumberFormat
|
|
53
54
|
} = createRouteHelpers(returnError);
|
|
54
55
|
|
|
55
56
|
registerWalletRoutes(router, {
|
|
@@ -58,12 +59,14 @@ export class ExpressApp {
|
|
|
58
59
|
getServerWithAuth,
|
|
59
60
|
getServerWithMultiAuth,
|
|
60
61
|
logDeprecated,
|
|
61
|
-
returnError
|
|
62
|
+
returnError,
|
|
63
|
+
checkNumberFormat
|
|
62
64
|
});
|
|
63
65
|
|
|
64
66
|
registerTransactionRoutes(router, {
|
|
65
67
|
getServerWithAuth,
|
|
66
|
-
returnError
|
|
68
|
+
returnError,
|
|
69
|
+
checkNumberFormat
|
|
67
70
|
});
|
|
68
71
|
|
|
69
72
|
registerAdvertisementRoutes(router, {
|