@bitpay-labs/bitcore-wallet-service 11.8.1 → 11.9.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 (101) hide show
  1. package/bws.example.config.js +4 -2
  2. package/package.json +4 -4
  3. package/src/bws.ts +2 -0
  4. package/src/config.ts +4 -2
  5. package/src/externalservices/moonpay.ts +85 -1
  6. package/src/lib/blockchainexplorers/v8.ts +1 -1
  7. package/src/lib/common/utils.ts +18 -5
  8. package/src/lib/expressapp.ts +63 -2378
  9. package/src/lib/model/txproposal.ts +14 -10
  10. package/src/lib/routes/advertisements.ts +151 -0
  11. package/src/lib/routes/blockchain.ts +151 -0
  12. package/src/lib/routes/context.ts +149 -0
  13. package/src/lib/routes/maintenance.ts +114 -0
  14. package/src/lib/routes/moralis.ts +89 -0
  15. package/src/lib/routes/notifications.ts +135 -0
  16. package/src/lib/routes/services.ts +540 -0
  17. package/src/lib/routes/setup.ts +86 -0
  18. package/src/lib/routes/transactions.ts +196 -0
  19. package/src/lib/routes/walletdata.ts +166 -0
  20. package/src/lib/routes/wallets.ts +288 -0
  21. package/src/lib/server.ts +24 -1
  22. package/src/lib/storage.ts +3 -0
  23. package/test/integration/externalservices/moonpay.test.ts +149 -0
  24. package/test/utils.test.ts +29 -0
  25. package/ts_build/package.json +4 -4
  26. package/ts_build/src/bws.js +3 -0
  27. package/ts_build/src/bws.js.map +1 -1
  28. package/ts_build/src/config.d.ts.map +1 -1
  29. package/ts_build/src/config.js.map +1 -1
  30. package/ts_build/src/externalservices/moonpay.d.ts +4 -0
  31. package/ts_build/src/externalservices/moonpay.d.ts.map +1 -1
  32. package/ts_build/src/externalservices/moonpay.js +68 -1
  33. package/ts_build/src/externalservices/moonpay.js.map +1 -1
  34. package/ts_build/src/lib/blockchainexplorers/v8.js +1 -1
  35. package/ts_build/src/lib/common/index.d.ts +1 -0
  36. package/ts_build/src/lib/common/index.d.ts.map +1 -1
  37. package/ts_build/src/lib/common/utils.d.ts +1 -0
  38. package/ts_build/src/lib/common/utils.d.ts.map +1 -1
  39. package/ts_build/src/lib/common/utils.js +20 -9
  40. package/ts_build/src/lib/common/utils.js.map +1 -1
  41. package/ts_build/src/lib/expressapp.d.ts.map +1 -1
  42. package/ts_build/src/lib/expressapp.js +64 -2224
  43. package/ts_build/src/lib/expressapp.js.map +1 -1
  44. package/ts_build/src/lib/model/txproposal.d.ts +1 -4
  45. package/ts_build/src/lib/model/txproposal.d.ts.map +1 -1
  46. package/ts_build/src/lib/model/txproposal.js +13 -9
  47. package/ts_build/src/lib/model/txproposal.js.map +1 -1
  48. package/ts_build/src/lib/routes/advertisements.d.ts +11 -0
  49. package/ts_build/src/lib/routes/advertisements.d.ts.map +1 -0
  50. package/ts_build/src/lib/routes/advertisements.js +119 -0
  51. package/ts_build/src/lib/routes/advertisements.js.map +1 -0
  52. package/ts_build/src/lib/routes/blockchain.d.ts +13 -0
  53. package/ts_build/src/lib/routes/blockchain.d.ts.map +1 -0
  54. package/ts_build/src/lib/routes/blockchain.js +125 -0
  55. package/ts_build/src/lib/routes/blockchain.js.map +1 -0
  56. package/ts_build/src/lib/routes/context.d.ts +12 -0
  57. package/ts_build/src/lib/routes/context.d.ts.map +1 -0
  58. package/ts_build/src/lib/routes/context.js +115 -0
  59. package/ts_build/src/lib/routes/context.js.map +1 -0
  60. package/ts_build/src/lib/routes/maintenance.d.ts +10 -0
  61. package/ts_build/src/lib/routes/maintenance.d.ts.map +1 -0
  62. package/ts_build/src/lib/routes/maintenance.js +101 -0
  63. package/ts_build/src/lib/routes/maintenance.js.map +1 -0
  64. package/ts_build/src/lib/routes/moralis.d.ts +9 -0
  65. package/ts_build/src/lib/routes/moralis.d.ts.map +1 -0
  66. package/ts_build/src/lib/routes/moralis.js +78 -0
  67. package/ts_build/src/lib/routes/moralis.js.map +1 -0
  68. package/ts_build/src/lib/routes/notifications.d.ts +10 -0
  69. package/ts_build/src/lib/routes/notifications.d.ts.map +1 -0
  70. package/ts_build/src/lib/routes/notifications.js +120 -0
  71. package/ts_build/src/lib/routes/notifications.js.map +1 -0
  72. package/ts_build/src/lib/routes/services.d.ts +11 -0
  73. package/ts_build/src/lib/routes/services.d.ts.map +1 -0
  74. package/ts_build/src/lib/routes/services.js +440 -0
  75. package/ts_build/src/lib/routes/services.js.map +1 -0
  76. package/ts_build/src/lib/routes/setup.d.ts +4 -0
  77. package/ts_build/src/lib/routes/setup.d.ts.map +1 -0
  78. package/ts_build/src/lib/routes/setup.js +79 -0
  79. package/ts_build/src/lib/routes/setup.js.map +1 -0
  80. package/ts_build/src/lib/routes/transactions.d.ts +9 -0
  81. package/ts_build/src/lib/routes/transactions.d.ts.map +1 -0
  82. package/ts_build/src/lib/routes/transactions.js +188 -0
  83. package/ts_build/src/lib/routes/transactions.js.map +1 -0
  84. package/ts_build/src/lib/routes/walletdata.d.ts +10 -0
  85. package/ts_build/src/lib/routes/walletdata.d.ts.map +1 -0
  86. package/ts_build/src/lib/routes/walletdata.js +152 -0
  87. package/ts_build/src/lib/routes/walletdata.js.map +1 -0
  88. package/ts_build/src/lib/routes/wallets.d.ts +13 -0
  89. package/ts_build/src/lib/routes/wallets.d.ts.map +1 -0
  90. package/ts_build/src/lib/routes/wallets.js +291 -0
  91. package/ts_build/src/lib/routes/wallets.js.map +1 -0
  92. package/ts_build/src/lib/server.d.ts.map +1 -1
  93. package/ts_build/src/lib/server.js +19 -1
  94. package/ts_build/src/lib/server.js.map +1 -1
  95. package/ts_build/src/lib/storage.d.ts.map +1 -1
  96. package/ts_build/src/lib/storage.js +3 -0
  97. package/ts_build/src/lib/storage.js.map +1 -1
  98. package/ts_build/test/integration/externalservices/moonpay.test.js +139 -0
  99. package/ts_build/test/integration/externalservices/moonpay.test.js.map +1 -1
  100. package/ts_build/test/utils.test.js +23 -0
  101. 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.1",
