@bitpay-labs/bitcore-wallet-service 11.10.1 → 11.10.3

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 (72) hide show
  1. package/bws.example.config.js +4 -3
  2. package/package.json +5 -5
  3. package/src/config.ts +4 -3
  4. package/src/externalservices/moonpay.ts +10 -0
  5. package/src/externalservices/transak.ts +20 -28
  6. package/src/lib/blockchainexplorers/v8.ts +19 -0
  7. package/src/lib/chain/xrp/index.ts +13 -8
  8. package/src/lib/common/defaults.ts +3 -0
  9. package/src/lib/common/utils.ts +3 -3
  10. package/src/lib/emailservice.ts +2 -1
  11. package/src/lib/model/txproposal.ts +4 -0
  12. package/src/lib/pushnotificationsservice.ts +2 -1
  13. package/src/lib/routes/services.ts +22 -6
  14. package/src/lib/routes/tss.ts +1 -1
  15. package/src/lib/routes/wallets.ts +16 -1
  16. package/src/lib/server.ts +47 -2
  17. package/test/chain/xrp.test.ts +21 -0
  18. package/test/integration/externalservices/moonpay.test.ts +14 -2
  19. package/test/integration/server.test.ts +138 -0
  20. package/ts_build/package.json +1 -1
  21. package/ts_build/src/config.d.ts.map +1 -1
  22. package/ts_build/src/config.js.map +1 -1
  23. package/ts_build/src/externalservices/moonpay.d.ts.map +1 -1
  24. package/ts_build/src/externalservices/moonpay.js +6 -0
  25. package/ts_build/src/externalservices/moonpay.js.map +1 -1
  26. package/ts_build/src/externalservices/transak.d.ts.map +1 -1
  27. package/ts_build/src/externalservices/transak.js +20 -30
  28. package/ts_build/src/externalservices/transak.js.map +1 -1
  29. package/ts_build/src/lib/blockchainexplorers/v8.d.ts +3 -0
  30. package/ts_build/src/lib/blockchainexplorers/v8.d.ts.map +1 -1
  31. package/ts_build/src/lib/blockchainexplorers/v8.js +18 -0
  32. package/ts_build/src/lib/blockchainexplorers/v8.js.map +1 -1
  33. package/ts_build/src/lib/chain/xrp/index.d.ts.map +1 -1
  34. package/ts_build/src/lib/chain/xrp/index.js +12 -8
  35. package/ts_build/src/lib/chain/xrp/index.js.map +1 -1
  36. package/ts_build/src/lib/common/defaults.d.ts +1 -0
  37. package/ts_build/src/lib/common/defaults.d.ts.map +1 -1
  38. package/ts_build/src/lib/common/defaults.js +1 -0
  39. package/ts_build/src/lib/common/defaults.js.map +1 -1
  40. package/ts_build/src/lib/common/index.d.ts +2 -1
  41. package/ts_build/src/lib/common/index.d.ts.map +1 -1
  42. package/ts_build/src/lib/common/utils.d.ts +1 -1
  43. package/ts_build/src/lib/common/utils.d.ts.map +1 -1
  44. package/ts_build/src/lib/common/utils.js.map +1 -1
  45. package/ts_build/src/lib/emailservice.d.ts.map +1 -1
  46. package/ts_build/src/lib/emailservice.js +1 -1
  47. package/ts_build/src/lib/emailservice.js.map +1 -1
  48. package/ts_build/src/lib/model/txproposal.d.ts +2 -0
  49. package/ts_build/src/lib/model/txproposal.d.ts.map +1 -1
  50. package/ts_build/src/lib/model/txproposal.js +3 -0
  51. package/ts_build/src/lib/model/txproposal.js.map +1 -1
  52. package/ts_build/src/lib/pushnotificationsservice.d.ts.map +1 -1
  53. package/ts_build/src/lib/pushnotificationsservice.js +1 -1
  54. package/ts_build/src/lib/pushnotificationsservice.js.map +1 -1
  55. package/ts_build/src/lib/routes/services.d.ts.map +1 -1
  56. package/ts_build/src/lib/routes/services.js +22 -6
  57. package/ts_build/src/lib/routes/services.js.map +1 -1
  58. package/ts_build/src/lib/routes/tss.js +0 -1
  59. package/ts_build/src/lib/routes/tss.js.map +1 -1
  60. package/ts_build/src/lib/routes/wallets.d.ts.map +1 -1
  61. package/ts_build/src/lib/routes/wallets.js +15 -0
  62. package/ts_build/src/lib/routes/wallets.js.map +1 -1
  63. package/ts_build/src/lib/server.d.ts +3 -0
  64. package/ts_build/src/lib/server.d.ts.map +1 -1
  65. package/ts_build/src/lib/server.js +41 -2
  66. package/ts_build/src/lib/server.js.map +1 -1
  67. package/ts_build/test/chain/xrp.test.js +19 -0
  68. package/ts_build/test/chain/xrp.test.js.map +1 -1
  69. package/ts_build/test/integration/externalservices/moonpay.test.js +14 -2
  70. package/ts_build/test/integration/externalservices/moonpay.test.js.map +1 -1
  71. package/ts_build/test/integration/server.test.js +115 -0
  72. package/ts_build/test/integration/server.test.js.map +1 -1
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.UPGRADES = exports.WalletService = void 0;
40
40
  exports.checkRequired = checkRequired;
