@bitpay-labs/bitcore-wallet-service 11.8.2 → 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.
- 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/common/utils.ts +12 -5
- package/src/lib/routes/blockchain.ts +2 -3
- package/src/lib/routes/maintenance.ts +6 -3
- package/src/lib/routes/services.ts +12 -0
- package/src/lib/routes/walletdata.ts +1 -2
- package/src/lib/routes/wallets.ts +1 -2
- package/test/integration/externalservices/moonpay.test.ts +149 -0
- package/test/utils.test.ts +29 -0
- package/ts_build/package.json +1 -1
- 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/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/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/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/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.map +1 -1
- package/ts_build/src/lib/routes/wallets.js +1 -2
- package/ts_build/src/lib/routes/wallets.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/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.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.
|
|
48
|
-
"@bitpay-labs/crypto-wallet-core": "^11.
|
|
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": "
|
|
129
|
+
"gitHead": "3491bf1216d3c6b103c591564726333d55ad8c6d"
|
|
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);
|
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) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import * as _ from 'lodash';
|
|
3
2
|
import type * as Types from '../../types/expressapp';
|
|
4
3
|
import type { WalletService } from '../server';
|
|
5
4
|
|
|
@@ -74,10 +73,10 @@ export function registerBlockchainRoutes(router: express.Router, context: RouteC
|
|
|
74
73
|
if (req.query.network) opts.network = req.query.network as string;
|
|
75
74
|
server.getFeeLevels(opts, resolve);
|
|
76
75
|
}).then((feeLevels: any[]) => {
|
|
77
|
-
|
|
76
|
+
for (const feeLevel of feeLevels) {
|
|
78
77
|
feeLevel.feePerKB = feeLevel.feePerKb;
|
|
79
78
|
delete feeLevel.feePerKb;
|
|
80
|
-
}
|
|
79
|
+
}
|
|
81
80
|
return feeLevels;
|
|
82
81
|
})
|
|
83
82
|
);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import * as _ from 'lodash';
|
|
3
2
|
import { WalletService } from '../server';
|
|
4
3
|
import { Stats } from '../stats';
|
|
5
4
|
import type * as Types from '../../types/expressapp';
|
|
@@ -84,8 +83,12 @@ export function registerMaintenanceRoutes(router: express.Router, context: Route
|
|
|
84
83
|
router.get('/v1/txnotes/', (req, res) => {
|
|
85
84
|
getServerWithAuth(req, res, server => {
|
|
86
85
|
const opts: { minTs?: number } = {};
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
const rawMinTs = req.query.minTs;
|
|
87
|
+
if (typeof rawMinTs === 'string' && rawMinTs.trim() !== '') {
|
|
88
|
+
const minTs = Number(rawMinTs);
|
|
89
|
+
if (Number.isFinite(minTs)) {
|
|
90
|
+
opts.minTs = minTs;
|
|
91
|
+
}
|
|
89
92
|
}
|
|
90
93
|
server.getTxNotes(opts, (err, notes) => {
|
|
91
94
|
if (err) return returnError(err, res, req);
|
|
@@ -281,6 +281,18 @@ export function registerServiceRoutes(router: express.Router, context: RouteCont
|
|
|
281
281
|
});
|
|
282
282
|
});
|
|
283
283
|
|
|
284
|
+
router.post('/v1/service/moonpay/createSession', (req, res) => {
|
|
285
|
+
respondWithAuthServer(req, res, context, server => {
|
|
286
|
+
return server.externalServices.moonpay.moonpayCreateSession(req);
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
router.post('/v1/service/moonpay/revokeActiveSession', (req, res) => {
|
|
291
|
+
respondWithAuthServer(req, res, context, server => {
|
|
292
|
+
return server.externalServices.moonpay.moonpayRevokeActiveSession(req);
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
|
|
284
296
|
router.post('/v1/service/ramp/quote', (req, res) => {
|
|
285
297
|
respondWithAuthServer(req, res, context, server => {
|
|
286
298
|
return server.externalServices.ramp.rampGetQuote(req);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import * as _ from 'lodash';
|
|
3
2
|
import { Common } from '../common';
|
|
4
3
|
import type * as Types from '../../types/expressapp';
|
|
5
4
|
import type { GetAddressesOpts } from '../../types/server';
|
|
@@ -133,7 +132,7 @@ export function registerWalletDataRoutes(router: express.Router, context: RouteC
|
|
|
133
132
|
router.get('/v1/utxos/', (req, res) => {
|
|
134
133
|
const opts: { addresses?: string[] } = {};
|
|
135
134
|
const addresses = req.query.addresses;
|
|
136
|
-
if (addresses &&
|
|
135
|
+
if (addresses && typeof addresses === 'string') {
|
|
137
136
|
opts.addresses = (req.query.addresses as string).split(',');
|
|
138
137
|
}
|
|
139
138
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as async from 'async';
|
|
2
2
|
import express from 'express';
|
|
3
|
-
import * as _ from 'lodash';
|
|
4
3
|
import { Common } from '../common';
|
|
5
4
|
import { ClientError } from '../errors/clienterror';
|
|
6
5
|
import logger from '../logger';
|
|
@@ -212,7 +211,7 @@ export function registerWalletRoutes(router: express.Router, context: RouteConte
|
|
|
212
211
|
if (res.headersSent) {
|
|
213
212
|
return;
|
|
214
213
|
}
|
|
215
|
-
return res.json(
|
|
214
|
+
return res.json(responses.flat());
|
|
216
215
|
});
|
|
217
216
|
|
|
218
217
|
router.post('/v1/wallets/exist', async (req, res) => {
|
|
@@ -566,4 +566,153 @@ describe('Moonpay integration', () => {
|
|
|
566
566
|
}
|
|
567
567
|
});
|
|
568
568
|
});
|
|
569
|
+
|
|
570
|
+
describe('#moonpayCreateSession', () => {
|
|
571
|
+
beforeEach(() => {
|
|
572
|
+
req = {
|
|
573
|
+
headers: {
|
|
574
|
+
'x-forwarded-for': '192.168.1.1'
|
|
575
|
+
},
|
|
576
|
+
body: {
|
|
577
|
+
env: 'sandbox',
|
|
578
|
+
externalCustomerId: 'externalCustomerId1'
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
server.externalServices.moonpay.request = fakeRequest;
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
it('should work properly if req is OK', async () => {
|
|
585
|
+
const data = await server.externalServices.moonpay.moonpayCreateSession(req);
|
|
586
|
+
should.exist(data);
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
it('should work properly if req is OK for web', async () => {
|
|
590
|
+
req.body.context = 'web';
|
|
591
|
+
const data = await server.externalServices.moonpay.moonpayCreateSession(req);
|
|
592
|
+
should.exist(data);
|
|
593
|
+
});
|
|
594
|
+
|
|
595
|
+
it('should work properly with optional email and phoneNumber', async () => {
|
|
596
|
+
req.body.email = 'user@example.com';
|
|
597
|
+
req.body.phoneNumber = '+14155551234';
|
|
598
|
+
const data = await server.externalServices.moonpay.moonpayCreateSession(req);
|
|
599
|
+
should.exist(data);
|
|
600
|
+
});
|
|
601
|
+
|
|
602
|
+
it('should return error if post returns error', async () => {
|
|
603
|
+
const fakeRequest2 = {
|
|
604
|
+
post: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); },
|
|
605
|
+
};
|
|
606
|
+
|
|
607
|
+
server.externalServices.moonpay.request = fakeRequest2;
|
|
608
|
+
try {
|
|
609
|
+
await server.externalServices.moonpay.moonpayCreateSession(req);
|
|
610
|
+
should.fail('should have thrown');
|
|
611
|
+
} catch (err) {
|
|
612
|
+
err.message.should.equal('Error');
|
|
613
|
+
}
|
|
614
|
+
});
|
|
615
|
+
|
|
616
|
+
it('should return error if there is some missing arguments', async () => {
|
|
617
|
+
delete req.body.externalCustomerId;
|
|
618
|
+
try {
|
|
619
|
+
await server.externalServices.moonpay.moonpayCreateSession(req);
|
|
620
|
+
should.fail('should have thrown');
|
|
621
|
+
} catch (err) {
|
|
622
|
+
err.message.should.equal('Moonpay\'s request missing arguments');
|
|
623
|
+
}
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
it('should return error if device IP cannot be determined', async () => {
|
|
627
|
+
req.headers = {};
|
|
628
|
+
delete req.ip;
|
|
629
|
+
delete req.connection;
|
|
630
|
+
try {
|
|
631
|
+
await server.externalServices.moonpay.moonpayCreateSession(req);
|
|
632
|
+
should.fail('should have thrown');
|
|
633
|
+
} catch (err) {
|
|
634
|
+
err.message.should.equal('Could not determine device IP address');
|
|
635
|
+
}
|
|
636
|
+
});
|
|
637
|
+
|
|
638
|
+
it('should extract IP from x-forwarded-for header', async () => {
|
|
639
|
+
req.headers = { 'x-forwarded-for': '10.0.0.1, 10.0.0.2' };
|
|
640
|
+
let capturedBody;
|
|
641
|
+
const fakeRequest2 = {
|
|
642
|
+
post: (_url, _opts, _cb) => {
|
|
643
|
+
capturedBody = _opts.body;
|
|
644
|
+
return _cb(null, { body: { sessionToken: 'token123' } });
|
|
645
|
+
},
|
|
646
|
+
};
|
|
647
|
+
server.externalServices.moonpay.request = fakeRequest2;
|
|
648
|
+
await server.externalServices.moonpay.moonpayCreateSession(req);
|
|
649
|
+
capturedBody.deviceIp.should.equal('10.0.0.1');
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
it('should return error if moonpay is commented in config', async () => {
|
|
653
|
+
config.moonpay = undefined;
|
|
654
|
+
try {
|
|
655
|
+
await server.externalServices.moonpay.moonpayCreateSession(req);
|
|
656
|
+
should.fail('should have thrown');
|
|
657
|
+
} catch (err) {
|
|
658
|
+
err.message.should.equal('Moonpay missing credentials');
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
});
|
|
662
|
+
|
|
663
|
+
describe('#moonpayRevokeActiveSession', () => {
|
|
664
|
+
beforeEach(() => {
|
|
665
|
+
req = {
|
|
666
|
+
headers: {},
|
|
667
|
+
body: {
|
|
668
|
+
env: 'sandbox',
|
|
669
|
+
externalCustomerId: 'externalCustomerId1'
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
server.externalServices.moonpay.request = fakeRequest;
|
|
673
|
+
});
|
|
674
|
+
|
|
675
|
+
it('should work properly if req is OK', async () => {
|
|
676
|
+
await server.externalServices.moonpay.moonpayRevokeActiveSession(req);
|
|
677
|
+
});
|
|
678
|
+
|
|
679
|
+
it('should work properly if req is OK for web', async () => {
|
|
680
|
+
req.body.context = 'web';
|
|
681
|
+
await server.externalServices.moonpay.moonpayRevokeActiveSession(req);
|
|
682
|
+
});
|
|
683
|
+
|
|
684
|
+
it('should return error if delete returns error', async () => {
|
|
685
|
+
const fakeRequest2 = {
|
|
686
|
+
delete: (_url, _opts, _cb) => { return _cb(new Error('Error'), null); },
|
|
687
|
+
};
|
|
688
|
+
|
|
689
|
+
server.externalServices.moonpay.request = fakeRequest2;
|
|
690
|
+
try {
|
|
691
|
+
await server.externalServices.moonpay.moonpayRevokeActiveSession(req);
|
|
692
|
+
should.fail('should have thrown');
|
|
693
|
+
} catch (err) {
|
|
694
|
+
err.message.should.equal('Error');
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
|
|
698
|
+
it('should return error if there is some missing arguments', async () => {
|
|
699
|
+
delete req.body.externalCustomerId;
|
|
700
|
+
try {
|
|
701
|
+
await server.externalServices.moonpay.moonpayRevokeActiveSession(req);
|
|
702
|
+
should.fail('should have thrown');
|
|
703
|
+
} catch (err) {
|
|
704
|
+
err.message.should.equal('Moonpay\'s request missing arguments');
|
|
705
|
+
}
|
|
706
|
+
});
|
|
707
|
+
|
|
708
|
+
it('should return error if moonpay is commented in config', async () => {
|
|
709
|
+
config.moonpay = undefined;
|
|
710
|
+
try {
|
|
711
|
+
await server.externalServices.moonpay.moonpayRevokeActiveSession(req);
|
|
712
|
+
should.fail('should have thrown');
|
|
713
|
+
} catch (err) {
|
|
714
|
+
err.message.should.equal('Moonpay missing credentials');
|
|
715
|
+
}
|
|
716
|
+
});
|
|
717
|
+
});
|
|
569
718
|
});
|
package/test/utils.test.ts
CHANGED
|
@@ -360,6 +360,35 @@ describe('Utils', function() {
|
|
|
360
360
|
const ip = Utils.getIpFromReq(req);
|
|
361
361
|
ip.should.equal('');
|
|
362
362
|
});
|
|
363
|
+
|
|
364
|
+
it('should trim whitespace from the ip', function() {
|
|
365
|
+
const req = {
|
|
366
|
+
headers: {
|
|
367
|
+
'x-forwarded-for': ' 1.2.3.4 , 5.6.7.8'
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
const ip = Utils.getIpFromReq(req);
|
|
372
|
+
ip.should.equal('1.2.3.4');
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
it('should preserve IPv4-mapped IPv6 addresses', function() {
|
|
376
|
+
const req = {
|
|
377
|
+
ip: '::ffff:192.168.1.1'
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
const ip = Utils.getIpFromReq(req);
|
|
381
|
+
ip.should.equal('::ffff:192.168.1.1');
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
it('should preserve regular IPv6 addresses', function() {
|
|
385
|
+
const req = {
|
|
386
|
+
ip: '2001:0db8:85a3:0000:0000:8a2e:0370:7334'
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
const ip = Utils.getIpFromReq(req);
|
|
390
|
+
ip.should.equal('2001:0db8:85a3:0000:0000:8a2e:0370:7334');
|
|
391
|
+
});
|
|
363
392
|
});
|
|
364
393
|
|
|
365
394
|
describe('#sortAsc', function() {
|
package/ts_build/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.
|
|
5
|
+
"version": "11.8.2",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "ts_build/src/index.js",
|
|
8
8
|
"types": "./ts_build/src/index.d.ts",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";AA6hBA,wBAAwB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,oDAAuB;AACvB,yCAAsC;AAEtC,MAAM,MAAM,GAAG,GAAQ,EAAE;IACvB,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,KAAK;QAClB,IAAI,EAAE,IAAI;QAkBV,WAAW,EAAE;YACX,OAAO,EAAE;gBACP,GAAG,EAAE,6BAA6B;gBAClC,MAAM,EAAE,KAAK;aACd;SACF;QACD,iBAAiB,EAAE;YAEjB,mBAAmB,EAAE;gBACnB,GAAG,EAAE,uBAAuB;aAC7B;SACF;QACD,sBAAsB,EAAE;YACtB,GAAG,EAAE;gBACH,OAAO,EAAE;oBACP,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,QAAQ,EAAE;oBACR,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,QAAQ,EAAE;oBACR,GAAG,EAAE,wBAAwB;iBAC9B;aACF;YACD,GAAG,EAAE;gBACH,OAAO,EAAE;oBACP,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,QAAQ,EAAE;oBACR,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,QAAQ,EAAE;oBACR,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,QAAQ,EAAE;oBACR,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,wBAAwB;iBAC9B;aACF;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE;oBACP,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,QAAQ,EAAE;oBACR,GAAG,EAAE,wBAAwB;iBAC9B;aACF;YACD,GAAG,EAAE;gBACH,OAAO,EAAE;oBACP,GAAG,EAAE,wBAAwB;iBAC9B;gBACD,QAAQ,EAAE;oBACR,GAAG,EAAE,wBAAwB;iBAC9B;aACF;YACD,GAAG,EAAE;gBACH,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;aACF;YACD,GAAG,EAAE;gBACH,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;aACF;YACD,KAAK,EAAE;gBACL,OAAO,EAAE;oBACP,GAAG,EAAE,8BAA8B;iBACpC;gBACD,IAAI,EAAE;oBACJ,GAAG,EAAE,8BAA8B;iBACpC;aACF;YACD,GAAG,EAAE;gBACH,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;aACF;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;aACF;YACD,EAAE,EAAE;gBACF,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;aACF;YACD,GAAG,EAAE;gBACH,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;gBACD,OAAO,EAAE;oBACP,GAAG,EAAE,4BAA4B;iBAClC;gBACD,MAAM,EAAE;oBACN,GAAG,EAAE,4BAA4B;iBAClC;aACF;YACD,YAAY,EAAE,cAAc;SAC7B;QACD,qBAAqB,EAAE;YACrB,YAAY,EAAE,WAAW;YACzB,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,gCAAgC;YAC/C,kBAAkB,EAAE,+BAA+B;YACnD,gBAAgB,EAAE,gCAAgC;YAClD,qBAAqB,EAAE,gCAAgC;SACxD;QACD,mBAAmB,EAAE;YACnB,eAAe,EAAE,QAAQ;YACzB,aAAa,EAAE,CAAC;SACjB;QACD,eAAe,EAAE;YACf,eAAe,EAAE,KAAK;SACvB;QACD,SAAS,EAAE;YACT,MAAM,EAAE,UAAU;YAClB,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;YAC5C,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YAChD,IAAI,EAAE,8BAA8B;SAsCrC;QACD,QAAQ,EAAE;YACR,SAAS,EAAE;gBACT,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE;oBACL,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;gBACD,IAAI,EAAE;oBACJ,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;gBACD,IAAI,EAAE;oBACJ,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;aACF;YACD,UAAU,EAAE;gBACV,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE;oBACP,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;aACF;YACD,UAAU,EAAE;gBACV,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE;oBACT,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBACf;gBACD,QAAQ,EAAE;oBACR,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,KAAK;iBAKf;aACF;SACF;QACD,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,aAAa;KA2N1B,CAAC;IAGF,MAAM,EACJ,mBAAmB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAC1D,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EACjD,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhB,IAAI,SAAS,CAAC;IAEd,IAAI,CAAC;QACH,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC;gBACzE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACzG,CAAC;iBAAM,IAAI,YAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvF,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,SAAS,GAAG,SAAS,EAAE,oBAAoB,CAAC;YAC5C,IAAI,SAAS,EAAE,CAAC;gBACd,eAAM,CAAC,IAAI,CAAC,0BAA0B,mBAAmB,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,eAAe,EAAE,CAAC;YAClC,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;gBAE/D,SAAS,GAAG,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,YAAE,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAE7E,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,eAAM,CAAC,IAAI,CAAC,wBAAwB,eAAe,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAC1E,CAAC;QAED,SAAS,GAAG,gBAAC,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAEjC,aAAa,CAAC,SAAS,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACxE,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAEnC,aAAa,CAAC,SAAS,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC5E,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,kBAAe,MAAM,EAAE,CAAC"}
|
|
@@ -15,5 +15,9 @@ export declare class MoonpayService {
|
|
|
15
15
|
moonpayGetSellTransactionDetails(req: any): Promise<any>;
|
|
16
16
|
moonpayCancelSellTransaction(req: any): Promise<any>;
|
|
17
17
|
moonpayGetAccountDetails(req: any): Promise<any>;
|
|
18
|
+
moonpayCreateSession(req: any): Promise<{
|
|
19
|
+
sessionToken: string;
|
|
20
|
+
}>;
|
|
21
|
+
moonpayRevokeActiveSession(req: any): Promise<void>;
|
|
18
22
|
}
|
|
19
23
|
//# sourceMappingURL=moonpay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moonpay.d.ts","sourceRoot":"","sources":["../../../src/externalservices/moonpay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"moonpay.d.ts","sourceRoot":"","sources":["../../../src/externalservices/moonpay.ts"],"names":[],"mappings":"AAOA,qBAAa,cAAc;IACzB,OAAO,EAAE,GAAG,CAAW;IAEvB,OAAO,CAAC,cAAc;IA+BtB,oBAAoB,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,GAAG,CAAC;IA4BvC,eAAe,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,GAAG,CAAC;IA0ClC,mBAAmB,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,GAAG,CAAC;IAyCtC,wBAAwB,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,GAAG,CAAC;IAuC3C,0BAA0B,CAAC,GAAG,KAAA,GAAG;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE;IAgD7D,8BAA8B,CAAC,GAAG,KAAA,GAAG;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE;IAmDjE,4BAA4B,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,GAAG,CAAC;IAwC/C,gCAAgC,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,GAAG,CAAC;IAwCnD,4BAA4B,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,GAAG,CAAC;IAuC/C,wBAAwB,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,GAAG,CAAC;IAgC3C,oBAAoB,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IA+C5D,0BAA0B,CAAC,GAAG,KAAA,GAAG,OAAO,CAAC,IAAI,CAAC;CAiC/C"}
|
|
@@ -40,6 +40,7 @@ exports.MoonpayService = void 0;
|
|
|
40
40
|
const crypto_wallet_core_1 = require("@bitpay-labs/crypto-wallet-core");
|
|
41
41
|
const request = __importStar(require("request"));
|
|
42
42
|
const config_1 = __importDefault(require("../config"));
|
|
43
|
+
const utils_1 = require("../lib/common/utils");
|
|
43
44
|
const clienterror_1 = require("../lib/errors/clienterror");
|
|
44
45
|
const server_1 = require("../lib/server");
|
|
45
46
|
class MoonpayService {
|
|
@@ -59,7 +60,8 @@ class MoonpayService {
|
|
|
59
60
|
WIDGET_API: config_1.default.moonpay[env].widgetApi,
|
|
60
61
|
SELL_WIDGET_API: config_1.default.moonpay[env].sellWidgetApi,
|
|
61
62
|
API_KEY: config_1.default.moonpay[env].apiKey,
|
|
62
|
-
SECRET_KEY: config_1.default.moonpay[env].secretKey
|
|
63
|
+
SECRET_KEY: config_1.default.moonpay[env].secretKey,
|
|
64
|
+
SECRET_KEY_EMBEDDED: config_1.default.moonpay[env].secretKeyEmbedded
|
|
63
65
|
};
|
|
64
66
|
return keys;
|
|
65
67
|
}
|
|
@@ -398,6 +400,71 @@ class MoonpayService {
|
|
|
398
400
|
});
|
|
399
401
|
});
|
|
400
402
|
}
|
|
403
|
+
moonpayCreateSession(req) {
|
|
404
|
+
return new Promise((resolve, reject) => {
|
|
405
|
+
const keys = this.moonpayGetKeys(req);
|
|
406
|
+
const API = keys.API;
|
|
407
|
+
const SECRET_KEY = keys.SECRET_KEY_EMBEDDED;
|
|
408
|
+
if (!(0, server_1.checkRequired)(req.body, ['externalCustomerId'])) {
|
|
409
|
+
return reject(new clienterror_1.ClientError("Moonpay's request missing arguments"));
|
|
410
|
+
}
|
|
411
|
+
const deviceIp = utils_1.Utils.getIpFromReq(req);
|
|
412
|
+
if (!deviceIp) {
|
|
413
|
+
return reject(new clienterror_1.ClientError('Could not determine device IP address'));
|
|
414
|
+
}
|
|
415
|
+
const headers = {
|
|
416
|
+
'Content-Type': 'application/json',
|
|
417
|
+
Authorization: 'Api-Key ' + SECRET_KEY,
|
|
418
|
+
};
|
|
419
|
+
const body = {
|
|
420
|
+
externalCustomerId: req.body.externalCustomerId,
|
|
421
|
+
deviceIp
|
|
422
|
+
};
|
|
423
|
+
if (req.body.email)
|
|
424
|
+
body.email = req.body.email;
|
|
425
|
+
if (req.body.phoneNumber)
|
|
426
|
+
body.phoneNumber = req.body.phoneNumber;
|
|
427
|
+
const URL = API + '/platform/v1/session';
|
|
428
|
+
this.request.post(URL, {
|
|
429
|
+
headers,
|
|
430
|
+
body,
|
|
431
|
+
json: true
|
|
432
|
+
}, (err, data) => {
|
|
433
|
+
if (err) {
|
|
434
|
+
return reject(err.body ?? err);
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
return resolve(data.body ?? data);
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
moonpayRevokeActiveSession(req) {
|
|
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
|
+
if (!(0, server_1.checkRequired)(req.body, ['externalCustomerId'])) {
|
|
448
|
+
return reject(new clienterror_1.ClientError("Moonpay's request missing arguments"));
|
|
449
|
+
}
|
|
450
|
+
const headers = {
|
|
451
|
+
Accept: 'application/json',
|
|
452
|
+
Authorization: 'Api-Key ' + SECRET_KEY
|
|
453
|
+
};
|
|
454
|
+
const URL = API + '/platform/v1/sessions?externalCustomerId=' + encodeURIComponent(req.body.externalCustomerId);
|
|
455
|
+
this.request.delete(URL, {
|
|
456
|
+
headers,
|
|
457
|
+
json: true
|
|
458
|
+
}, (err, data) => {
|
|
459
|
+
if (err) {
|
|
460
|
+
return reject(err.body ? err.body : err);
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
return resolve(data.body ? data.body : data);
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
}
|
|
401
468
|
}
|
|
402
469
|
exports.MoonpayService = MoonpayService;
|
|
403
470
|
//# sourceMappingURL=moonpay.js.map
|