@bitpay-labs/bitcore-wallet-service 11.10.14 → 11.11.1
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/package.json +5 -5
- package/src/config.ts +0 -20
- package/src/externalservices/banxa.ts +51 -10
- package/src/externalservices/changelly.ts +54 -6
- package/src/externalservices/moonpay.ts +85 -19
- package/src/externalservices/oneInch.ts +13 -5
- package/src/externalservices/ramp.ts +42 -8
- package/src/externalservices/sardine.ts +51 -10
- package/src/externalservices/simplex.ts +58 -11
- package/src/externalservices/thorswap.ts +46 -11
- package/src/externalservices/transak.ts +53 -11
- package/src/lib/common/constants.ts +1 -1
- package/src/lib/errors/errordefinitions.ts +8 -0
- package/src/lib/model/tsskeygen.ts +12 -4
- package/src/lib/routes/middleware/authRequest.ts +6 -16
- package/src/lib/routes/middleware/authTssRequest.ts +130 -26
- package/src/lib/routes/services.ts +0 -12
- package/src/lib/routes/tss.ts +21 -8
- package/src/lib/routes/wallets.ts +8 -9
- package/src/lib/server.ts +9 -20
- package/src/lib/storage.ts +55 -22
- package/src/lib/tss.ts +77 -1
- package/src/types/externalservices.d.ts +0 -1
- package/test/integration/externalservices/banxa.test.ts +95 -5
- package/test/integration/externalservices/changelly.test.ts +118 -6
- package/test/integration/externalservices/coinGecko.test.ts +4 -0
- package/test/integration/externalservices/moonpay.test.ts +178 -9
- package/test/integration/externalservices/oneInch.test.ts +28 -1
- package/test/integration/externalservices/ramp.test.ts +126 -4
- package/test/integration/externalservices/sardine.test.ts +95 -5
- package/test/integration/externalservices/simplex.test.ts +95 -5
- package/test/integration/externalservices/thorswap.test.ts +81 -5
- package/test/integration/externalservices/transak.test.ts +98 -6
- package/test/integration/helpers.ts +1 -1
- package/test/integration/server.test.ts +56 -88
- package/test/integration/tss.test.ts +706 -371
- package/test/storage.test.ts +6 -7
- package/ts_build/package.json +4 -4
- package/ts_build/src/config.d.ts.map +1 -1
- package/ts_build/src/config.js +0 -4
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/externalservices/banxa.d.ts.map +1 -1
- package/ts_build/src/externalservices/banxa.js +51 -10
- package/ts_build/src/externalservices/banxa.js.map +1 -1
- package/ts_build/src/externalservices/changelly.d.ts.map +1 -1
- package/ts_build/src/externalservices/changelly.js +54 -6
- package/ts_build/src/externalservices/changelly.js.map +1 -1
- package/ts_build/src/externalservices/moonpay.d.ts.map +1 -1
- package/ts_build/src/externalservices/moonpay.js +85 -19
- package/ts_build/src/externalservices/moonpay.js.map +1 -1
- package/ts_build/src/externalservices/oneInch.d.ts.map +1 -1
- package/ts_build/src/externalservices/oneInch.js +13 -5
- package/ts_build/src/externalservices/oneInch.js.map +1 -1
- package/ts_build/src/externalservices/ramp.d.ts.map +1 -1
- package/ts_build/src/externalservices/ramp.js +42 -8
- package/ts_build/src/externalservices/ramp.js.map +1 -1
- package/ts_build/src/externalservices/sardine.d.ts.map +1 -1
- package/ts_build/src/externalservices/sardine.js +51 -10
- package/ts_build/src/externalservices/sardine.js.map +1 -1
- package/ts_build/src/externalservices/simplex.d.ts.map +1 -1
- package/ts_build/src/externalservices/simplex.js +55 -11
- package/ts_build/src/externalservices/simplex.js.map +1 -1
- package/ts_build/src/externalservices/thorswap.d.ts.map +1 -1
- package/ts_build/src/externalservices/thorswap.js +45 -11
- package/ts_build/src/externalservices/thorswap.js.map +1 -1
- package/ts_build/src/externalservices/transak.d.ts.map +1 -1
- package/ts_build/src/externalservices/transak.js +53 -11
- package/ts_build/src/externalservices/transak.js.map +1 -1
- package/ts_build/src/lib/common/constants.d.ts +1 -1
- package/ts_build/src/lib/common/constants.js +1 -1
- package/ts_build/src/lib/common/index.d.ts +1 -1
- package/ts_build/src/lib/errors/errordefinitions.d.ts +4 -0
- package/ts_build/src/lib/errors/errordefinitions.d.ts.map +1 -1
- package/ts_build/src/lib/errors/errordefinitions.js +4 -0
- package/ts_build/src/lib/errors/errordefinitions.js.map +1 -1
- package/ts_build/src/lib/model/tsskeygen.d.ts +2 -0
- package/ts_build/src/lib/model/tsskeygen.d.ts.map +1 -1
- package/ts_build/src/lib/model/tsskeygen.js +6 -2
- package/ts_build/src/lib/model/tsskeygen.js.map +1 -1
- package/ts_build/src/lib/routes/middleware/authRequest.d.ts.map +1 -1
- package/ts_build/src/lib/routes/middleware/authRequest.js +6 -16
- package/ts_build/src/lib/routes/middleware/authRequest.js.map +1 -1
- package/ts_build/src/lib/routes/middleware/authTssRequest.d.ts +2 -1
- package/ts_build/src/lib/routes/middleware/authTssRequest.d.ts.map +1 -1
- package/ts_build/src/lib/routes/middleware/authTssRequest.js +104 -24
- package/ts_build/src/lib/routes/middleware/authTssRequest.js.map +1 -1
- package/ts_build/src/lib/routes/services.d.ts.map +1 -1
- package/ts_build/src/lib/routes/services.js +0 -10
- package/ts_build/src/lib/routes/services.js.map +1 -1
- package/ts_build/src/lib/routes/tss.d.ts.map +1 -1
- package/ts_build/src/lib/routes/tss.js +19 -7
- package/ts_build/src/lib/routes/tss.js.map +1 -1
- package/ts_build/src/lib/routes/wallets.d.ts.map +1 -1
- package/ts_build/src/lib/routes/wallets.js +8 -9
- package/ts_build/src/lib/routes/wallets.js.map +1 -1
- package/ts_build/src/lib/server.d.ts +0 -2
- package/ts_build/src/lib/server.d.ts.map +1 -1
- package/ts_build/src/lib/server.js +8 -20
- package/ts_build/src/lib/server.js.map +1 -1
- package/ts_build/src/lib/storage.d.ts +9 -2
- package/ts_build/src/lib/storage.d.ts.map +1 -1
- package/ts_build/src/lib/storage.js +51 -20
- package/ts_build/src/lib/storage.js.map +1 -1
- package/ts_build/src/lib/tss.d.ts +8 -0
- package/ts_build/src/lib/tss.d.ts.map +1 -1
- package/ts_build/src/lib/tss.js +59 -1
- package/ts_build/src/lib/tss.js.map +1 -1
- package/ts_build/test/integration/externalservices/banxa.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/banxa.test.js +93 -5
- package/ts_build/test/integration/externalservices/banxa.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/changelly.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/changelly.test.js +111 -6
- package/ts_build/test/integration/externalservices/changelly.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/coinGecko.test.js +4 -0
- package/ts_build/test/integration/externalservices/coinGecko.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/moonpay.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/moonpay.test.js +169 -9
- package/ts_build/test/integration/externalservices/moonpay.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/oneInch.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/oneInch.test.js +26 -1
- package/ts_build/test/integration/externalservices/oneInch.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/ramp.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/ramp.test.js +115 -4
- package/ts_build/test/integration/externalservices/ramp.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/sardine.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/sardine.test.js +94 -5
- package/ts_build/test/integration/externalservices/sardine.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/simplex.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/simplex.test.js +89 -5
- package/ts_build/test/integration/externalservices/simplex.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/thorswap.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/thorswap.test.js +76 -5
- package/ts_build/test/integration/externalservices/thorswap.test.js.map +1 -1
- package/ts_build/test/integration/externalservices/transak.test.d.ts.map +1 -1
- package/ts_build/test/integration/externalservices/transak.test.js +93 -6
- package/ts_build/test/integration/externalservices/transak.test.js.map +1 -1
- package/ts_build/test/integration/helpers.js +1 -1
- package/ts_build/test/integration/helpers.js.map +1 -1
- package/ts_build/test/integration/server.test.js +44 -76
- package/ts_build/test/integration/server.test.js.map +1 -1
- package/ts_build/test/integration/tss.test.d.ts.map +1 -1
- package/ts_build/test/integration/tss.test.js +599 -357
- package/ts_build/test/integration/tss.test.js.map +1 -1
- package/ts_build/test/storage.test.js +6 -7
- package/ts_build/test/storage.test.js.map +1 -1
- package/src/externalservices/wyre.ts +0 -131
- package/test/integration/externalservices/wyre.test.ts +0 -270
- package/ts_build/src/externalservices/wyre.d.ts +0 -7
- package/ts_build/src/externalservices/wyre.d.ts.map +0 -1
- package/ts_build/src/externalservices/wyre.js +0 -144
- package/ts_build/src/externalservices/wyre.js.map +0 -1
- package/ts_build/test/integration/externalservices/wyre.test.d.ts +0 -2
- package/ts_build/test/integration/externalservices/wyre.test.d.ts.map +0 -1
- package/ts_build/test/integration/externalservices/wyre.test.js +0 -281
- package/ts_build/test/integration/externalservices/wyre.test.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as request from 'request';
|
|
2
2
|
import config from '../config';
|
|
3
3
|
import { ClientError } from '../lib/errors/clienterror';
|
|
4
|
+
import logger from '../lib/logger';
|
|
4
5
|
import { checkRequired } from '../lib/server';
|
|
5
6
|
|
|
6
7
|
export class SardineService {
|
|
@@ -68,9 +69,17 @@ export class SardineService {
|
|
|
68
69
|
},
|
|
69
70
|
(err, data) => {
|
|
70
71
|
if (err) {
|
|
71
|
-
|
|
72
|
+
logger.error(`Sardine request failed with error (${URL}): ${err.stack || err}`);
|
|
73
|
+
return reject(new ClientError('Failed to get Sardine quote'));
|
|
72
74
|
} else {
|
|
73
|
-
|
|
75
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
76
|
+
if (!success) {
|
|
77
|
+
logger.warn(`Sardine request failed with status code ${data.statusCode}: ${URL}`);
|
|
78
|
+
}
|
|
79
|
+
if (!data.body) {
|
|
80
|
+
return reject(new ClientError('Sardine did not return a quote'));
|
|
81
|
+
}
|
|
82
|
+
return resolve(data.body);
|
|
74
83
|
}
|
|
75
84
|
}
|
|
76
85
|
);
|
|
@@ -102,9 +111,17 @@ export class SardineService {
|
|
|
102
111
|
},
|
|
103
112
|
(err, data) => {
|
|
104
113
|
if (err) {
|
|
105
|
-
|
|
114
|
+
logger.error(`Sardine request failed with error (${URL}): ${err.stack || err}`);
|
|
115
|
+
return reject(new ClientError('Failed to get Sardine currency limits'));
|
|
106
116
|
} else {
|
|
107
|
-
|
|
117
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
118
|
+
if (!success) {
|
|
119
|
+
logger.warn(`Sardine request failed with status code ${data.statusCode}: ${URL}`);
|
|
120
|
+
}
|
|
121
|
+
if (!data.body) {
|
|
122
|
+
return reject(new ClientError('Sardine did not return currency limits'));
|
|
123
|
+
}
|
|
124
|
+
return resolve(data.body);
|
|
108
125
|
}
|
|
109
126
|
}
|
|
110
127
|
);
|
|
@@ -141,9 +158,17 @@ export class SardineService {
|
|
|
141
158
|
},
|
|
142
159
|
(err, data) => {
|
|
143
160
|
if (err) {
|
|
144
|
-
|
|
161
|
+
logger.error(`Sardine request failed with error (${URL}): ${err.stack || err}`);
|
|
162
|
+
return reject(new ClientError('Failed to get Sardine token'));
|
|
145
163
|
} else {
|
|
146
|
-
|
|
164
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
165
|
+
if (!success) {
|
|
166
|
+
logger.warn(`Sardine request failed with status code ${data.statusCode}: ${URL}`);
|
|
167
|
+
}
|
|
168
|
+
if (!data.body) {
|
|
169
|
+
return reject(new ClientError('Sardine did not return a token'));
|
|
170
|
+
}
|
|
171
|
+
return resolve(data.body);
|
|
147
172
|
}
|
|
148
173
|
}
|
|
149
174
|
);
|
|
@@ -175,9 +200,17 @@ export class SardineService {
|
|
|
175
200
|
},
|
|
176
201
|
(err, data) => {
|
|
177
202
|
if (err) {
|
|
178
|
-
|
|
203
|
+
logger.error(`Sardine request failed with error (${URL}): ${err.stack || err}`);
|
|
204
|
+
return reject(new ClientError('Failed to get Sardine supported tokens'));
|
|
179
205
|
} else {
|
|
180
|
-
|
|
206
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
207
|
+
if (!success) {
|
|
208
|
+
logger.warn(`Sardine request failed with status code ${data.statusCode}: ${URL}`);
|
|
209
|
+
}
|
|
210
|
+
if (!data.body) {
|
|
211
|
+
return reject(new ClientError('Sardine did not return supported tokens'));
|
|
212
|
+
}
|
|
213
|
+
return resolve(data.body);
|
|
181
214
|
}
|
|
182
215
|
}
|
|
183
216
|
);
|
|
@@ -226,9 +259,17 @@ export class SardineService {
|
|
|
226
259
|
},
|
|
227
260
|
(err, data) => {
|
|
228
261
|
if (err) {
|
|
229
|
-
|
|
262
|
+
logger.error(`Sardine request failed with error (${URL}): ${err.stack || err}`);
|
|
263
|
+
return reject(new ClientError('Failed to get Sardine order details'));
|
|
230
264
|
} else {
|
|
231
|
-
|
|
265
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
266
|
+
if (!success) {
|
|
267
|
+
logger.warn(`Sardine request failed with status code ${data.statusCode}: ${URL}`);
|
|
268
|
+
}
|
|
269
|
+
if (!data.body) {
|
|
270
|
+
return reject(new ClientError('Sardine did not return order details'));
|
|
271
|
+
}
|
|
272
|
+
return resolve(data.body);
|
|
232
273
|
}
|
|
233
274
|
}
|
|
234
275
|
);
|
|
@@ -3,6 +3,7 @@ import Uuid from 'uuid';
|
|
|
3
3
|
import config from '../config';
|
|
4
4
|
import { Utils } from '../lib/common/utils';
|
|
5
5
|
import { ClientError } from '../lib/errors/clienterror';
|
|
6
|
+
import logger from '../lib/logger';
|
|
6
7
|
import { checkRequired } from '../lib/server';
|
|
7
8
|
|
|
8
9
|
export class SimplexService {
|
|
@@ -64,9 +65,17 @@ export class SimplexService {
|
|
|
64
65
|
},
|
|
65
66
|
(err, data) => {
|
|
66
67
|
if (err) {
|
|
67
|
-
|
|
68
|
+
logger.error(`Simplex request failed with error (${URL}): ${err.stack || err}`);
|
|
69
|
+
return reject(new ClientError('Failed to get Simplex supported currencies'));
|
|
68
70
|
} else {
|
|
69
|
-
|
|
71
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
72
|
+
if (!success) {
|
|
73
|
+
logger.warn(`Simplex request failed with status code ${data.statusCode}: ${URL}`);
|
|
74
|
+
}
|
|
75
|
+
if (!data.body) {
|
|
76
|
+
return reject(new ClientError('Simplex did not return supported currencies'));
|
|
77
|
+
}
|
|
78
|
+
return resolve(data.body);
|
|
70
79
|
}
|
|
71
80
|
}
|
|
72
81
|
);
|
|
@@ -94,8 +103,10 @@ export class SimplexService {
|
|
|
94
103
|
req.body.payment_methods = req.body.payment_methods.map(item => item === 'simplex_account' ? 'sepa_open_banking' : item);
|
|
95
104
|
}
|
|
96
105
|
|
|
106
|
+
const URL: string = API + '/wallet/merchant/v2/quote';
|
|
107
|
+
|
|
97
108
|
this.request.post(
|
|
98
|
-
|
|
109
|
+
URL,
|
|
99
110
|
{
|
|
100
111
|
headers,
|
|
101
112
|
body: req.body,
|
|
@@ -103,9 +114,17 @@ export class SimplexService {
|
|
|
103
114
|
},
|
|
104
115
|
(err, data) => {
|
|
105
116
|
if (err) {
|
|
106
|
-
|
|
117
|
+
logger.error(`Simplex request failed with error (${URL}): ${err.stack || err}`);
|
|
118
|
+
return reject(new ClientError('Failed to get Simplex quote'));
|
|
107
119
|
} else {
|
|
108
|
-
|
|
120
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
121
|
+
if (!success) {
|
|
122
|
+
logger.warn(`Simplex request failed with status code ${data.statusCode}: ${URL}`);
|
|
123
|
+
}
|
|
124
|
+
if (!data.body) {
|
|
125
|
+
return reject(new ClientError('Simplex did not return a quote'));
|
|
126
|
+
}
|
|
127
|
+
return resolve(data.body);
|
|
109
128
|
}
|
|
110
129
|
}
|
|
111
130
|
);
|
|
@@ -148,9 +167,17 @@ export class SimplexService {
|
|
|
148
167
|
},
|
|
149
168
|
(err, data) => {
|
|
150
169
|
if (err) {
|
|
151
|
-
|
|
170
|
+
logger.error(`Simplex request failed with error (${URL}): ${err.stack || err}`);
|
|
171
|
+
return reject(new ClientError('Failed to get Simplex sell quote'));
|
|
152
172
|
} else {
|
|
153
|
-
|
|
173
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
174
|
+
if (!success) {
|
|
175
|
+
logger.warn(`Simplex request failed with status code ${data.statusCode}: ${URL}`);
|
|
176
|
+
}
|
|
177
|
+
if (!data.body) {
|
|
178
|
+
return reject(new ClientError('Simplex did not return a sell quote'));
|
|
179
|
+
}
|
|
180
|
+
return resolve(data.body);
|
|
154
181
|
}
|
|
155
182
|
}
|
|
156
183
|
);
|
|
@@ -196,8 +223,10 @@ export class SimplexService {
|
|
|
196
223
|
Authorization: 'ApiKey ' + API_KEY
|
|
197
224
|
};
|
|
198
225
|
|
|
226
|
+
const URL: string = API + '/wallet/merchant/v2/payments/partner/data';
|
|
227
|
+
|
|
199
228
|
this.request.post(
|
|
200
|
-
|
|
229
|
+
URL,
|
|
201
230
|
{
|
|
202
231
|
headers,
|
|
203
232
|
body: req.body,
|
|
@@ -205,8 +234,16 @@ export class SimplexService {
|
|
|
205
234
|
},
|
|
206
235
|
(err, data) => {
|
|
207
236
|
if (err) {
|
|
208
|
-
|
|
237
|
+
logger.error(`Simplex request failed with error (${URL}): ${err.stack || err}`);
|
|
238
|
+
return reject(new ClientError('Failed to get Simplex payment data'));
|
|
209
239
|
} else {
|
|
240
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
241
|
+
if (!success) {
|
|
242
|
+
logger.warn(`Simplex request failed with status code ${data.statusCode}: ${URL}`);
|
|
243
|
+
}
|
|
244
|
+
if (!data.body) {
|
|
245
|
+
return reject(new ClientError('Simplex did not return payment data'));
|
|
246
|
+
}
|
|
210
247
|
data.body.payment_id = paymentId;
|
|
211
248
|
data.body.order_id = orderId;
|
|
212
249
|
data.body.app_provider_id = appProviderId;
|
|
@@ -242,8 +279,10 @@ export class SimplexService {
|
|
|
242
279
|
headers['x-country-code'] = req.body.userCountry.toUpperCase();
|
|
243
280
|
}
|
|
244
281
|
|
|
282
|
+
const URL: string = API + '/v3/initiate-sell/widget';
|
|
283
|
+
|
|
245
284
|
this.request.post(
|
|
246
|
-
|
|
285
|
+
URL,
|
|
247
286
|
{
|
|
248
287
|
headers,
|
|
249
288
|
body: req.body,
|
|
@@ -251,8 +290,16 @@ export class SimplexService {
|
|
|
251
290
|
},
|
|
252
291
|
(err, data) => {
|
|
253
292
|
if (err) {
|
|
254
|
-
|
|
293
|
+
logger.error(`Simplex request failed with error (${URL}): ${err.stack || err}`);
|
|
294
|
+
return reject(new ClientError('Failed to initiate Simplex sell payment'));
|
|
255
295
|
} else {
|
|
296
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
297
|
+
if (!success) {
|
|
298
|
+
logger.warn(`Simplex request failed with status code ${data.statusCode}: ${URL}`);
|
|
299
|
+
}
|
|
300
|
+
if (!data.body) {
|
|
301
|
+
return reject(new ClientError('Simplex did not return sell data'));
|
|
302
|
+
}
|
|
256
303
|
data.body.app_sell_ref_id = appSellRefId;
|
|
257
304
|
return resolve(data.body);
|
|
258
305
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as request from 'request';
|
|
2
2
|
import config from '../config';
|
|
3
3
|
import { ClientError } from '../lib/errors/clienterror';
|
|
4
|
+
import logger from '../lib/logger';
|
|
4
5
|
import { checkRequired } from '../lib/server';
|
|
5
6
|
|
|
6
7
|
export class ThorswapService {
|
|
@@ -47,7 +48,7 @@ export class ThorswapService {
|
|
|
47
48
|
'x-api-key': API_KEY
|
|
48
49
|
};
|
|
49
50
|
|
|
50
|
-
const uriPath: string = req?.body?.includeDetails ? '/
|
|
51
|
+
const uriPath: string = '/tokenlist/utils/chains' + (req?.body?.includeDetails ? '/details' : '');
|
|
51
52
|
const URL: string = API + uriPath;
|
|
52
53
|
|
|
53
54
|
this.request.get(
|
|
@@ -58,9 +59,17 @@ export class ThorswapService {
|
|
|
58
59
|
},
|
|
59
60
|
(err, data) => {
|
|
60
61
|
if (err) {
|
|
61
|
-
|
|
62
|
+
logger.error(`Thorswap request failed with error (${URL}): ${err.stack || err}`);
|
|
63
|
+
return reject(new ClientError('Failed to get Thorswap supported chains'));
|
|
62
64
|
} else {
|
|
63
|
-
|
|
65
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
66
|
+
if (!success) {
|
|
67
|
+
logger.warn(`Thorswap request failed with status code ${data.statusCode}: ${URL}`);
|
|
68
|
+
}
|
|
69
|
+
if (!data.body) {
|
|
70
|
+
return reject(new ClientError('Thorswap did not return supported chains'));
|
|
71
|
+
}
|
|
72
|
+
return resolve(data.body);
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
75
|
);
|
|
@@ -84,7 +93,7 @@ export class ThorswapService {
|
|
|
84
93
|
const qs: string[] = [];
|
|
85
94
|
qs.push('categories=' + (req?.body?.categories ?? 'all'));
|
|
86
95
|
|
|
87
|
-
const uriPath: string = req?.body?.includeDetails ? '/
|
|
96
|
+
const uriPath: string = '/tokenlist/utils/currencies' + (req?.body?.includeDetails ? '/details' : '');
|
|
88
97
|
const URL: string = API + `${uriPath}?${qs.join('&')}`;
|
|
89
98
|
|
|
90
99
|
this.request.get(
|
|
@@ -95,9 +104,17 @@ export class ThorswapService {
|
|
|
95
104
|
},
|
|
96
105
|
(err, data) => {
|
|
97
106
|
if (err) {
|
|
98
|
-
|
|
107
|
+
logger.error(`Thorswap request failed with error (${URL}): ${err.stack || err}`);
|
|
108
|
+
return reject(new ClientError('Failed to get Thorswap supported currencies'));
|
|
99
109
|
} else {
|
|
100
|
-
|
|
110
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
111
|
+
if (!success) {
|
|
112
|
+
logger.warn(`Thorswap request failed with status code ${data.statusCode}: ${URL}`);
|
|
113
|
+
}
|
|
114
|
+
if (!data.body) {
|
|
115
|
+
return reject(new ClientError('Thorswap did not return supported currencies'));
|
|
116
|
+
}
|
|
117
|
+
return resolve(data.body);
|
|
101
118
|
}
|
|
102
119
|
}
|
|
103
120
|
);
|
|
@@ -147,9 +164,17 @@ export class ThorswapService {
|
|
|
147
164
|
},
|
|
148
165
|
(err, data) => {
|
|
149
166
|
if (err) {
|
|
150
|
-
|
|
167
|
+
logger.error(`Thorswap request failed with error (${URL}): ${err.stack || err}`);
|
|
168
|
+
return reject(new ClientError('Failed to get Thorswap swap quote'));
|
|
151
169
|
} else {
|
|
152
|
-
|
|
170
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
171
|
+
if (!success) {
|
|
172
|
+
logger.warn(`Thorswap request failed with status code ${data.statusCode}: ${URL}`);
|
|
173
|
+
}
|
|
174
|
+
if (!data.body) {
|
|
175
|
+
return reject(new ClientError('Thorswap did not return a swap quote'));
|
|
176
|
+
}
|
|
177
|
+
return resolve(data.body);
|
|
153
178
|
}
|
|
154
179
|
}
|
|
155
180
|
);
|
|
@@ -174,8 +199,10 @@ export class ThorswapService {
|
|
|
174
199
|
return reject(new ClientError("Thorswap's request missing arguments"));
|
|
175
200
|
}
|
|
176
201
|
|
|
202
|
+
const URL = API + '/tracker/v2/txn';
|
|
203
|
+
|
|
177
204
|
this.request.post(
|
|
178
|
-
|
|
205
|
+
URL,
|
|
179
206
|
// API + '/apiusage/v2/txn',
|
|
180
207
|
// 'https://api.swapkit.dev/track',
|
|
181
208
|
// /apiusage/v2/txn
|
|
@@ -186,9 +213,17 @@ export class ThorswapService {
|
|
|
186
213
|
},
|
|
187
214
|
(err, data) => {
|
|
188
215
|
if (err) {
|
|
189
|
-
|
|
216
|
+
logger.error(`Thorswap request failed with error (${URL}): ${err.stack || err}`);
|
|
217
|
+
return reject(new ClientError('Failed to get Thorswap swap transaction'));
|
|
190
218
|
} else {
|
|
191
|
-
|
|
219
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
220
|
+
if (!success) {
|
|
221
|
+
logger.warn(`Thorswap request failed with status code ${data.statusCode}: ${URL}`);
|
|
222
|
+
}
|
|
223
|
+
if (!data.body) {
|
|
224
|
+
return reject(new ClientError('Thorswap did not return a swap transaction'));
|
|
225
|
+
}
|
|
226
|
+
return resolve(data.body);
|
|
192
227
|
}
|
|
193
228
|
}
|
|
194
229
|
);
|
|
@@ -2,6 +2,7 @@ import * as request from 'request';
|
|
|
2
2
|
import config from '../config';
|
|
3
3
|
import { Utils } from '../lib/common/utils';
|
|
4
4
|
import { ClientError } from '../lib/errors/clienterror';
|
|
5
|
+
import logger from '../lib/logger';
|
|
5
6
|
import { checkRequired } from '../lib/server';
|
|
6
7
|
|
|
7
8
|
export class TransakService {
|
|
@@ -89,9 +90,17 @@ export class TransakService {
|
|
|
89
90
|
},
|
|
90
91
|
(err, data) => {
|
|
91
92
|
if (err) {
|
|
92
|
-
|
|
93
|
+
logger.error(`Transak request failed with error (${URL}): ${err.stack || err}`);
|
|
94
|
+
return reject(new ClientError('Failed to get Transak access token'));
|
|
93
95
|
} else {
|
|
94
|
-
|
|
96
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
97
|
+
if (!success) {
|
|
98
|
+
logger.warn(`Transak request failed with status code ${data.statusCode}: ${URL}`);
|
|
99
|
+
}
|
|
100
|
+
if (!data.body) {
|
|
101
|
+
return reject(new ClientError('Transak did not return an access token'));
|
|
102
|
+
}
|
|
103
|
+
return resolve(data.body);
|
|
95
104
|
}
|
|
96
105
|
}
|
|
97
106
|
);
|
|
@@ -126,9 +135,17 @@ export class TransakService {
|
|
|
126
135
|
},
|
|
127
136
|
(err, data) => {
|
|
128
137
|
if (err) {
|
|
129
|
-
|
|
138
|
+
logger.error(`Transak request failed with error (${URL}): ${err.stack || err}`);
|
|
139
|
+
return reject(new ClientError('Failed to get Transak supported currencies'));
|
|
130
140
|
} else {
|
|
131
|
-
|
|
141
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
142
|
+
if (!success) {
|
|
143
|
+
logger.warn(`Transak request failed with status code ${data.statusCode}: ${URL}`);
|
|
144
|
+
}
|
|
145
|
+
if (!data.body) {
|
|
146
|
+
return reject(new ClientError('Transak did not return supported currencies'));
|
|
147
|
+
}
|
|
148
|
+
return resolve(data.body);
|
|
132
149
|
}
|
|
133
150
|
}
|
|
134
151
|
);
|
|
@@ -163,9 +180,17 @@ export class TransakService {
|
|
|
163
180
|
},
|
|
164
181
|
(err, data) => {
|
|
165
182
|
if (err) {
|
|
166
|
-
|
|
183
|
+
logger.error(`Transak request failed with error (${URL}): ${err.stack || err}`);
|
|
184
|
+
return reject(new ClientError('Failed to get Transak supported fiat currencies'));
|
|
167
185
|
} else {
|
|
168
|
-
|
|
186
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
187
|
+
if (!success) {
|
|
188
|
+
logger.warn(`Transak request failed with status code ${data.statusCode}: ${URL}`);
|
|
189
|
+
}
|
|
190
|
+
if (!data.body) {
|
|
191
|
+
return reject(new ClientError('Transak did not return supported fiat currencies'));
|
|
192
|
+
}
|
|
193
|
+
return resolve(data.body);
|
|
169
194
|
}
|
|
170
195
|
}
|
|
171
196
|
);
|
|
@@ -214,9 +239,17 @@ export class TransakService {
|
|
|
214
239
|
},
|
|
215
240
|
(err, data) => {
|
|
216
241
|
if (err) {
|
|
217
|
-
|
|
242
|
+
logger.error(`Transak request failed with error (${URL}): ${err.stack || err}`);
|
|
243
|
+
return reject(new ClientError('Failed to get Transak quote'));
|
|
218
244
|
} else {
|
|
219
|
-
|
|
245
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
246
|
+
if (!success) {
|
|
247
|
+
logger.warn(`Transak request failed with status code ${data.statusCode}: ${URL}`);
|
|
248
|
+
}
|
|
249
|
+
if (!data.body) {
|
|
250
|
+
return reject(new ClientError('Transak did not return a quote'));
|
|
251
|
+
}
|
|
252
|
+
return resolve(data.body);
|
|
220
253
|
}
|
|
221
254
|
}
|
|
222
255
|
);
|
|
@@ -282,7 +315,8 @@ export class TransakService {
|
|
|
282
315
|
},
|
|
283
316
|
(err, data) => {
|
|
284
317
|
if (err) {
|
|
285
|
-
|
|
318
|
+
logger.error(`Transak request failed with error (${URL}): ${err.stack || err}`);
|
|
319
|
+
return reject(new ClientError('Failed to get Transak signed payment URL'));
|
|
286
320
|
} else {
|
|
287
321
|
return resolve({ urlWithSignature: data?.body?.data?.widgetUrl ?? data?.data?.widgetUrl });
|
|
288
322
|
}
|
|
@@ -323,9 +357,17 @@ export class TransakService {
|
|
|
323
357
|
},
|
|
324
358
|
(err, data) => {
|
|
325
359
|
if (err) {
|
|
326
|
-
|
|
360
|
+
logger.error(`Transak request failed with error (${URL}): ${err.stack || err}`);
|
|
361
|
+
return reject(new ClientError('Failed to get Transak order details'));
|
|
327
362
|
} else {
|
|
328
|
-
|
|
363
|
+
const success = data.statusCode >= 200 && data.statusCode < 300;
|
|
364
|
+
if (!success) {
|
|
365
|
+
logger.warn(`Transak request failed with status code ${data.statusCode}: ${URL}`);
|
|
366
|
+
}
|
|
367
|
+
if (!data.body) {
|
|
368
|
+
return reject(new ClientError('Transak did not return order details'));
|
|
369
|
+
}
|
|
370
|
+
return resolve(data.body);
|
|
329
371
|
}
|
|
330
372
|
}
|
|
331
373
|
);
|
|
@@ -226,7 +226,7 @@ export const Constants = {
|
|
|
226
226
|
|
|
227
227
|
// May be different from the defaults if we rollback
|
|
228
228
|
// or want to beta test new versions.
|
|
229
|
-
TSS_KEYGEN_SCHEME_VERSION_MAX: 1.
|
|
229
|
+
TSS_KEYGEN_SCHEME_VERSION_MAX: 1.2,
|
|
230
230
|
TSS_SIGGEN_SCHEME_VERSION_MAX: 1.1,
|
|
231
231
|
|
|
232
232
|
TSS_KEYGEN_SCHEME_VERSION_MIN: 1,
|
|
@@ -82,6 +82,10 @@ interface Errors<T> {
|
|
|
82
82
|
TSS_SESSION_EXPIRED: T;
|
|
83
83
|
TSS_MISMATCH_VERSION: T;
|
|
84
84
|
TSS_FINAL_SIGNATURE_MISMATCH: T;
|
|
85
|
+
TSS_INVALID_PARTY_DATA: T;
|
|
86
|
+
TSS_PARTY_ALREADY_REGISTERED: T;
|
|
87
|
+
TSS_ROUNDS_ALREADY_STARTED: T;
|
|
88
|
+
TSS_REGISTRATION_PENDING: T;
|
|
85
89
|
};
|
|
86
90
|
|
|
87
91
|
const errors: Errors<string> = {
|
|
@@ -159,6 +163,10 @@ const errors: Errors<string> = {
|
|
|
159
163
|
TSS_SESSION_EXPIRED: 'TSS session has expired',
|
|
160
164
|
TSS_MISMATCH_VERSION: 'TSS version does not match session version',
|
|
161
165
|
TSS_FINAL_SIGNATURE_MISMATCH: 'Final signature does not match the one generated by the session',
|
|
166
|
+
TSS_INVALID_PARTY_DATA: 'Invalid party data',
|
|
167
|
+
TSS_PARTY_ALREADY_REGISTERED: 'Party already registered with a different party ID',
|
|
168
|
+
TSS_ROUNDS_ALREADY_STARTED: 'Rounds have already started',
|
|
169
|
+
TSS_REGISTRATION_PENDING: 'Awaiting registration by the session initiator',
|
|
162
170
|
};
|
|
163
171
|
|
|
164
172
|
const errorsObject = { codes: {} };
|
|
@@ -44,10 +44,14 @@ export interface ITssKeyGenModel {
|
|
|
44
44
|
*/
|
|
45
45
|
n: number;
|
|
46
46
|
/**
|
|
47
|
-
* The list of
|
|
48
|
-
*
|
|
47
|
+
* The list of copayer IDs of the participants in the TSS key generation process.
|
|
48
|
+
* They are in partyId order.
|
|
49
49
|
*/
|
|
50
50
|
participants: Array<string>;
|
|
51
|
+
/**
|
|
52
|
+
* The list of authentication public keys corresponding to the participants in the TSS key generation process.
|
|
53
|
+
*/
|
|
54
|
+
authPublicKeys: Array<string>;
|
|
51
55
|
/**
|
|
52
56
|
* An array of the rounds in round order. Each round is an array of messages
|
|
53
57
|
*/
|
|
@@ -89,6 +93,7 @@ export class TssKeyGenModel implements ITssKeyGenModel {
|
|
|
89
93
|
id: string;
|
|
90
94
|
n: number;
|
|
91
95
|
participants: Array<string>;
|
|
96
|
+
authPublicKeys: Array<string>;
|
|
92
97
|
rounds: Array<Array<{
|
|
93
98
|
fromPartyId: number;
|
|
94
99
|
messages: ITssKeyMessageObject;
|
|
@@ -135,9 +140,11 @@ export class TssKeyGenModel implements ITssKeyGenModel {
|
|
|
135
140
|
x.schemeVersion = version || Defaults.TSS_KEYGEN_SCHEME_VERSION;
|
|
136
141
|
x.n = n;
|
|
137
142
|
x.participants = new Array(n);
|
|
138
|
-
x.participants[
|
|
143
|
+
x.participants[0] = copayerId; // caller's partyId is 0 (enforced above)
|
|
144
|
+
x.authPublicKeys = new Array(n);
|
|
145
|
+
x.authPublicKeys[0] = message.publicKey; // caller's partyId is 0 (enforced above)
|
|
139
146
|
x.rounds = [[{
|
|
140
|
-
fromPartyId: partyId
|
|
147
|
+
fromPartyId: 0, // caller's partyId is 0 (enforced above)
|
|
141
148
|
messages: message
|
|
142
149
|
}]];
|
|
143
150
|
x.joinPassword = passwordHash;
|
|
@@ -154,6 +161,7 @@ export class TssKeyGenModel implements ITssKeyGenModel {
|
|
|
154
161
|
x.schemeVersion = obj.schemeVersion;
|
|
155
162
|
x.n = obj.n;
|
|
156
163
|
x.participants = obj.participants;
|
|
164
|
+
x.authPublicKeys = obj.authPublicKeys;
|
|
157
165
|
x.rounds = obj.rounds;
|
|
158
166
|
x.sharedPublicKey = obj.sharedPublicKey;
|
|
159
167
|
x.joinPassword = obj.joinPassword;
|
|
@@ -39,16 +39,13 @@ async function withSession(storage: Storage, opts): Promise<Copayer> {
|
|
|
39
39
|
return reject(Errors.NOT_AUTHORIZED.withMessage('Session expired'));
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
storage.fetchCopayerLookup(opts.copayerId
|
|
43
|
-
if (err) {
|
|
44
|
-
return reject(err);
|
|
45
|
-
}
|
|
42
|
+
storage.fetchCopayerLookup(opts.copayerId).then(copayer => {
|
|
46
43
|
if (!copayer) {
|
|
47
44
|
return reject(Errors.NOT_AUTHORIZED.withMessage('Copayer not found'));
|
|
48
45
|
}
|
|
49
46
|
|
|
50
47
|
return resolve(copayer);
|
|
51
|
-
});
|
|
48
|
+
}).catch(err => reject(err));
|
|
52
49
|
});
|
|
53
50
|
});
|
|
54
51
|
|
|
@@ -60,17 +57,10 @@ async function withSignature(storage: Storage, opts): Promise<Copayer> {
|
|
|
60
57
|
return;
|
|
61
58
|
}
|
|
62
59
|
|
|
63
|
-
const copayer = await
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
if (!copayer) {
|
|
69
|
-
return reject(Errors.NOT_AUTHORIZED.withMessage('Copayer not found'));
|
|
70
|
-
}
|
|
71
|
-
return resolve(copayer);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
60
|
+
const copayer = await storage.fetchCopayerLookup(opts.copayerId);
|
|
61
|
+
if (!copayer) {
|
|
62
|
+
throw Errors.NOT_AUTHORIZED.withMessage('Copayer not found');
|
|
63
|
+
}
|
|
74
64
|
|
|
75
65
|
const isValid = !!copayer.requestPubKeys.find(pubKey => Utils.verifyMessage(opts.message, opts.signature, pubKey.key));
|
|
76
66
|
if (!isValid) {
|