@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.
Files changed (127) hide show
  1. package/bws.example.config.js +4 -2
  2. package/package.json +4 -4
  3. package/src/config.ts +4 -2
  4. package/src/externalservices/moonpay.ts +85 -1
  5. package/src/lib/blockchainexplorers/v8.ts +1 -1
  6. package/src/lib/chain/eth/index.ts +8 -7
  7. package/src/lib/chain/index.ts +1 -1
  8. package/src/lib/chain/sol/index.ts +4 -4
  9. package/src/lib/chain/xrp/index.ts +3 -3
  10. package/src/lib/common/utils.ts +12 -5
  11. package/src/lib/errors/errordefinitions.ts +2 -0
  12. package/src/lib/expressapp.ts +6 -3
  13. package/src/lib/model/txnote.ts +3 -0
  14. package/src/lib/model/txproposal.ts +153 -68
  15. package/src/lib/model/txproposal_legacy.ts +5 -4
  16. package/src/lib/model/txproposalaction.ts +9 -0
  17. package/src/lib/routes/blockchain.ts +2 -3
  18. package/src/lib/routes/context.ts +10 -1
  19. package/src/lib/routes/maintenance.ts +6 -3
  20. package/src/lib/routes/services.ts +12 -0
  21. package/src/lib/routes/transactions.ts +17 -2
  22. package/src/lib/routes/walletdata.ts +1 -2
  23. package/src/lib/routes/wallets.ts +9 -4
  24. package/src/lib/server.ts +62 -9
  25. package/src/lib/storage.ts +13 -12
  26. package/src/types/expressapp.d.ts +2 -1
  27. package/test/chain/bch.test.ts +8 -1
  28. package/test/chain/btc.test.ts +2 -2
  29. package/test/chain/doge.test.ts +4 -6
  30. package/test/chain/ltc.test.ts +4 -5
  31. package/test/chain/xrp.test.ts +4 -39
  32. package/test/integration/externalservices/moonpay.test.ts +149 -0
  33. package/test/model/txproposal.test.ts +64 -1
  34. package/test/utils.test.ts +29 -0
  35. package/ts_build/package.json +3 -3
  36. package/ts_build/src/config.d.ts.map +1 -1
  37. package/ts_build/src/config.js.map +1 -1
  38. package/ts_build/src/externalservices/moonpay.d.ts +4 -0
  39. package/ts_build/src/externalservices/moonpay.d.ts.map +1 -1
  40. package/ts_build/src/externalservices/moonpay.js +68 -1
  41. package/ts_build/src/externalservices/moonpay.js.map +1 -1
  42. package/ts_build/src/lib/blockchainexplorers/v8.js +1 -1
  43. package/ts_build/src/lib/chain/eth/index.d.ts +6 -5
  44. package/ts_build/src/lib/chain/eth/index.d.ts.map +1 -1
  45. package/ts_build/src/lib/chain/eth/index.js +5 -5
  46. package/ts_build/src/lib/chain/eth/index.js.map +1 -1
  47. package/ts_build/src/lib/chain/index.d.ts +1 -1
  48. package/ts_build/src/lib/chain/index.d.ts.map +1 -1
  49. package/ts_build/src/lib/chain/index.js.map +1 -1
  50. package/ts_build/src/lib/chain/sol/index.js +4 -4
  51. package/ts_build/src/lib/chain/sol/index.js.map +1 -1
  52. package/ts_build/src/lib/chain/xrp/index.js +3 -3
  53. package/ts_build/src/lib/chain/xrp/index.js.map +1 -1
  54. package/ts_build/src/lib/common/utils.d.ts.map +1 -1
  55. package/ts_build/src/lib/common/utils.js +14 -9
  56. package/ts_build/src/lib/common/utils.js.map +1 -1
  57. package/ts_build/src/lib/errors/errordefinitions.d.ts +1 -0
  58. package/ts_build/src/lib/errors/errordefinitions.d.ts.map +1 -1
  59. package/ts_build/src/lib/errors/errordefinitions.js +1 -0
  60. package/ts_build/src/lib/errors/errordefinitions.js.map +1 -1
  61. package/ts_build/src/lib/expressapp.d.ts.map +1 -1
  62. package/ts_build/src/lib/expressapp.js +5 -3
  63. package/ts_build/src/lib/expressapp.js.map +1 -1
  64. package/ts_build/src/lib/model/txnote.d.ts +1 -0
  65. package/ts_build/src/lib/model/txnote.d.ts.map +1 -1
  66. package/ts_build/src/lib/model/txnote.js +1 -0
  67. package/ts_build/src/lib/model/txnote.js.map +1 -1
  68. package/ts_build/src/lib/model/txproposal.d.ts +72 -52
  69. package/ts_build/src/lib/model/txproposal.d.ts.map +1 -1
  70. package/ts_build/src/lib/model/txproposal.js +69 -17
  71. package/ts_build/src/lib/model/txproposal.js.map +1 -1
  72. package/ts_build/src/lib/model/txproposal_legacy.d.ts +3 -3
  73. package/ts_build/src/lib/model/txproposal_legacy.d.ts.map +1 -1
  74. package/ts_build/src/lib/model/txproposal_legacy.js +1 -0
  75. package/ts_build/src/lib/model/txproposal_legacy.js.map +1 -1
  76. package/ts_build/src/lib/model/txproposalaction.d.ts +2 -0
  77. package/ts_build/src/lib/model/txproposalaction.d.ts.map +1 -1
  78. package/ts_build/src/lib/model/txproposalaction.js +2 -0
  79. package/ts_build/src/lib/model/txproposalaction.js.map +1 -1
  80. package/ts_build/src/lib/routes/blockchain.d.ts.map +1 -1
  81. package/ts_build/src/lib/routes/blockchain.js +2 -36
  82. package/ts_build/src/lib/routes/blockchain.js.map +1 -1
  83. package/ts_build/src/lib/routes/context.d.ts +1 -0
  84. package/ts_build/src/lib/routes/context.d.ts.map +1 -1
  85. package/ts_build/src/lib/routes/context.js +8 -1
  86. package/ts_build/src/lib/routes/context.js.map +1 -1
  87. package/ts_build/src/lib/routes/maintenance.d.ts.map +1 -1
  88. package/ts_build/src/lib/routes/maintenance.js +6 -36
  89. package/ts_build/src/lib/routes/maintenance.js.map +1 -1
  90. package/ts_build/src/lib/routes/services.d.ts.map +1 -1
  91. package/ts_build/src/lib/routes/services.js +10 -0
  92. package/ts_build/src/lib/routes/services.js.map +1 -1
  93. package/ts_build/src/lib/routes/transactions.d.ts +1 -0
  94. package/ts_build/src/lib/routes/transactions.d.ts.map +1 -1
  95. package/ts_build/src/lib/routes/transactions.js +14 -2
  96. package/ts_build/src/lib/routes/transactions.js.map +1 -1
  97. package/ts_build/src/lib/routes/walletdata.d.ts.map +1 -1
  98. package/ts_build/src/lib/routes/walletdata.js +1 -35
  99. package/ts_build/src/lib/routes/walletdata.js.map +1 -1
  100. package/ts_build/src/lib/routes/wallets.d.ts +1 -0
  101. package/ts_build/src/lib/routes/wallets.d.ts.map +1 -1
  102. package/ts_build/src/lib/routes/wallets.js +8 -4
  103. package/ts_build/src/lib/routes/wallets.js.map +1 -1
  104. package/ts_build/src/lib/server.d.ts +6 -2
  105. package/ts_build/src/lib/server.d.ts.map +1 -1
  106. package/ts_build/src/lib/server.js +45 -3
  107. package/ts_build/src/lib/server.js.map +1 -1
  108. package/ts_build/src/lib/storage.d.ts +6 -6
  109. package/ts_build/src/lib/storage.d.ts.map +1 -1
  110. package/ts_build/src/lib/storage.js +6 -6
  111. package/ts_build/src/lib/storage.js.map +1 -1
  112. package/ts_build/test/chain/bch.test.js +7 -0
  113. package/ts_build/test/chain/bch.test.js.map +1 -1
  114. package/ts_build/test/chain/btc.test.js +2 -2
  115. package/ts_build/test/chain/btc.test.js.map +1 -1
  116. package/ts_build/test/chain/doge.test.js +3 -5
  117. package/ts_build/test/chain/doge.test.js.map +1 -1
  118. package/ts_build/test/chain/ltc.test.js +3 -4
  119. package/ts_build/test/chain/ltc.test.js.map +1 -1
  120. package/ts_build/test/chain/xrp.test.js +3 -38
  121. package/ts_build/test/chain/xrp.test.js.map +1 -1
  122. package/ts_build/test/integration/externalservices/moonpay.test.js +139 -0
  123. package/ts_build/test/integration/externalservices/moonpay.test.js.map +1 -1
  124. package/ts_build/test/model/txproposal.test.js +57 -0
  125. package/ts_build/test/model/txproposal.test.js.map +1 -1
  126. package/ts_build/test/utils.test.js +23 -0
  127. package/ts_build/test/utils.test.js.map +1 -1
@@ -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.com',
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.com',
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.8.2",
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.8.1",
48
- "@bitpay-labs/crypto-wallet-core": "^11.8.1",
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": "a46b839de0bbad1e1dde9dcc50cafce7ef414edd"
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.com',
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.com',
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.MIN_XRP_BALANCE);
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 = 0;
102
- let amounts = 0;
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 || 0;
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,
@@ -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, opts = { signed: true }) {
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 || 0;
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: 0, amounts: 0 });
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
- }, 0) || 0;
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) {
@@ -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']) return req.headers['x-forwarded-for'].split(',')[0];
287
- if (req.headers['x-real-ip']) return req.headers['x-real-ip'].split(',')[0];
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) return req.ip;
290
- if (req.connection && req.connection.remoteAddress) return req.connection.remoteAddress;
291
- return '';
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',
@@ -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, {
@@ -16,6 +16,9 @@ export class TxNote {
16
16
  editedOn: number;
17
17
  editedBy: string;
18
18
 
19
+ // Non-persisted fields - populated when fetching from storage
20
+ editedByName?: string;
21
+
19
22
  static create(opts) {
20
23
  opts = opts || {};
21
24