Skip to content

Commit 794f9ca

Browse files
committed
Merge branch 'feat/rampSell' of github.com:Gamboster/bitcore
2 parents fca8492 + d89e17a commit 794f9ca

File tree

4 files changed

+300
-14
lines changed

4 files changed

+300
-14
lines changed

packages/bitcore-wallet-client/src/lib/api.ts

+9
Original file line numberDiff line numberDiff line change
@@ -3407,6 +3407,15 @@ export class API extends EventEmitter {
34073407
});
34083408
}
34093409

3410+
rampGetSellQuote(data): Promise<any> {
3411+
return new Promise((resolve, reject) => {
3412+
this.request.post('/v1/service/ramp/sellQuote', data, (err, data) => {
3413+
if (err) return reject(err);
3414+
return resolve(data);
3415+
});
3416+
});
3417+
}
3418+
34103419
rampGetSignedPaymentUrl(data): Promise<any> {
34113420
return new Promise((resolve, reject) => {
34123421
this.request.post(

packages/bitcore-wallet-service/src/lib/expressapp.ts

+23
Original file line numberDiff line numberDiff line change
@@ -1700,6 +1700,18 @@ export class ExpressApp {
17001700
});
17011701
});
17021702

1703+
router.post('/v1/service/ramp/sellQuote', (req, res) => {
1704+
getServerWithAuth(req, res, async server => {
1705+
let response;
1706+
try {
1707+
response = await server.rampGetSellQuote(req);
1708+
return res.json(response);
1709+
} catch (ex) {
1710+
return returnError(ex, res, req);
1711+
}
1712+
});
1713+
});
1714+
17031715
router.post('/v1/service/ramp/signedPaymentUrl', (req, res) => {
17041716
getServerWithAuth(req, res, async server => {
17051717
let response;
@@ -1723,6 +1735,17 @@ export class ExpressApp {
17231735
}
17241736
});
17251737

1738+
router.post('/v1/service/ramp/sellTransactionDetails', async (req, res) => {
1739+
let server, response;
1740+
try {
1741+
server = getServer(req, res);
1742+
response = await server.rampGetSellTransactionDetails(req);
1743+
return res.json(response);
1744+
} catch (ex) {
1745+
return returnError(ex, res, req);
1746+
}
1747+
});
1748+
17261749
router.post('/v1/service/sardine/quote', (req, res) => {
17271750
getServerWithAuth(req, res, server => {
17281751
server

packages/bitcore-wallet-service/src/lib/server.ts

+89-11
Original file line numberDiff line numberDiff line change
@@ -5566,23 +5566,58 @@ export class WalletService implements IWalletService {
55665566
});
55675567
}
55685568

5569+
rampGetSellQuote(req): Promise<any> {
5570+
return new Promise((resolve, reject) => {
5571+
const keys = this.rampGetKeys(req);
5572+
const API = keys.API;
5573+
const API_KEY = keys.API_KEY;
5574+
5575+
/*
5576+
* Although fiatValue and cryptoAmount are not both required, you need to pass one of them.
5577+
* cryptoAmount - should be passed in token wei - e.g. for 1ETH cryptoAmount: 1000000000000000000
5578+
* cryptoAmount?: string;
5579+
* fiatValue?: number;
5580+
*/
5581+
if (!checkRequired(req.body, ['cryptoAssetSymbol', 'fiatCurrency']) || (!checkRequired(req.body, ['fiatValue']) && !checkRequired(req.body, ['cryptoAmount']))) {
5582+
return reject(new ClientError("Ramp's request missing arguments"));
5583+
}
5584+
5585+
const headers = {
5586+
'Content-Type': 'application/json'
5587+
};
5588+
5589+
const URL: string = API + `/host-api/v3/offramp/quote/all?hostApiKey=${API_KEY}`;
5590+
5591+
this.request.post(
5592+
URL,
5593+
{
5594+
headers,
5595+
body: req.body,
5596+
json: true
5597+
},
5598+
(err, data) => {
5599+
if (err) {
5600+
return reject(err.body ? err.body : err);
5601+
} else {
5602+
return resolve(data.body ? data.body : data);
5603+
}
5604+
}
5605+
);
5606+
});
5607+
}
5608+
55695609
rampGetSignedPaymentUrl(req): { urlWithSignature: string } {
55705610
const webRequiredParams = [
5571-
'swapAsset',
5572-
'userAddress',
55735611
'selectedCountryCode',
5574-
'finalUrl',
55755612
];
55765613
const appRequiredParams = [
5577-
'swapAsset',
5578-
'swapAmount',
55795614
'enabledFlows',
55805615
'defaultFlow',
5581-
'userAddress',
55825616
'selectedCountryCode',
55835617
'defaultAsset',
5584-
'finalUrl',
55855618
];
5619+
const extraRequiredParams = req.body.flow && req.body.flow === 'sell' ? ['offrampAsset'] : ['finalUrl', 'userAddress', 'swapAmount','swapAsset'];
5620+
appRequiredParams.concat(extraRequiredParams);
55865621

55875622
const requiredParams = req.body.context === 'web' ? webRequiredParams : appRequiredParams;
55885623
const keys = this.rampGetKeys(req);
@@ -5601,10 +5636,11 @@ export class WalletService implements IWalletService {
56015636

56025637
let qs = [];
56035638
qs.push('hostApiKey=' + API_KEY);
5604-
qs.push('swapAsset=' + encodeURIComponent(req.body.swapAsset));
5605-
qs.push('userAddress=' + encodeURIComponent(req.body.userAddress));
56065639
qs.push('selectedCountryCode=' + encodeURIComponent(req.body.selectedCountryCode));
5607-
qs.push('finalUrl=' + encodeURIComponent(req.body.finalUrl));
5640+
if (req.body.finalUrl) qs.push('finalUrl=' + encodeURIComponent(req.body.finalUrl));
5641+
if (req.body.userAddress) qs.push('userAddress=' + encodeURIComponent(req.body.userAddress));
5642+
if (req.body.swapAsset) qs.push('swapAsset=' + encodeURIComponent(req.body.swapAsset));
5643+
if (req.body.offrampAsset) qs.push('offrampAsset=' + encodeURIComponent(req.body.offrampAsset));
56085644
if (req.body.enabledFlows) qs.push('enabledFlows=' + encodeURIComponent(req.body.enabledFlows));
56095645
if (req.body.defaultFlow) qs.push('defaultFlow=' + encodeURIComponent(req.body.defaultFlow));
56105646
if (req.body.hostLogoUrl) qs.push('hostLogoUrl=' + encodeURIComponent(req.body.hostLogoUrl));
@@ -5614,6 +5650,11 @@ export class WalletService implements IWalletService {
56145650
if (req.body.fiatCurrency) qs.push('fiatCurrency=' + encodeURIComponent(req.body.fiatCurrency));
56155651
if (req.body.defaultAsset) qs.push('defaultAsset=' + encodeURIComponent(req.body.defaultAsset));
56165652
if (req.body.userEmailAddress) qs.push('userEmailAddress=' + encodeURIComponent(req.body.userEmailAddress));
5653+
if (req.body.useSendCryptoCallback) qs.push('useSendCryptoCallback=' + encodeURIComponent(req.body.useSendCryptoCallback));
5654+
if (req.body.paymentMethodType) qs.push('paymentMethodType=' + encodeURIComponent(req.body.paymentMethodType));
5655+
if (req.body.hideExitButton) qs.push('hideExitButton=' + encodeURIComponent(req.body.hideExitButton));
5656+
if (req.body.variant) qs.push('variant=' + encodeURIComponent(req.body.variant));
5657+
if (req.body.useSendCryptoCallbackVersion) qs.push('useSendCryptoCallbackVersion=' + encodeURIComponent(req.body.useSendCryptoCallbackVersion));
56175658

56185659
const URL_SEARCH: string = `?${qs.join('&')}`;
56195660

@@ -5634,6 +5675,7 @@ export class WalletService implements IWalletService {
56345675
let URL: string;
56355676

56365677
let qs = [];
5678+
// "Buy" and "Sell" features use the same properties. Use "flow" to target the correct endpoint
56375679
qs.push('hostApiKey=' + API_KEY);
56385680
if (req.body.currencyCode) qs.push('currencyCode=' + encodeURIComponent(req.body.currencyCode));
56395681
if (req.body.withDisabled) qs.push('withDisabled=' + encodeURIComponent(req.body.withDisabled));
@@ -5643,7 +5685,43 @@ export class WalletService implements IWalletService {
56435685
qs.push('userIp=' + encodeURIComponent(ip));
56445686
}
56455687

5646-
URL = API + `/host-api/v3/assets?${qs.join('&')}`;
5688+
URL = API + `/host-api/v3${req.body.flow && req.body.flow === 'sell' ? '/offramp' : ''}/assets?${qs.join('&')}`;
5689+
5690+
this.request.get(
5691+
URL,
5692+
{
5693+
headers,
5694+
json: true
5695+
},
5696+
(err, data) => {
5697+
if (err) {
5698+
return reject(err.body ? err.body : err);
5699+
} else {
5700+
return resolve(data.body ? data.body : data);
5701+
}
5702+
}
5703+
);
5704+
});
5705+
}
5706+
5707+
rampGetSellTransactionDetails(req): Promise<any> {
5708+
return new Promise((resolve, reject) => {
5709+
const keys = this.rampGetKeys(req);
5710+
const API = keys.API;
5711+
5712+
if (!checkRequired(req.body, ['id', 'saleViewToken'])) {
5713+
return reject(new ClientError("Ramp's request missing arguments"));
5714+
}
5715+
5716+
const headers = {
5717+
'Content-Type': 'application/json'
5718+
};
5719+
let URL: string;
5720+
5721+
let qs = [];
5722+
qs.push('secret=' + req.body.saleViewToken);
5723+
5724+
URL = API + `/host-api/v3/offramp/sale/${req.body.id}?${qs.join('&')}`;
56475725

56485726
this.request.get(
56495727
URL,

0 commit comments

Comments
 (0)