5
+ "version": "11.9.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.9.0",
48
+ "@bitpay-labs/crypto-wallet-core": "^11.9.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": "a1890ef287c9e5d0e966fb445d15bc59a9393761"
129
+ "gitHead": "3491bf1216d3c6b103c591564726333d55ad8c6d"
130
130
  }
package/src/bws.ts CHANGED
@@ -34,6 +34,8 @@ if (config.https) {
34
34
  fs.readFileSync(config.CAinter2),
35
35
  fs.readFileSync(config.CAroot)
36
36
  ];
37
+ } else if (config.certificateAuthorities) {
38
+ serverOpts.ca = config.certificateAuthorities.map(caPath => fs.readFileSync(caPath));
37
39
  }
38
40
  }
39
41
 
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);
@@ -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) {
@@ -365,6 +372,12 @@ export const Utils = {
365
372
  return 'testnet';
366
373
  },
367
374
 
375
+ getAddressNetworkForDbLookup(address, network) {
376
+ const generic = Utils.getGenericName(network);
377
+ if (generic === 'livenet') return address;
378
+ return `${address}:${generic}`;
379
+ },
380
+
368
381
  castToBool(input: any) {
369
382
  input = input?.toString();
370
383
  if (input?.toLowerCase() === 'true' || input == '1') {