41
+ const util_1 = __importDefault(require("util"));
41
42
  const crypto_wallet_core_1 = require("@bitpay-labs/crypto-wallet-core");
42
43
  const async = __importStar(require("async"));
43
44
  const email_validator_1 = __importDefault(require("email-validator"));
@@ -2260,7 +2261,8 @@ class WalletService {
2260
2261
  fromAta: opts.fromAta,
2261
2262
  decimals: opts.decimals,
2262
2263
  refreshOnPublish: opts.refreshOnPublish,
2263
- deferNonce: opts.deferNonce
2264
+ deferNonce: opts.deferNonce,
2265
+ flags: opts.flags
2264
2266
  };
2265
2267
  txp = model_1.TxProposal.create(txOpts);
2266
2268
  next();
@@ -2615,6 +2617,16 @@ class WalletService {
2615
2617
  return cb(errordefinitions_1.Errors.TX_NONCE_CONFLICT);
2616
2618
  }
2617
2619
  }
2620
+ if (txp.nonce != null && txp.deferNonce) {
2621
+ const broadcastedTxps = await util_1.default.promisify(this.storage.fetchBroadcastedTxs).call(this.storage, this.walletId, {
2622
+ minTs: Math.floor(Date.now() / 1000) - Defaults.BROADCASTED_NONCE_SCAN_WINDOW
2623
+ });
2624
+ for (const t of broadcastedTxps || []) {
2625
+ if (t.id !== txp.id && t.nonce != null && Number(t.nonce) === Number(txp.nonce)) {
2626
+ return cb(errordefinitions_1.Errors.TX_NONCE_CONFLICT);
2627
+ }
2628
+ }
2629
+ }
2618
2630
  }
2619
2631
  catch (err) {
2620
2632
  return cb(err);
@@ -2715,8 +2727,14 @@ class WalletService {
2715
2727
  const pendingNonces = pendingTxps
2716
2728
  .filter(t => t.id !== txp.id && t.nonce != null && t.status !== 'rejected')
2717
2729
  .map(t => Number(t.nonce));
2730
+ const broadcastedTxps = await util_1.default.promisify(this.storage.fetchBroadcastedTxs).call(this.storage, this.walletId, {
2731
+ minTs: Math.floor(Date.now() / 1000) - Defaults.BROADCASTED_NONCE_SCAN_WINDOW
2732
+ });
2733
+ const inFlightNonces = (broadcastedTxps || [])
2734
+ .filter(t => t.nonce != null && Number(t.nonce) >= Number(confirmedNonce))
2735
+ .map(t => Number(t.nonce));
2718
2736
  let suggestedNonce = Number(confirmedNonce);
2719
- const allNonces = pendingNonces.sort((a, b) => a - b);
2737
+ const allNonces = [...pendingNonces, ...inFlightNonces].sort((a, b) => a - b);
2720
2738
  for (const n of allNonces) {
2721
2739
  if (n === suggestedNonce) {
2722
2740
  suggestedNonce++;
@@ -4046,6 +4064,27 @@ class WalletService {
4046
4064
  });
4047
4065
  });
4048
4066
  }
4067
+ async getFlags(opts) {
4068
+ try {
4069
+ const wallet = await util_1.default.promisify(this.getWallet).call(this, {});
4070
+ if (wallet.chain !== 'xrp')
4071
+ throw new Error('Flags are only supported for XRP wallets');
4072
+ const addresses = await util_1.default.promisify(this.storage.fetchAddresses).call(this.storage, this.walletId);
4073
+ const addressObj = addresses.find(a => a.path === `m/0/${opts.account || 0}`);
4074
+ if (!addressObj)
4075
+ throw new Error('Could not find address for account ' + opts.account);
4076
+ const bc = this._getBlockchainExplorer(wallet.chain, wallet.network);
4077
+ if (!bc)
4078
+ throw new Error('Could not get blockchain explorer instance');
4079
+ const address = addressObj.address.split(':')[0];
4080
+ const flags = await bc.getFlags({ address });
4081
+ return flags;
4082
+ }
4083
+ catch (err) {
4084
+ this.logw('Error getting flags: %o', err);
4085
+ throw err;
4086
+ }
4087
+ }
4049
4088
  static upgradeNeeded(paths, opts) {
4050
4089
  paths = Array.isArray(paths) ? paths : [paths];
4051
4090
  const chain = opts.chain?.toLowerCase();