@bitpay-labs/bitcore-wallet-service 11.8.1 → 11.8.2

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 (84) hide show
  1. package/package.json +2 -2
  2. package/src/bws.ts +2 -0
  3. package/src/lib/common/utils.ts +6 -0
  4. package/src/lib/expressapp.ts +63 -2378
  5. package/src/lib/model/txproposal.ts +14 -10
  6. package/src/lib/routes/advertisements.ts +151 -0
  7. package/src/lib/routes/blockchain.ts +152 -0
  8. package/src/lib/routes/context.ts +149 -0
  9. package/src/lib/routes/maintenance.ts +111 -0
  10. package/src/lib/routes/moralis.ts +89 -0
  11. package/src/lib/routes/notifications.ts +135 -0
  12. package/src/lib/routes/services.ts +528 -0
  13. package/src/lib/routes/setup.ts +86 -0
  14. package/src/lib/routes/transactions.ts +196 -0
  15. package/src/lib/routes/walletdata.ts +167 -0
  16. package/src/lib/routes/wallets.ts +289 -0
  17. package/src/lib/server.ts +24 -1
  18. package/src/lib/storage.ts +3 -0
  19. package/ts_build/package.json +4 -4
  20. package/ts_build/src/bws.js +3 -0
  21. package/ts_build/src/bws.js.map +1 -1
  22. package/ts_build/src/lib/common/index.d.ts +1 -0
  23. package/ts_build/src/lib/common/index.d.ts.map +1 -1
  24. package/ts_build/src/lib/common/utils.d.ts +1 -0
  25. package/ts_build/src/lib/common/utils.d.ts.map +1 -1
  26. package/ts_build/src/lib/common/utils.js +6 -0
  27. package/ts_build/src/lib/common/utils.js.map +1 -1
  28. package/ts_build/src/lib/expressapp.d.ts.map +1 -1
  29. package/ts_build/src/lib/expressapp.js +64 -2224
  30. package/ts_build/src/lib/expressapp.js.map +1 -1
  31. package/ts_build/src/lib/model/txproposal.d.ts +1 -4
  32. package/ts_build/src/lib/model/txproposal.d.ts.map +1 -1
  33. package/ts_build/src/lib/model/txproposal.js +13 -9
  34. package/ts_build/src/lib/model/txproposal.js.map +1 -1
  35. package/ts_build/src/lib/routes/advertisements.d.ts +11 -0
  36. package/ts_build/src/lib/routes/advertisements.d.ts.map +1 -0
  37. package/ts_build/src/lib/routes/advertisements.js +119 -0
  38. package/ts_build/src/lib/routes/advertisements.js.map +1 -0
  39. package/ts_build/src/lib/routes/blockchain.d.ts +13 -0
  40. package/ts_build/src/lib/routes/blockchain.d.ts.map +1 -0
  41. package/ts_build/src/lib/routes/blockchain.js +159 -0
  42. package/ts_build/src/lib/routes/blockchain.js.map +1 -0
  43. package/ts_build/src/lib/routes/context.d.ts +12 -0
  44. package/ts_build/src/lib/routes/context.d.ts.map +1 -0
  45. package/ts_build/src/lib/routes/context.js +115 -0
  46. package/ts_build/src/lib/routes/context.js.map +1 -0
  47. package/ts_build/src/lib/routes/maintenance.d.ts +10 -0
  48. package/ts_build/src/lib/routes/maintenance.d.ts.map +1 -0
  49. package/ts_build/src/lib/routes/maintenance.js +131 -0
  50. package/ts_build/src/lib/routes/maintenance.js.map +1 -0
  51. package/ts_build/src/lib/routes/moralis.d.ts +9 -0
  52. package/ts_build/src/lib/routes/moralis.d.ts.map +1 -0
  53. package/ts_build/src/lib/routes/moralis.js +78 -0
  54. package/ts_build/src/lib/routes/moralis.js.map +1 -0
  55. package/ts_build/src/lib/routes/notifications.d.ts +10 -0
  56. package/ts_build/src/lib/routes/notifications.d.ts.map +1 -0
  57. package/ts_build/src/lib/routes/notifications.js +120 -0
  58. package/ts_build/src/lib/routes/notifications.js.map +1 -0
  59. package/ts_build/src/lib/routes/services.d.ts +11 -0
  60. package/ts_build/src/lib/routes/services.d.ts.map +1 -0
  61. package/ts_build/src/lib/routes/services.js +430 -0
  62. package/ts_build/src/lib/routes/services.js.map +1 -0
  63. package/ts_build/src/lib/routes/setup.d.ts +4 -0
  64. package/ts_build/src/lib/routes/setup.d.ts.map +1 -0
  65. package/ts_build/src/lib/routes/setup.js +79 -0
  66. package/ts_build/src/lib/routes/setup.js.map +1 -0
  67. package/ts_build/src/lib/routes/transactions.d.ts +9 -0
  68. package/ts_build/src/lib/routes/transactions.d.ts.map +1 -0
  69. package/ts_build/src/lib/routes/transactions.js +188 -0
  70. package/ts_build/src/lib/routes/transactions.js.map +1 -0
  71. package/ts_build/src/lib/routes/walletdata.d.ts +10 -0
  72. package/ts_build/src/lib/routes/walletdata.d.ts.map +1 -0
  73. package/ts_build/src/lib/routes/walletdata.js +186 -0
  74. package/ts_build/src/lib/routes/walletdata.js.map +1 -0
  75. package/ts_build/src/lib/routes/wallets.d.ts +13 -0
  76. package/ts_build/src/lib/routes/wallets.d.ts.map +1 -0
  77. package/ts_build/src/lib/routes/wallets.js +292 -0
  78. package/ts_build/src/lib/routes/wallets.js.map +1 -0
  79. package/ts_build/src/lib/server.d.ts.map +1 -1
  80. package/ts_build/src/lib/server.js +19 -1
  81. package/ts_build/src/lib/server.js.map +1 -1
  82. package/ts_build/src/lib/storage.d.ts.map +1 -1
  83. package/ts_build/src/lib/storage.js +3 -0
  84. package/ts_build/src/lib/storage.js.map +1 -1
@@ -1,65 +1,30 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
6
  exports.ExpressApp = void 0;
40
7
  const path_1 = __importDefault(require("path"));
41
- const async = __importStar(require("async"));
42
- const compression_1 = __importDefault(require("compression"));
43
- const cors_1 = __importDefault(require("cors"));
44
8
  const express_1 = __importDefault(require("express"));
45
- const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
46
- const lodash_1 = __importDefault(require("lodash"));
47
- const request_promise_native_1 = __importDefault(require("request-promise-native"));
48
9
  require("source-map-support/register");
49
10
  const config_1 = __importDefault(require("../config"));
50
- const common_1 = require("./common");
51
- const clienterror_1 = require("./errors/clienterror");
52
- const errordefinitions_1 = require("./errors/errordefinitions");
53
11
  const logger_1 = require("./logger");
54
12
  const aave_1 = require("./routes/aave");
13
+ const advertisements_1 = require("./routes/advertisements");
14
+ const blockchain_1 = require("./routes/blockchain");
15
+ const context_1 = require("./routes/context");
55
16
  const helpers_1 = require("./routes/helpers");
17
+ const maintenance_1 = require("./routes/maintenance");
56
18
  const createWalletLimiter_1 = require("./routes/middleware/createWalletLimiter");
57
- const log_1 = require("./routes/middleware/log");
19
+ const moralis_1 = require("./routes/moralis");
20
+ const notifications_1 = require("./routes/notifications");
21
+ const services_1 = require("./routes/services");
22
+ const setup_1 = require("./routes/setup");
23
+ const transactions_1 = require("./routes/transactions");
58
24
  const tss_1 = require("./routes/tss");
25
+ const walletdata_1 = require("./routes/walletdata");
26
+ const wallets_1 = require("./routes/wallets");
59
27
  const server_1 = require("./server");
60
- const stats_1 = require("./stats");
61
- const Defaults = common_1.Common.Defaults;
62
- const Utils = common_1.Common.Utils;
63
28
  class ExpressApp {
64
29
  app;
65
30
  constructor() {
@@ -67,2187 +32,62 @@ class ExpressApp {
67
32
  }
68
33
  start(opts, cb) {
69
34
  opts = opts || {};
70
- this.app.use((0, compression_1.default)());
71
- this.app.use((req, res, next) => {
72
- res.setHeader('Access-Control-Allow-Origin', '*');
73
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE');
74
- res.setHeader('Access-Control-Allow-Headers', 'x-signature,x-identity,x-identities,x-session,x-client-version,x-wallet-id,X-Requested-With,Content-Type,Authorization');
75
- res.setHeader('x-service-version', server_1.WalletService.getServiceVersion());
76
- next();
77
- });
78
- const allowCORS = (req, res, next) => {
79
- if ('OPTIONS' == req.method) {
80
- res.sendStatus(200);
81
- res.end();
82
- return;
83
- }
84
- next();
85
- };
86
- this.app.use(allowCORS);
87
- this.app.enable('trust proxy');
88
- this.app.use((req, res, next) => {
89
- req.on('abort', () => {
90
- logger_1.logger.warn('Request aborted by the client');
91
- });
92
- next();
93
- });
94
- const POST_LIMIT = 1024 * 100;
95
- const POST_LIMIT_LARGE = 2 * 1024 * 1024;
96
- this.app.use((req, res, next) => {
97
- if (req.path.includes('/txproposals') || req.path.includes('/tss/')) {
98
- return express_1.default.json({ limit: POST_LIMIT_LARGE })(req, res, next);
99
- }
100
- else {
101
- return express_1.default.json({ limit: POST_LIMIT })(req, res, next);
102
- }
103
- });
104
- this.app.use((req, res, next) => {
105
- if (config_1.default.maintenanceOpts.maintenanceMode === true) {
106
- const errorCode = 503;
107
- const errorMessage = 'BWS down for maintenance';
108
- res.status(503).send({ code: errorCode, message: errorMessage });
109
- }
110
- else {
111
- next();
112
- }
113
- });
114
- if (opts.disableLogs) {
115
- for (const transport of logger_1.transports) {
116
- transport.level = 'error';
117
- }
118
- }
119
- else {
120
- this.app.use((0, log_1.LogMiddleware)());
121
- }
35
+ (0, setup_1.setupAppMiddleware)(this.app, opts);
122
36
  const router = express_1.default.Router();
123
37
  helpers_1.error.setOpts(opts);
124
38
  const returnError = helpers_1.error.returnError.bind(helpers_1.error);
125
- const logDeprecated = req => {
126
- logger_1.logger.warn('DEPRECATED', req.method, req.url, '(' + req.header('x-client-version') + ')');
127
- };
128
- const getCredentials = req => {
129
- const identity = req.header('x-identity');
130
- if (!identity)
131
- return;
132
- return {
133
- copayerId: identity,
134
- signature: req.header('x-signature'),
135
- session: req.header('x-session')
136
- };
137
- };
138
- const getServer = (req, _res) => {
139
- const opts = {
140
- clientVersion: req.header('x-client-version'),
141
- userAgent: req.header('user-agent')
142
- };
143
- return server_1.WalletService.getInstance(opts);
144
- };
145
- const getServerWithAuth = async (req, res, opts, cb) => {
146
- if (typeof opts === 'function') {
147
- cb = opts;
148
- opts = {};
149
- }
150
- opts = (opts || {});
151
- const credentials = getCredentials(req);
152
- if (!credentials)
153
- return returnError(errordefinitions_1.Errors.NOT_AUTHORIZED, res, req);
154
- const reqUrl = req.redirectedUrl || req.url;
155
- const auth = {
156
- copayerId: credentials.copayerId,
157
- message: req.method.toLowerCase() + '|' + reqUrl + '|' + JSON.stringify(req.body),
158
- signature: credentials.signature,
159
- clientVersion: req.header('x-client-version'),
160
- userAgent: req.header('user-agent'),
161
- walletId: req.header('x-wallet-id'),
162
- session: undefined
163
- };
164
- if (opts.allowSession) {
165
- auth.session = credentials.session;
166
- }
167
- try {
168
- const server = await new Promise((resolve, reject) => {
169
- server_1.WalletService.getInstanceWithAuth(auth, (err, server) => {
170
- if (err) {
171
- return reject(err);
172
- }
173
- if (opts.onlySupportStaff && !server.copayerIsSupportStaff) {
174
- return reject(errordefinitions_1.Errors.NOT_AUTHORIZED);
175
- }
176
- if (server.copayerIsSupportStaff) {
177
- req.isSupportStaff = true;
178
- }
179
- if (opts.onlyMarketingStaff && !server.copayerIsMarketingStaff) {
180
- return reject(errordefinitions_1.Errors.NOT_AUTHORIZED);
181
- }
182
- req.walletId = server.walletId;
183
- req.copayerId = server.copayerId;
184
- return resolve(server);
185
- });
186
- });
187
- if (cb) {
188
- return cb(server);
189
- }
190
- return server;
191
- }
192
- catch (err) {
193
- if (opts.silentFailure) {
194
- if (cb) {
195
- return cb(null, err);
196
- }
197
- throw err;
198
- }
199
- return returnError(err, res, req);
200
- }
201
- };
202
- const getServerWithMultiAuth = (req, res, opts = {}) => {
203
- const identities = req.headers['x-identities'] ? req.headers['x-identities'].split(',') : false;
204
- const signature = req.headers['x-signature'];
205
- if (!identities || !signature) {
206
- throw errordefinitions_1.Errors.NOT_AUTHORIZED;
207
- }
208
- if (!Array.isArray(identities)) {
209
- throw errordefinitions_1.Errors.NOT_AUTHORIZED;
210
- }
211
- return identities.map(id => new Promise((resolve, reject) => getServerWithAuth(Object.assign(req, {
212
- headers: {
213
- ...req.headers,
214
- 'x-identity': id
215
- }
216
- }), res, opts, (server, err) => (err ? reject(err) : resolve(server)))));
217
- };
218
- const ONE_MINUTE = 60;
219
- function SetPublicCache(res, seconds) {
220
- res.setHeader('Cache-Control', `public, max-age=${seconds}, stale-if-error=${10 * seconds}`);
221
- }
222
- router.get('/latest-version', async (req, res) => {
223
- SetPublicCache(res, 10 * ONE_MINUTE);
224
- try {
225
- res.setHeader('User-Agent', 'copay');
226
- const options = {
227
- uri: 'https://api.github.com/repos/bitpay/wallet/releases/latest',
228
- headers: {
229
- 'User-Agent': 'Copay'
230
- },
231
- json: true
232
- };
233
- let server;
234
- try {
235
- server = getServer(req, res);
236
- }
237
- catch (ex) {
238
- return returnError(ex, res, req);
239
- }
240
- server.storage.checkAndUseGlobalCache('latest-copay-version', Defaults.COPAY_VERSION_CACHE_DURATION, async (err, version) => {
241
- if (err) {
242
- res.send(err);
243
- }
244
- if (version) {
245
- res.json({ version });
246
- }
247
- else {
248
- try {
249
- const htmlString = await (0, request_promise_native_1.default)(options);
250
- if (htmlString['tag_name']) {
251
- server.storage.storeGlobalCache('latest-copay-version', htmlString['tag_name'], () => {
252
- res.json({ version: htmlString['tag_name'] });
253
- });
254
- }
255
- }
256
- catch (err) {
257
- res.send(err);
258
- }
259
- }
260
- });
261
- }
262
- catch (err) {
263
- res.send(err);
264
- }
265
- });
266
- router.post('/v1/wallets/', (0, createWalletLimiter_1.createWalletLimiter)(opts), (req, res) => {
267
- logDeprecated(req);
268
- return returnError(new clienterror_1.ClientError('BIP45 wallet creation no longer supported'), res, req);
269
- });
270
- router.post('/v2/wallets/', (0, createWalletLimiter_1.createWalletLimiter)(opts), (req, res) => {
271
- let server;
272
- try {
273
- server = getServer(req, res);
274
- }
275
- catch (ex) {
276
- return returnError(ex, res, req);
277
- }
278
- server.createWallet(req.body, (err, walletId) => {
279
- if (err)
280
- return returnError(err, res, req);
281
- res.json({
282
- walletId
283
- });
284
- });
285
- });
286
- router.put('/v1/copayers/:id/', (req, res) => {
287
- req.body.copayerId = req.params['id'];
288
- let server;
289
- try {
290
- server = getServer(req, res);
291
- }
292
- catch (ex) {
293
- return returnError(ex, res, req);
294
- }
295
- server.addAccess(req.body, (err, result) => {
296
- if (err)
297
- return returnError(err, res, req);
298
- res.json(result);
299
- });
300
- });
301
- router.post('/v1/wallets/:id/copayers/', (req, res) => {
302
- logDeprecated(req);
303
- return returnError(new clienterror_1.ClientError('BIP45 wallet creation no longer supported'), res, req);
304
- });
305
- router.post('/v2/wallets/:id/copayers/', (req, res) => {
306
- req.body.walletId = req.params['id'];
307
- let server;
308
- try {
309
- server = getServer(req, res);
310
- }
311
- catch (ex) {
312
- return returnError(ex, res, req);
313
- }
314
- server.joinWallet(req.body, (err, result) => {
315
- if (err)
316
- return returnError(err, res, req);
317
- res.json(result);
318
- });
319
- });
320
- router.get('/v1/wallets/', (req, res) => {
321
- logDeprecated(req);
322
- getServerWithAuth(req, res, server => {
323
- server.getStatus({
324
- includeExtendedInfo: true
325
- }, (err, status) => {
326
- if (err)
327
- return returnError(err, res, req);
328
- res.json(status);
329
- });
330
- });
331
- });
332
- router.get('/v2/wallets/', (req, res) => {
333
- getServerWithAuth(req, res, server => {
334
- const opts = { includeExtendedInfo: false, twoStep: false };
335
- if (req.query.includeExtendedInfo == '1')
336
- opts.includeExtendedInfo = true;
337
- if (req.query.twoStep == '1')
338
- opts.twoStep = true;
339
- server.getStatus(opts, (err, status) => {
340
- if (err)
341
- return returnError(err, res, req);
342
- res.json(status);
343
- });
344
- });
345
- });
346
- router.get('/v3/wallets/', (req, res) => {
347
- getServerWithAuth(req, res, server => {
348
- const opts = {
349
- includeExtendedInfo: false,
350
- twoStep: false,
351
- includeServerMessages: false,
352
- tokenAddress: req.query.tokenAddress,
353
- multisigContractAddress: req.query.multisigContractAddress,
354
- network: req.query.network
355
- };
356
- if (req.query.includeExtendedInfo == '1')
357
- opts.includeExtendedInfo = true;
358
- if (req.query.twoStep == '1')
359
- opts.twoStep = true;
360
- if (req.query.serverMessageArray == '1')
361
- opts.includeServerMessages = true;
362
- server.getStatus(opts, (err, status) => {
363
- if (err)
364
- return returnError(err, res, req);
365
- res.json(status);
366
- });
367
- });
368
- });
369
- router.get('/v1/wallets/all/', async (req, res) => {
370
- let responses;
371
- const includeExtendedInfo = req.query.includeExtendedInfo == '1';
372
- const twoStep = req.query.twoStep == '1';
373
- const silentFailure = req.query.silentFailure == '1';
374
- const includeServerMessages = req.query.serverMessageArray == '1';
375
- const buildOpts = (req, copayerId) => {
376
- const getParam = (param, returnArray = false) => {
377
- const value = req.query[`${copayerId}:${param}`] || req.query[copayerId]?.[param];
378
- if (returnArray) {
379
- return Array.isArray(value) ? value : value ? [value] : null;
380
- }
381
- return value ? value : null;
382
- };
383
- const opts = {
384
- includeExtendedInfo,
385
- twoStep,
386
- silentFailure,
387
- includeServerMessages,
388
- tokenAddresses: getParam('tokenAddress', true),
389
- multisigContractAddress: getParam('multisigContractAddress'),
390
- network: getParam('network')
391
- };
392
- return opts;
393
- };
394
- try {
395
- responses = await Promise.all(getServerWithMultiAuth(req, res, { silentFailure }).map(promise => promise.then((server) => new Promise(resolve => {
396
- const options = buildOpts(req, server.copayerId);
397
- if (options.tokenAddresses) {
398
- options.tokenAddresses.unshift(null);
399
- return async.concat(options.tokenAddresses, (tokenAddress, cb) => {
400
- const optsClone = JSON.parse(JSON.stringify(options));
401
- optsClone.tokenAddresses = null;
402
- optsClone.tokenAddress = tokenAddress;
403
- return server.getStatus(optsClone, (err, status) => {
404
- const result = {
405
- walletId: server.walletId,
406
- tokenAddress: optsClone.tokenAddress,
407
- success: true,
408
- ...(err ? { success: false, message: err.message } : {}),
409
- status
410
- };
411
- if (err && err.message)
412
- logger_1.logger.error(`An error occurred retrieving wallet status - id: ${server.walletId} - token address: ${optsClone.tokenAddress} - err: ${err.message}`);
413
- cb(null, [result]);
414
- });
415
- }, (err, result) => {
416
- return resolve(result);
417
- });
418
- }
419
- else {
420
- return server.getStatus(options, (err, status) => {
421
- return resolve([
422
- {
423
- walletId: server.walletId,
424
- tokenAddress: null,
425
- success: true,
426
- ...(err ? { success: false, message: err.message } : {}),
427
- status
428
- }
429
- ]);
430
- });
431
- }
432
- }), ({ message }) => Promise.resolve({ success: false, error: message }))
433
- .catch(err => {
434
- if (!silentFailure) {
435
- returnError(err, res, req);
436
- }
437
- })));
438
- }
439
- catch (err) {
440
- return returnError(err, res, req);
441
- }
442
- return res.json(lodash_1.default.flatten(responses));
443
- });
444
- router.post('/v1/wallets/exist', async (req, res) => {
445
- try {
446
- const copayers = req.body.copayers;
447
- if (!copayers || !Array.isArray(copayers)) {
448
- logger_1.logger.info('Invalid request to /v1/wallets/exist - copayers should be an array');
449
- return res.json([]);
450
- }
451
- const storage = server_1.WalletService.getStorage();
452
- const existing = await Promise.all(copayers.map(c => new Promise((resolve) => {
453
- storage.fetchCopayerLookup(c.copayerId, (err, copayer) => {
454
- if (err || !copayer) {
455
- return resolve({ copayerId: c.copayerId, verified: false });
456
- }
457
- const verified = copayer.requestPubKeys.some(pubkey => Utils.verifyMessage(c.copayerId, c.signature, pubkey.key));
458
- return resolve({ copayerId: c.copayerId, verified });
459
- });
460
- })));
461
- return res.json(existing.filter(e => e.verified).map(e => e.copayerId));
462
- }
463
- catch (err) {
464
- return returnError(err, res, req);
465
- }
466
- });
467
- router.get('/v1/wallets/:identifier/', (req, res) => {
468
- getServerWithAuth(req, res, {
469
- onlySupportStaff: true
470
- }, server => {
471
- const opts = {
472
- identifier: req.params['identifier'],
473
- walletCheck: ['1', 'true'].includes(req.query['walletCheck'])
474
- };
475
- server.getWalletFromIdentifier(opts, (err, wallet) => {
476
- if (err)
477
- return returnError(err, res, req);
478
- if (!wallet)
479
- return res.end();
480
- server.walletId = wallet.id;
481
- const opts = { includeExtendedInfo: false };
482
- if (req.query.includeExtendedInfo == '1')
483
- opts.includeExtendedInfo = true;
484
- server.getStatus(opts, (err, status) => {
485
- if (err)
486
- return returnError(err, res, req);
487
- res.json(status);
488
- });
489
- });
490
- });
491
- });
492
- router.get('/v1/preferences/', (req, res) => {
493
- getServerWithAuth(req, res, server => {
494
- server.getPreferences({}, (err, preferences) => {
495
- if (err)
496
- return returnError(err, res, req);
497
- res.json(preferences);
498
- });
499
- });
500
- });
501
- router.put('/v1/preferences', (req, res) => {
502
- getServerWithAuth(req, res, server => {
503
- server.savePreferences(req.body, (err, result) => {
504
- if (err)
505
- return returnError(err, res, req);
506
- res.json(result);
507
- });
508
- });
509
- });
510
- router.get('/v1/txproposals/', (req, res) => {
511
- getServerWithAuth(req, res, server => {
512
- server.getPendingTxs({ noCashAddr: true }, (err, pendings) => {
513
- if (err)
514
- return returnError(err, res, req);
515
- res.json(pendings);
516
- });
517
- });
518
- });
519
- router.get('/v2/txproposals/', (req, res) => {
520
- getServerWithAuth(req, res, server => {
521
- server.getPendingTxs({}, (err, pendings) => {
522
- if (err)
523
- return returnError(err, res, req);
524
- res.json(pendings);
525
- });
526
- });
527
- });
528
- router.post('/v1/txproposals/', (req, res) => {
529
- const err = errordefinitions_1.Errors.UPGRADE_NEEDED;
530
- return returnError(err, res, req);
531
- });
532
- router.post('/v2/txproposals/', (req, res) => {
533
- getServerWithAuth(req, res, server => {
534
- req.body.noCashAddr = true;
535
- req.body.txpVersion = 3;
536
- server.createTx(req.body, (err, txp) => {
537
- if (err)
538
- return returnError(err, res, req);
539
- res.json(txp);
540
- });
541
- });
542
- });
543
- router.post('/v3/txproposals/', (req, res) => {
544
- getServerWithAuth(req, res, server => {
545
- req.body.txpVersion = 3;
546
- server.createTx(req.body, (err, txp) => {
547
- if (err)
548
- return returnError(err, res, req);
549
- res.json(txp);
550
- });
551
- });
552
- });
553
- router.post('/v1/advertisements/', (req, res) => {
554
- getServerWithAuth(req, res, {
555
- onlyMarketingStaff: true
556
- }, server => {
557
- server.createAdvert(req.body, (err, advert) => {
558
- if (err) {
559
- return returnError(err, res, req);
560
- }
561
- if (advert)
562
- res.json(advert);
563
- });
564
- });
565
- });
566
- router.get('/v1/advertisements/', (req, res) => {
567
- let server;
568
- const testing = req.query.testing;
569
- try {
570
- server = getServer(req, res);
571
- }
572
- catch (ex) {
573
- return returnError(ex, res, req);
574
- }
575
- if (testing) {
576
- server.getTestingAdverts(req.body, (err, ads) => {
577
- if (err)
578
- returnError(err, res, req);
579
- res.json(ads);
580
- });
581
- }
582
- else {
583
- SetPublicCache(res, 5 * ONE_MINUTE);
584
- server.getAdverts(req.body, (err, ads) => {
585
- if (err)
586
- returnError(err, res, req);
587
- res.json(ads);
588
- });
589
- }
590
- });
591
- router.get('/v1/advertisements/:adId/', (req, res) => {
592
- let server;
593
- try {
594
- server = getServer(req, res);
595
- }
596
- catch (ex) {
597
- return returnError(ex, res, req);
598
- }
599
- const opts = { adId: req.params['adId'] };
600
- if (req.params['adId']) {
601
- server.getAdvert(opts, (err, ad) => {
602
- if (err)
603
- returnError(err, res, req);
604
- res.json(ad);
605
- });
606
- }
607
- });
608
- router.get('/v1/advertisements/country/:country', (req, res) => {
609
- let server;
610
- const country = req.params['country'];
611
- const opts = { country };
612
- try {
613
- server = getServer(req, res);
614
- }
615
- catch (ex) {
616
- return returnError(ex, res, req);
617
- }
618
- server.getAdvertsByCountry(opts, (err, ads) => {
619
- if (err)
620
- returnError(err, res, req);
621
- res.json(ads);
622
- });
623
- });
624
- router.post('/v1/advertisements/:adId/activate', (req, res) => {
625
- const opts = { adId: req.params['adId'] };
626
- getServerWithAuth(req, res, {
627
- onlyMarketingStaff: true
628
- }, server => {
629
- if (req.params['adId']) {
630
- server.activateAdvert(opts, (err, _ad) => {
631
- if (err)
632
- returnError(err, res, req);
633
- res.json({ advertisementId: opts.adId, message: 'advert activated' });
634
- });
635
- }
636
- });
637
- });
638
- router.post('/v1/advertisements/:adId/deactivate', (req, res) => {
639
- const opts = { adId: req.params['adId'] };
640
- getServerWithAuth(req, res, {
641
- onlyMarketingStaff: true
642
- }, server => {
643
- if (req.params['adId']) {
644
- server.deactivateAdvert(opts, (err, _ad) => {
645
- if (err)
646
- returnError(err, res, req);
647
- res.json({ advertisementId: opts.adId, message: 'advert deactivated' });
648
- });
649
- }
650
- });
651
- });
652
- router.delete('/v1/advertisements/:adId/', (req, res) => {
653
- getServerWithAuth(req, res, {
654
- onlyMarketingStaff: true
655
- }, server => {
656
- req.body.adId = req.params['adId'];
657
- server.removeAdvert(req.body, (err, removedAd) => {
658
- if (err)
659
- returnError(err, res, req);
660
- if (removedAd) {
661
- res.json(removedAd);
662
- }
663
- });
664
- });
665
- });
666
- router.post('/v1/addresses/', (req, res) => {
667
- logDeprecated(req);
668
- getServerWithAuth(req, res, server => {
669
- server.createAddress({
670
- ignoreMaxGap: true
671
- }, (err, address) => {
672
- if (err)
673
- return returnError(err, res, req);
674
- res.json(address);
675
- });
676
- });
677
- });
678
- router.post('/v2/addresses/', (req, res) => {
679
- logDeprecated(req);
680
- getServerWithAuth(req, res, server => {
681
- server.createAddress({
682
- ignoreMaxGap: true
683
- }, (err, address) => {
684
- if (err)
685
- return returnError(err, res, req);
686
- res.json(address);
687
- });
688
- });
689
- });
690
- router.post('/v3/addresses/', (req, res) => {
691
- getServerWithAuth(req, res, server => {
692
- let opts = req.body;
693
- opts = opts || {};
694
- opts.noCashAddr = true;
695
- server.createAddress(opts, (err, address) => {
696
- if (err)
697
- return returnError(err, res, req);
698
- res.json(address);
699
- });
700
- });
701
- });
702
- router.post('/v4/addresses/', (req, res) => {
703
- getServerWithAuth(req, res, server => {
704
- server.createAddress(req.body, (err, address) => {
705
- if (err)
706
- return returnError(err, res, req);
707
- res.json(address);
708
- });
709
- });
710
- });
711
- router.get('/v1/addresses/', (req, res) => {
712
- logDeprecated(req);
713
- req.query.noChange = req.query.noChange ?? '1';
714
- req.redirectedUrl = req.url;
715
- req.url = '/v2/addresses?' + Object.entries(req.query).map(([key, value]) => `${key}=${value}`).join('&');
716
- router.handle(req, res);
717
- });
718
- router.get('/v2/addresses/', (req, res) => {
719
- getServerWithAuth(req, res, server => {
720
- const opts = {};
721
- if (req.query.limit)
722
- opts.limit = +req.query.limit;
723
- if (req.query.skip)
724
- opts.skip = +req.query.skip;
725
- opts.reverse = req.query.reverse == '1';
726
- if (req.query.addresses) {
727
- opts.addresses = Array.isArray(req.query.addresses)
728
- ? req.query.addresses
729
- : req.query.addresses.split(',');
730
- }
731
- opts.noChange = Utils.castToBool(req.query.noChange);
732
- server.getAddresses(opts, (err, addresses) => {
733
- if (err)
734
- return returnError(err, res, req);
735
- res.json(addresses);
736
- });
737
- });
738
- });
739
- router.get('/v1/balance/', (req, res) => {
740
- getServerWithAuth(req, res, server => {
741
- const opts = {};
742
- if (req.query.coin)
743
- opts.coin = req.query.coin;
744
- if (req.query.twoStep == '1')
745
- opts.twoStep = true;
746
- if (req.query.tokenAddress)
747
- opts.tokenAddress = req.query.tokenAddress;
748
- if (req.query.multisigContractAddress)
749
- opts.multisigContractAddress = req.query.multisigContractAddress;
750
- server.getBalance(opts, (err, balance) => {
751
- if (err)
752
- return returnError(err, res, req);
753
- res.json(balance);
754
- });
755
- });
756
- });
757
- let estimateFeeLimiter;
758
- if (Defaults.RateLimit.estimateFee && !opts.ignoreRateLimiter) {
759
- logger_1.logger.info('Limiting estimate fee per IP: %o req/h', ((Defaults.RateLimit.estimateFee.max / Defaults.RateLimit.estimateFee.windowMs) * 60 * 60 * 1000).toFixed(2));
760
- estimateFeeLimiter = new express_rate_limit_1.default(Defaults.RateLimit.estimateFee);
761
- }
762
- else {
763
- estimateFeeLimiter = (req, res, next) => {
764
- next();
765
- };
766
- }
767
- router.get('/v1/feelevels/', estimateFeeLimiter, (req, res) => {
768
- SetPublicCache(res, 1 * ONE_MINUTE);
769
- logDeprecated(req);
770
- const opts = {};
771
- if (req.query.network)
772
- opts.network = req.query.network;
773
- let server;
774
- try {
775
- server = getServer(req, res);
776
- }
777
- catch (ex) {
778
- return returnError(ex, res, req);
779
- }
780
- server.getFeeLevels(opts, (err, feeLevels) => {
781
- if (err)
782
- return returnError(err, res, req);
783
- lodash_1.default.each(feeLevels, feeLevel => {
784
- feeLevel.feePerKB = feeLevel.feePerKb;
785
- delete feeLevel.feePerKb;
786
- });
787
- res.json(feeLevels);
788
- });
789
- });
790
- router.get('/v2/feelevels/', (req, res) => {
791
- const opts = {};
792
- SetPublicCache(res, 1 * ONE_MINUTE);
793
- if (req.query.coin)
794
- opts.coin = req.query.coin;
795
- if (req.query.chain || req.query.coin)
796
- opts.chain = (req.query.chain || req.query.coin);
797
- if (req.query.network)
798
- opts.network = req.query.network;
799
- let server;
800
- try {
801
- server = getServer(req, res);
802
- }
803
- catch (ex) {
804
- return returnError(ex, res, req);
805
- }
806
- server.getFeeLevels(opts, (err, feeLevels) => {
807
- if (err)
808
- return returnError(err, res, req);
809
- res.json(feeLevels);
810
- });
811
- });
812
- router.post('/v3/estimateGas/', (req, res) => {
813
- getServerWithAuth(req, res, async (server) => {
814
- try {
815
- const gasLimit = await server.estimateGas(req.body);
816
- res.json(gasLimit);
817
- }
818
- catch (err) {
819
- returnError(err, res, req);
820
- }
821
- });
822
- });
823
- router.post('/v1/ethmultisig/', (req, res) => {
824
- getServerWithAuth(req, res, async (server) => {
825
- try {
826
- const multisigContractInstantiationInfo = await server.getMultisigContractInstantiationInfo(req.body);
827
- res.json(multisigContractInstantiationInfo);
828
- }
829
- catch (err) {
830
- returnError(err, res, req);
831
- }
832
- });
833
- });
834
- router.post('/v1/ethmultisig/info', (req, res) => {
835
- getServerWithAuth(req, res, async (server) => {
836
- try {
837
- const multisigContractInfo = await server.getMultisigContractInfo(req.body);
838
- res.json(multisigContractInfo);
839
- }
840
- catch (err) {
841
- returnError(err, res, req);
842
- }
843
- });
844
- });
845
- router.post('/v1/multisig/', (req, res) => {
846
- getServerWithAuth(req, res, async (server) => {
847
- try {
848
- const multisigContractInstantiationInfo = await server.getMultisigContractInstantiationInfo(req.body);
849
- res.json(multisigContractInstantiationInfo);
850
- }
851
- catch (err) {
852
- returnError(err, res, req);
853
- }
854
- });
855
- });
856
- router.post('/v1/multisig/info', (req, res) => {
857
- getServerWithAuth(req, res, async (server) => {
858
- try {
859
- const multisigContractInfo = await server.getMultisigContractInfo(req.body);
860
- res.json(multisigContractInfo);
861
- }
862
- catch (err) {
863
- returnError(err, res, req);
864
- }
865
- });
866
- });
867
- router.post('/v1/token/info', (req, res) => {
868
- getServerWithAuth(req, res, async (server) => {
869
- try {
870
- const tokenContractInfo = await server.getTokenContractInfo(req.body);
871
- res.json(tokenContractInfo);
872
- }
873
- catch (err) {
874
- returnError(err, res, req);
875
- }
876
- });
877
- });
878
- router.post('/v1/token/allowance', async (req, res) => {
879
- try {
880
- const server = getServer(req, res);
881
- const allowance = await server.getTokenAllowance(req.body);
882
- res.json(allowance);
883
- }
884
- catch (err) {
885
- returnError(err, res, req);
886
- }
887
- });
888
- router.get('/v1/sendmaxinfo/', (req, res) => {
889
- getServerWithAuth(req, res, server => {
890
- const q = req.query;
891
- const opts = {};
892
- if (q.feePerKb)
893
- opts.feePerKb = +q.feePerKb;
894
- if (q.feeLevel)
895
- opts.feeLevel = Number(q.feeLevel);
896
- if (q.excludeUnconfirmedUtxos == '1')
897
- opts.excludeUnconfirmedUtxos = true;
898
- if (q.returnInputs == '1')
899
- opts.returnInputs = true;
900
- server.getSendMaxInfo(opts, (err, info) => {
901
- if (err)
902
- return returnError(err, res, req);
903
- res.json(info);
904
- });
905
- });
906
- });
907
- router.get('/v1/utxos/', (req, res) => {
908
- const opts = {};
909
- const addresses = req.query.addresses;
910
- if (addresses && lodash_1.default.isString(addresses))
911
- opts.addresses = req.query.addresses.split(',');
912
- getServerWithAuth(req, res, server => {
913
- server.getUtxos(opts, (err, utxos) => {
914
- if (err)
915
- return returnError(err, res, req);
916
- res.json(utxos);
917
- });
918
- });
919
- });
920
- router.get('/v1/txcoins/', (req, res) => {
921
- const txId = req.query.txId;
922
- getServerWithAuth(req, res, server => {
923
- server.getCoinsForTx({ txId }, (err, coins) => {
924
- if (err)
925
- return returnError(err, res, req);
926
- res.json(coins);
927
- });
928
- });
929
- });
930
- router.post('/v1/broadcast_raw/', (req, res) => {
931
- getServerWithAuth(req, res, server => {
932
- server.broadcastRawTx(req.body, (err, txid) => {
933
- if (err)
934
- return returnError(err, res, req);
935
- res.json(txid);
936
- res.end();
937
- });
938
- });
939
- });
940
- router.post('/v1/txproposals/:id/signatures/', (req, res) => {
941
- getServerWithAuth(req, res, server => {
942
- req.body.maxTxpVersion = 3;
943
- req.body.txProposalId = req.params['id'];
944
- server.signTx(req.body, (err, txp) => {
945
- if (err)
946
- return returnError(err, res, req);
947
- res.json(txp);
948
- res.end();
949
- });
950
- });
951
- });
952
- router.post('/v2/txproposals/:id/signatures/', (req, res) => {
953
- getServerWithAuth(req, res, server => {
954
- req.body.txProposalId = req.params['id'];
955
- req.body.maxTxpVersion = 3;
956
- req.body.supportBchSchnorr = true;
957
- server.signTx(req.body, (err, txp) => {
958
- if (err)
959
- return returnError(err, res, req);
960
- res.json(txp);
961
- res.end();
962
- });
963
- });
964
- });
965
- router.post('/v1/txproposals/:id/prepare/', (req, res) => {
966
- getServerWithAuth(req, res, server => {
967
- req.body.txProposalId = req.params['id'];
968
- server.prepareTx(req.body, (err, txp) => {
969
- if (err)
970
- return returnError(err, res, req);
971
- res.json(txp);
972
- res.end();
973
- });
974
- });
975
- });
976
- router.post('/v1/txproposals/:id/publish/', (req, res) => {
977
- getServerWithAuth(req, res, server => {
978
- req.body.txProposalId = req.params['id'];
979
- req.body.noCashAddr = true;
980
- server.publishTx(req.body, (err, txp) => {
981
- if (err)
982
- return returnError(err, res, req);
983
- res.json(txp);
984
- res.end();
985
- });
986
- });
987
- });
988
- router.post('/v2/txproposals/:id/publish/', (req, res) => {
989
- getServerWithAuth(req, res, server => {
990
- req.body.txProposalId = req.params['id'];
991
- server.publishTx(req.body, (err, txp) => {
992
- if (err)
993
- return returnError(err, res, req);
994
- res.json(txp);
995
- res.end();
996
- });
997
- });
998
- });
999
- router.post('/v1/txproposals/:id/broadcast/', (req, res) => {
1000
- getServerWithAuth(req, res, server => {
1001
- req.body.txProposalId = req.params['id'];
1002
- server.broadcastTx(req.body, (err, txp) => {
1003
- if (err)
1004
- return returnError(err, res, req);
1005
- res.json(txp);
1006
- res.end();
1007
- });
1008
- });
1009
- });
1010
- router.post('/v1/txproposals/:id/rejections', (req, res) => {
1011
- getServerWithAuth(req, res, server => {
1012
- req.body.txProposalId = req.params['id'];
1013
- server.rejectTx(req.body, (err, txp) => {
1014
- if (err)
1015
- return returnError(err, res, req);
1016
- res.json(txp);
1017
- res.end();
1018
- });
1019
- });
1020
- });
1021
- router.delete('/v1/txproposals/:id/', (req, res) => {
1022
- getServerWithAuth(req, res, server => {
1023
- req.body.txProposalId = req.params['id'];
1024
- server.removePendingTx(req.body, err => {
1025
- if (err)
1026
- return returnError(err, res, req);
1027
- res.json({
1028
- success: true
1029
- });
1030
- res.end();
1031
- });
1032
- });
1033
- });
1034
- router.get('/v1/txproposals/:id/', (req, res) => {
1035
- getServerWithAuth(req, res, server => {
1036
- req.body.txProposalId = req.params['id'];
1037
- server.getTx(req.body, (err, tx) => {
1038
- if (err)
1039
- return returnError(err, res, req);
1040
- res.json(tx);
1041
- res.end();
1042
- });
1043
- });
1044
- });
1045
- router.get('/v1/txproposalsbyhash/:id/', (req, res) => {
1046
- getServerWithAuth(req, res, server => {
1047
- req.body.txid = req.params['id'];
1048
- server.getTxByHash(req.body, (err, tx) => {
1049
- if (err)
1050
- return returnError(err, res, req);
1051
- res.json(tx);
1052
- res.end();
1053
- });
1054
- });
1055
- });
1056
- router.get('/v1/txhistory/', (req, res) => {
1057
- getServerWithAuth(req, res, server => {
1058
- const opts = {};
1059
- if (req.query.skip)
1060
- opts.skip = +req.query.skip;
1061
- if (req.query.limit)
1062
- opts.limit = +req.query.limit;
1063
- if (req.query.reverse == '1')
1064
- opts.reverse = true;
1065
- if (req.query.tokenAddress)
1066
- opts.tokenAddress = req.query.tokenAddress;
1067
- if (req.query.multisigContractAddress)
1068
- opts.multisigContractAddress = req.query.multisigContractAddress;
1069
- if (req.query.includeExtendedInfo == '1')
1070
- opts.includeExtendedInfo = true;
1071
- server.getTxHistory(opts, (err, txs) => {
1072
- if (err)
1073
- return returnError(err, res, req);
1074
- res.json(txs);
1075
- res.end();
1076
- });
1077
- });
1078
- });
1079
- router.post('/v1/addresses/scan/', (req, res) => {
1080
- getServerWithAuth(req, res, server => {
1081
- req.body = req.body || {};
1082
- req.body.startIdx = server.copayerIsSupportStaff ? Number(req.body.startIdx) : null;
1083
- server.startScan(req.body, (err, started) => {
1084
- if (err)
1085
- return returnError(err, res, req);
1086
- res.json(started);
1087
- res.end();
1088
- });
1089
- });
1090
- });
1091
- router.get('/v1/stats/', (req, res) => {
1092
- SetPublicCache(res, 1 * ONE_MINUTE);
1093
- const opts = {};
1094
- if (req.query.network)
1095
- opts.network = req.query.network;
1096
- if (req.query.coin)
1097
- opts.coin = req.query.coin;
1098
- if (req.query.from)
1099
- opts.from = req.query.from;
1100
- if (req.query.to)
1101
- opts.to = req.query.to;
1102
- const stats = new stats_1.Stats(opts);
1103
- stats.run((err, data) => {
1104
- if (err)
1105
- return returnError(err, res, req);
1106
- res.json(data);
1107
- res.end();
1108
- });
1109
- });
1110
- router.get('/v1/version/', (req, res) => {
1111
- SetPublicCache(res, 1 * ONE_MINUTE);
1112
- res.json({
1113
- serviceVersion: server_1.WalletService.getServiceVersion()
1114
- });
1115
- res.end();
1116
- });
1117
- router.post('/v1/login/', (req, res) => {
1118
- getServerWithAuth(req, res, server => {
1119
- server.login({}, (err, session) => {
1120
- if (err)
1121
- return returnError(err, res, req);
1122
- res.json(session);
1123
- });
1124
- });
1125
- });
1126
- router.post('/v1/logout/', (req, res) => {
1127
- getServerWithAuth(req, res, server => {
1128
- server.logout({}, err => {
1129
- if (err)
1130
- return returnError(err, res, req);
1131
- res.end();
1132
- });
1133
- });
1134
- });
1135
- router.get('/v1/notifications/', (req, res) => {
1136
- getServerWithAuth(req, res, {
1137
- allowSession: true
1138
- }, server => {
1139
- const timeSpan = req.query.timeSpan
1140
- ? Math.min(+req.query.timeSpan || 0, Defaults.MAX_NOTIFICATIONS_TIMESPAN)
1141
- : Defaults.NOTIFICATIONS_TIMESPAN;
1142
- const opts = {
1143
- minTs: +Date.now() - timeSpan * 1000,
1144
- notificationId: req.query.notificationId
1145
- };
1146
- server.getNotifications(opts, (err, notifications) => {
1147
- if (err)
1148
- return returnError(err, res, req);
1149
- res.json(notifications);
1150
- });
1151
- });
1152
- });
1153
- router.get('/v1/txnotes/:txid', (req, res) => {
1154
- getServerWithAuth(req, res, server => {
1155
- const opts = {
1156
- txid: req.params['txid']
1157
- };
1158
- server.getTxNote(opts, (err, note) => {
1159
- if (err)
1160
- return returnError(err, res, req);
1161
- res.json(note);
1162
- });
1163
- });
1164
- });
1165
- router.put('/v1/txnotes/:txid/', (req, res) => {
1166
- req.body.txid = req.params['txid'];
1167
- getServerWithAuth(req, res, server => {
1168
- server.editTxNote(req.body, (err, note) => {
1169
- if (err)
1170
- return returnError(err, res, req);
1171
- res.json(note);
1172
- });
1173
- });
1174
- });
1175
- router.get('/v1/txnotes/', (req, res) => {
1176
- getServerWithAuth(req, res, server => {
1177
- const opts = {};
1178
- if (req.query.minTs && lodash_1.default.isNumber(+req.query.minTs)) {
1179
- opts.minTs = +req.query.minTs;
1180
- }
1181
- server.getTxNotes(opts, (err, notes) => {
1182
- if (err)
1183
- return returnError(err, res, req);
1184
- res.json(notes);
1185
- });
1186
- });
1187
- });
1188
- router.get('/v1/nonce/:address', (req, res) => {
1189
- getServerWithAuth(req, res, async (server) => {
1190
- const opts = {
1191
- coin: req.query.coin || 'eth',
1192
- chain: req.query.chain,
1193
- network: req.query.network || 'livenet',
1194
- address: req.params['address']
1195
- };
1196
- try {
1197
- const nonce = await server.getNonce(opts);
1198
- res.json(nonce);
1199
- }
1200
- catch (err) {
1201
- returnError(err, res, req);
1202
- }
1203
- });
1204
- });
1205
- router.post('/v1/clearcache/', (req, res) => {
1206
- getServerWithAuth(req, res, server => {
1207
- const opts = req.query;
1208
- server.clearWalletCache(opts).then(val => {
1209
- if (val) {
1210
- res.sendStatus(200);
1211
- }
1212
- else {
1213
- res.sendStatus(500);
1214
- }
1215
- });
1216
- });
1217
- });
1218
- router.get('/v1/fiatrates/:code/', (req, res) => {
1219
- SetPublicCache(res, 5 * ONE_MINUTE);
1220
- let server;
1221
- const opts = {
1222
- code: req.params['code'],
1223
- coin: req.query.coin || 'btc',
1224
- ts: req.query.ts ? +req.query.ts : null
1225
- };
1226
- try {
1227
- server = getServer(req, res);
1228
- }
1229
- catch (ex) {
1230
- return returnError(ex, res, req);
1231
- }
1232
- server.getFiatRate(opts, (err, rates) => {
1233
- if (err)
1234
- return returnError(err, res, req);
1235
- res.json(rates);
1236
- });
1237
- });
1238
- router.get('/v2/fiatrates/:code/', (req, res) => {
1239
- SetPublicCache(res, 5 * ONE_MINUTE);
1240
- let server;
1241
- const opts = {
1242
- code: req.params['code'],
1243
- ts: req.query.ts ? +req.query.ts : null
1244
- };
1245
- try {
1246
- server = getServer(req, res);
1247
- }
1248
- catch (ex) {
1249
- return returnError(ex, res, req);
1250
- }
1251
- server.getHistoricalRates(opts, (err, rates) => {
1252
- if (err)
1253
- return returnError(err, res, req);
1254
- res.json(rates);
1255
- });
1256
- });
1257
- router.get('/v3/fiatrates/', (req, res) => {
1258
- SetPublicCache(res, 5 * ONE_MINUTE);
1259
- let server;
1260
- const opts = {
1261
- code: req.query.code || null,
1262
- ts: req.query.ts ? +req.query.ts : null
1263
- };
1264
- try {
1265
- server = getServer(req, res);
1266
- }
1267
- catch (ex) {
1268
- return returnError(ex, res, req);
1269
- }
1270
- server.getFiatRates(opts, (err, rates) => {
1271
- if (err)
1272
- return returnError(err, res, req);
1273
- res.json(rates);
1274
- });
1275
- });
1276
- router.get('/v3/fiatrates/:coin/', (req, res) => {
1277
- SetPublicCache(res, 5 * ONE_MINUTE);
1278
- let server;
1279
- const opts = {
1280
- coin: req.params['coin'],
1281
- code: req.query.code || null,
1282
- ts: req.query.ts ? +req.query.ts : null
1283
- };
1284
- try {
1285
- server = getServer(req, res);
1286
- }
1287
- catch (ex) {
1288
- return returnError(ex, res, req);
1289
- }
1290
- server.getFiatRatesByCoin(opts, (err, rates) => {
1291
- if (err)
1292
- return returnError(err, res, req);
1293
- res.json(rates);
1294
- });
1295
- });
1296
- router.get('/v4/fiatrates/:code/', (req, res) => {
1297
- SetPublicCache(res, 5 * ONE_MINUTE);
1298
- let server;
1299
- try {
1300
- server = getServer(req, res);
1301
- }
1302
- catch (ex) {
1303
- return returnError(ex, res, req);
1304
- }
1305
- server.externalServices.coinGecko.coinGeckoGetFiatRates(req)
1306
- .then(response => {
1307
- res.json(response);
1308
- })
1309
- .catch(err => {
1310
- return returnError(err ?? 'unknown', res, req);
1311
- });
1312
- });
1313
- router.post('/v1/pushnotifications/subscriptions/', (req, res) => {
1314
- getServerWithAuth(req, res, server => {
1315
- server.pushNotificationsSubscribe(req.body, (err, response) => {
1316
- if (err)
1317
- return returnError(err, res, req);
1318
- res.json(response);
1319
- });
1320
- });
1321
- });
1322
- router.post('/v2/pushnotifications/subscriptions/', (req, res) => {
1323
- getServerWithAuth(req, res, server => {
1324
- server.pushNotificationsBrazeSubscribe(req.body, (err, response) => {
1325
- if (err)
1326
- return returnError(err, res, req);
1327
- res.json(response);
1328
- });
1329
- });
1330
- });
1331
- router.delete('/v1/pushnotifications/subscriptions/', (req, res) => {
1332
- logDeprecated(req);
1333
- getServerWithAuth(req, res, server => {
1334
- server.pushNotificationsUnsubscribe({
1335
- token: 'dummy'
1336
- }, (err, response) => {
1337
- if (err)
1338
- return returnError(err, res, req);
1339
- res.json(response);
1340
- });
1341
- });
1342
- });
1343
- router.delete('/v2/pushnotifications/subscriptions/:token', (req, res) => {
1344
- const opts = {
1345
- token: req.params['token']
1346
- };
1347
- getServerWithAuth(req, res, server => {
1348
- server.pushNotificationsUnsubscribe(opts, (err, response) => {
1349
- if (err)
1350
- return returnError(err, res, req);
1351
- res.json(response);
1352
- });
1353
- });
1354
- });
1355
- router.delete('/v3/pushnotifications/subscriptions/:externalUserId', (req, res) => {
1356
- const opts = {
1357
- externalUserId: req.params['externalUserId']
1358
- };
1359
- getServerWithAuth(req, res, server => {
1360
- server.pushNotificationsBrazeUnsubscribe(opts, (err, response) => {
1361
- if (err)
1362
- return returnError(err, res, req);
1363
- res.json(response);
1364
- });
1365
- });
1366
- });
1367
- router.post('/v1/txconfirmations/', (req, res) => {
1368
- getServerWithAuth(req, res, server => {
1369
- server.txConfirmationSubscribe(req.body, (err, response) => {
1370
- if (err)
1371
- return returnError(err, res, req);
1372
- res.json(response);
1373
- });
1374
- });
1375
- });
1376
- router.delete('/v1/txconfirmations/:txid', (req, res) => {
1377
- const opts = {
1378
- txid: req.params['txid']
1379
- };
1380
- getServerWithAuth(req, res, server => {
1381
- server.txConfirmationUnsubscribe(opts, (err, response) => {
1382
- if (err)
1383
- return returnError(err, res, req);
1384
- res.json(response);
1385
- });
1386
- });
1387
- });
1388
- router.get('/v1/services', (req, res) => {
1389
- let server;
1390
- try {
1391
- server = getServer(req, res);
1392
- }
1393
- catch (ex) {
1394
- return returnError(ex, res, req);
1395
- }
1396
- const opts = req.query;
1397
- server.getServicesData(opts, (err, response) => {
1398
- if (err)
1399
- return returnError(err, res, req);
1400
- res.json(response);
1401
- });
1402
- });
1403
- router.post('/v1/service/checkAvailability', (req, res) => {
1404
- let server, response;
1405
- try {
1406
- server = getServer(req, res);
1407
- response = server.checkServiceAvailability(req);
1408
- return res.json(response);
1409
- }
1410
- catch (ex) {
1411
- return returnError(ex, res, req);
1412
- }
1413
- });
1414
- router.post('/v1/service/banxa/getCoins', async (req, res) => {
1415
- let server, response;
1416
- try {
1417
- server = getServer(req, res);
1418
- response = await server.externalServices.banxa.banxaGetCoins(req);
1419
- return res.json(response);
1420
- }
1421
- catch (ex) {
1422
- return returnError(ex, res, req);
1423
- }
1424
- });
1425
- router.post('/v1/service/banxa/paymentMethods', async (req, res) => {
1426
- let server, response;
1427
- try {
1428
- server = getServer(req, res);
1429
- response = await server.externalServices.banxa.banxaGetPaymentMethods(req);
1430
- return res.json(response);
1431
- }
1432
- catch (ex) {
1433
- return returnError(ex, res, req);
1434
- }
1435
- });
1436
- router.post('/v1/service/banxa/quote', (req, res) => {
1437
- getServerWithAuth(req, res, async (server) => {
1438
- let response;
1439
- try {
1440
- response = await server.externalServices.banxa.banxaGetQuote(req);
1441
- return res.json(response);
1442
- }
1443
- catch (ex) {
1444
- return returnError(ex, res, req);
1445
- }
1446
- });
1447
- });
1448
- router.post('/v1/service/banxa/createOrder', (req, res) => {
1449
- getServerWithAuth(req, res, async (server) => {
1450
- let response;
1451
- try {
1452
- response = await server.externalServices.banxa.banxaCreateOrder(req);
1453
- return res.json(response);
1454
- }
1455
- catch (ex) {
1456
- return returnError(ex, res, req);
1457
- }
1458
- });
1459
- });
1460
- router.post('/v1/service/banxa/getOrder', async (req, res) => {
1461
- let server, response;
1462
- try {
1463
- server = getServer(req, res);
1464
- response = await server.externalServices.banxa.banxaGetOrder(req);
1465
- return res.json(response);
1466
- }
1467
- catch (ex) {
1468
- return returnError(ex, res, req);
1469
- }
1470
- });
1471
- router.post('/v1/service/moonpay/getCurrencies', async (req, res) => {
1472
- let server, response;
1473
- try {
1474
- server = getServer(req, res);
1475
- response = await server.externalServices.moonpay.moonpayGetCurrencies(req);
1476
- return res.json(response);
1477
- }
1478
- catch (ex) {
1479
- return returnError(ex, res, req);
1480
- }
1481
- });
1482
- router.post('/v1/service/moonpay/quote', (req, res) => {
1483
- getServerWithAuth(req, res, async (server) => {
1484
- let response;
1485
- try {
1486
- response = await server.externalServices.moonpay.moonpayGetQuote(req);
1487
- return res.json(response);
1488
- }
1489
- catch (ex) {
1490
- return returnError(ex, res, req);
1491
- }
1492
- });
1493
- });
1494
- router.post('/v1/service/moonpay/sellQuote', (req, res) => {
1495
- getServerWithAuth(req, res, async (server) => {
1496
- let response;
1497
- try {
1498
- response = await server.externalServices.moonpay.moonpayGetSellQuote(req);
1499
- return res.json(response);
1500
- }
1501
- catch (ex) {
1502
- return returnError(ex, res, req);
1503
- }
1504
- });
1505
- });
1506
- router.post('/v1/service/moonpay/currencyLimits', async (req, res) => {
1507
- let server, response;
1508
- try {
1509
- server = getServer(req, res);
1510
- response = await server.externalServices.moonpay.moonpayGetCurrencyLimits(req);
1511
- return res.json(response);
1512
- }
1513
- catch (ex) {
1514
- return returnError(ex, res, req);
1515
- }
1516
- });
1517
- router.post('/v1/service/moonpay/signedPaymentUrl', (req, res) => {
1518
- getServerWithAuth(req, res, server => {
1519
- let response;
1520
- try {
1521
- response = server.externalServices.moonpay.moonpayGetSignedPaymentUrl(req);
1522
- return res.json(response);
1523
- }
1524
- catch (ex) {
1525
- return returnError(ex, res, req);
1526
- }
1527
- });
1528
- });
1529
- router.post('/v1/service/moonpay/sellSignedPaymentUrl', (req, res) => {
1530
- getServerWithAuth(req, res, async (server) => {
1531
- let response;
1532
- try {
1533
- response = await server.externalServices.moonpay.moonpayGetSellSignedPaymentUrl(req);
1534
- return res.json(response);
1535
- }
1536
- catch (ex) {
1537
- return returnError(ex, res, req);
1538
- }
1539
- });
1540
- });
1541
- router.post('/v1/service/moonpay/transactionDetails', async (req, res) => {
1542
- let server, response;
1543
- try {
1544
- server = getServer(req, res);
1545
- response = await server.externalServices.moonpay.moonpayGetTransactionDetails(req);
1546
- return res.json(response);
1547
- }
1548
- catch (ex) {
1549
- return returnError(ex, res, req);
1550
- }
1551
- });
1552
- router.post('/v1/service/moonpay/sellTransactionDetails', async (req, res) => {
1553
- let server, response;
1554
- try {
1555
- server = getServer(req, res);
1556
- response = await server.externalServices.moonpay.moonpayGetSellTransactionDetails(req);
1557
- return res.json(response);
1558
- }
1559
- catch (ex) {
1560
- return returnError(ex, res, req);
1561
- }
1562
- });
1563
- router.post('/v1/service/moonpay/cancelSellTransaction', (req, res) => {
1564
- getServerWithAuth(req, res, async (server) => {
1565
- let response;
1566
- try {
1567
- response = await server.externalServices.moonpay.moonpayCancelSellTransaction(req);
1568
- return res.json(response);
1569
- }
1570
- catch (ex) {
1571
- return returnError(ex, res, req);
1572
- }
1573
- });
1574
- });
1575
- router.post('/v1/service/moonpay/accountDetails', async (req, res) => {
1576
- let server, response;
1577
- try {
1578
- server = getServer(req, res);
1579
- response = await server.externalServices.moonpay.moonpayGetAccountDetails(req);
1580
- return res.json(response);
1581
- }
1582
- catch (ex) {
1583
- return returnError(ex, res, req);
1584
- }
1585
- });
1586
- router.post('/v1/service/ramp/quote', (req, res) => {
1587
- getServerWithAuth(req, res, async (server) => {
1588
- let response;
1589
- try {
1590
- response = await server.externalServices.ramp.rampGetQuote(req);
1591
- return res.json(response);
1592
- }
1593
- catch (ex) {
1594
- return returnError(ex, res, req);
1595
- }
1596
- });
1597
- });
1598
- router.post('/v1/service/ramp/sellQuote', (req, res) => {
1599
- getServerWithAuth(req, res, async (server) => {
1600
- let response;
1601
- try {
1602
- response = await server.externalServices.ramp.rampGetSellQuote(req);
1603
- return res.json(response);
1604
- }
1605
- catch (ex) {
1606
- return returnError(ex, res, req);
1607
- }
1608
- });
1609
- });
1610
- router.post('/v1/service/ramp/signedPaymentUrl', (req, res) => {
1611
- getServerWithAuth(req, res, async (server) => {
1612
- let response;
1613
- try {
1614
- response = await server.externalServices.ramp.rampGetSignedPaymentUrl(req);
1615
- return res.json(response);
1616
- }
1617
- catch (ex) {
1618
- return returnError(ex, res, req);
1619
- }
1620
- });
1621
- });
1622
- router.post('/v1/service/ramp/assets', async (req, res) => {
1623
- let server, response;
1624
- try {
1625
- server = getServer(req, res);
1626
- response = await server.externalServices.ramp.rampGetAssets(req);
1627
- return res.json(response);
1628
- }
1629
- catch (ex) {
1630
- return returnError(ex, res, req);
1631
- }
1632
- });
1633
- router.post('/v1/service/ramp/sellTransactionDetails', async (req, res) => {
1634
- let server, response;
1635
- try {
1636
- server = getServer(req, res);
1637
- response = await server.externalServices.ramp.rampGetSellTransactionDetails(req);
1638
- return res.json(response);
1639
- }
1640
- catch (ex) {
1641
- return returnError(ex, res, req);
1642
- }
1643
- });
1644
- router.post('/v1/service/sardine/quote', (req, res) => {
1645
- getServerWithAuth(req, res, server => {
1646
- server.externalServices.sardine
1647
- .sardineGetQuote(req)
1648
- .then(response => {
1649
- res.json(response);
1650
- })
1651
- .catch(err => {
1652
- return returnError(err ?? 'unknown', res, req);
1653
- });
1654
- });
1655
- });
1656
- router.post('/v1/service/sardine/getToken', (req, res) => {
1657
- getServerWithAuth(req, res, server => {
1658
- server.externalServices.sardine
1659
- .sardineGetToken(req)
1660
- .then(response => {
1661
- res.json(response);
1662
- })
1663
- .catch(err => {
1664
- return returnError(err ?? 'unknown', res, req);
1665
- });
1666
- });
1667
- });
1668
- router.post('/v1/service/sardine/getSupportedTokens', async (req, res) => {
1669
- let server, response;
1670
- try {
1671
- server = getServer(req, res);
1672
- response = await server.externalServices.sardine.sardineGetSupportedTokens(req);
1673
- return res.json(response);
1674
- }
1675
- catch (ex) {
1676
- return returnError(ex, res, req);
1677
- }
1678
- });
1679
- router.post('/v1/service/sardine/currencyLimits', (req, res) => {
1680
- let server;
1681
- try {
1682
- server = getServer(req, res);
1683
- }
1684
- catch (ex) {
1685
- return returnError(ex, res, req);
1686
- }
1687
- server.externalServices.sardine
1688
- .sardineGetCurrencyLimits(req)
1689
- .then(response => {
1690
- res.json(response);
1691
- })
1692
- .catch(err => {
1693
- return returnError(err ?? 'unknown', res, req);
1694
- });
1695
- });
1696
- router.post('/v1/service/sardine/ordersDetails', (req, res) => {
1697
- let server;
1698
- try {
1699
- server = getServer(req, res);
1700
- }
1701
- catch (ex) {
1702
- return returnError(ex, res, req);
1703
- }
1704
- server.externalServices.sardine
1705
- .sardineGetOrdersDetails(req)
1706
- .then(response => {
1707
- res.json(response);
1708
- })
1709
- .catch(err => {
1710
- return returnError(err ?? 'unknown', res, req);
1711
- });
1712
- });
1713
- router.post('/v1/service/simplex/getCurrencies', (req, res) => {
1714
- let server;
1715
- try {
1716
- server = getServer(req, res);
1717
- }
1718
- catch (ex) {
1719
- return returnError(ex, res, req);
1720
- }
1721
- server.externalServices.simplex
1722
- .simplexGetCurrencies(req)
1723
- .then(response => {
1724
- res.json(response);
1725
- })
1726
- .catch(err => {
1727
- return returnError(err ?? 'unknown', res, req);
1728
- });
1729
- });
1730
- router.post('/v1/service/simplex/quote', (req, res) => {
1731
- getServerWithAuth(req, res, server => {
1732
- server.externalServices.simplex
1733
- .simplexGetQuote(req)
1734
- .then(response => {
1735
- res.json(response);
1736
- })
1737
- .catch(err => {
1738
- return returnError(err ?? 'unknown', res, req);
1739
- });
1740
- });
1741
- });
1742
- router.post('/v1/service/simplex/sellQuote', (req, res) => {
1743
- getServerWithAuth(req, res, server => {
1744
- server.externalServices.simplex
1745
- .simplexGetSellQuote(req)
1746
- .then(response => {
1747
- res.json(response);
1748
- })
1749
- .catch(err => {
1750
- return returnError(err ?? 'unknown', res, req);
1751
- });
1752
- });
1753
- });
1754
- router.post('/v1/service/simplex/paymentRequest', (req, res) => {
1755
- getServerWithAuth(req, res, server => {
1756
- server.externalServices.simplex
1757
- .simplexPaymentRequest(req)
1758
- .then(response => {
1759
- res.json(response);
1760
- })
1761
- .catch(err => {
1762
- return returnError(err ?? 'unknown', res, req);
1763
- });
1764
- });
1765
- });
1766
- router.post('/v1/service/simplex/sellPaymentRequest', (req, res) => {
1767
- getServerWithAuth(req, res, server => {
1768
- server.externalServices.simplex
1769
- .simplexSellPaymentRequest(req)
1770
- .then(response => {
1771
- res.json(response);
1772
- })
1773
- .catch(err => {
1774
- return returnError(err ?? 'unknown', res, req);
1775
- });
1776
- });
1777
- });
1778
- router.get('/v1/service/simplex/events', (req, res) => {
1779
- getServerWithAuth(req, res, server => {
1780
- const opts = { env: req.query.env };
1781
- server.externalServices.simplex
1782
- .simplexGetEvents(opts)
1783
- .then(response => {
1784
- res.json(response);
1785
- })
1786
- .catch(err => {
1787
- return returnError(err ?? 'unknown', res, req);
1788
- });
1789
- });
1790
- });
1791
- router.post('/v1/service/thorswap/supportedChains', (req, res) => {
1792
- let server;
1793
- try {
1794
- server = getServer(req, res);
1795
- }
1796
- catch (ex) {
1797
- return returnError(ex, res, req);
1798
- }
1799
- server.externalServices.thorswap
1800
- .thorswapGetSupportedChains(req)
1801
- .then(response => {
1802
- res.json(response);
1803
- })
1804
- .catch(err => {
1805
- return returnError(err ?? 'unknown', res, req);
1806
- });
1807
- });
1808
- router.post('/v1/service/thorswap/cryptoCurrencies', (req, res) => {
1809
- let server;
1810
- try {
1811
- server = getServer(req, res);
1812
- }
1813
- catch (ex) {
1814
- return returnError(ex, res, req);
1815
- }
1816
- server.externalServices.thorswap
1817
- .thorswapGetCryptoCurrencies(req)
1818
- .then(response => {
1819
- res.json(response);
1820
- })
1821
- .catch(err => {
1822
- return returnError(err ?? 'unknown', res, req);
1823
- });
1824
- });
1825
- router.post('/v1/service/thorswap/getSwapQuote', (req, res) => {
1826
- getServerWithAuth(req, res, async (server) => {
1827
- let response;
1828
- try {
1829
- response = await server.externalServices.thorswap.thorswapGetSwapQuote(req);
1830
- return res.json(response);
1831
- }
1832
- catch (ex) {
1833
- return returnError(ex, res, req);
1834
- }
1835
- });
1836
- });
1837
- router.post('/v1/service/thorswap/getSwapTx', (req, res) => {
1838
- let server;
1839
- try {
1840
- server = getServer(req, res);
1841
- }
1842
- catch (ex) {
1843
- return returnError(ex, res, req);
1844
- }
1845
- server.externalServices.thorswap
1846
- .thorswapGetSwapTx(req)
1847
- .then(response => {
1848
- res.json(response);
1849
- })
1850
- .catch(err => {
1851
- return returnError(err ?? 'unknown', res, req);
1852
- });
1853
- });
1854
- router.post('/v1/service/transak/getAccessToken', (req, res) => {
1855
- getServerWithAuth(req, res, async (server) => {
1856
- let response;
1857
- try {
1858
- response = await server.externalServices.transak.transakGetAccessToken(req);
1859
- return res.json(response);
1860
- }
1861
- catch (ex) {
1862
- return returnError(ex, res, req);
1863
- }
1864
- });
1865
- });
1866
- router.post('/v1/service/transak/cryptoCurrencies', (req, res) => {
1867
- let server;
1868
- try {
1869
- server = getServer(req, res);
1870
- }
1871
- catch (ex) {
1872
- return returnError(ex, res, req);
1873
- }
1874
- server.externalServices.transak
1875
- .transakGetCryptoCurrencies(req)
1876
- .then(response => {
1877
- res.json(response);
1878
- })
1879
- .catch(err => {
1880
- return returnError(err ?? 'unknown', res, req);
1881
- });
1882
- });
1883
- router.post('/v1/service/transak/fiatCurrencies', (req, res) => {
1884
- let server;
1885
- try {
1886
- server = getServer(req, res);
1887
- }
1888
- catch (ex) {
1889
- return returnError(ex, res, req);
1890
- }
1891
- server.externalServices.transak
1892
- .transakGetFiatCurrencies(req)
1893
- .then(response => {
1894
- res.json(response);
1895
- })
1896
- .catch(err => {
1897
- return returnError(err ?? 'unknown', res, req);
1898
- });
1899
- });
1900
- router.post('/v1/service/transak/quote', (req, res) => {
1901
- getServerWithAuth(req, res, async (server) => {
1902
- let response;
1903
- try {
1904
- response = await server.externalServices.transak.transakGetQuote(req);
1905
- return res.json(response);
1906
- }
1907
- catch (ex) {
1908
- return returnError(ex, res, req);
1909
- }
1910
- });
1911
- });
1912
- router.post('/v1/service/transak/signedPaymentUrl', (req, res) => {
1913
- getServerWithAuth(req, res, async (server) => {
1914
- let response;
1915
- try {
1916
- response = await server.externalServices.transak.transakGetSignedPaymentUrl(req);
1917
- return res.json(response);
1918
- }
1919
- catch (ex) {
1920
- return returnError(ex, res, req);
1921
- }
1922
- });
1923
- });
1924
- router.post('/v1/service/transak/orderDetails', (req, res) => {
1925
- let server;
1926
- try {
1927
- server = getServer(req, res);
1928
- }
1929
- catch (ex) {
1930
- return returnError(ex, res, req);
1931
- }
1932
- server.externalServices.transak
1933
- .transakGetOrderDetails(req)
1934
- .then(response => {
1935
- res.json(response);
1936
- })
1937
- .catch(err => {
1938
- return returnError(err ?? 'unknown', res, req);
1939
- });
1940
- });
1941
- router.post('/v1/service/wyre/walletOrderQuotation', (req, res) => {
1942
- getServerWithAuth(req, res, server => {
1943
- server.externalServices.wyre
1944
- .wyreWalletOrderQuotation(req)
1945
- .then(response => {
1946
- res.json(response);
1947
- })
1948
- .catch(err => {
1949
- return returnError(err ?? 'unknown', res, req);
1950
- });
1951
- });
1952
- });
1953
- router.post('/v1/service/wyre/walletOrderReservation', (req, res) => {
1954
- getServerWithAuth(req, res, server => {
1955
- server.externalServices.wyre
1956
- .wyreWalletOrderReservation(req)
1957
- .then(response => {
1958
- res.json(response);
1959
- })
1960
- .catch(err => {
1961
- return returnError(err ?? 'unknown', res, req);
1962
- });
1963
- });
1964
- });
1965
- router.post('/v1/service/changelly/getCurrencies', (req, res) => {
1966
- let server;
1967
- try {
1968
- server = getServer(req, res);
1969
- }
1970
- catch (ex) {
1971
- return returnError(ex, res, req);
1972
- }
1973
- server.externalServices.changelly
1974
- .changellyGetCurrencies(req)
1975
- .then(response => {
1976
- res.json(response);
1977
- })
1978
- .catch(err => {
1979
- return returnError(err ?? 'unknown', res, req);
1980
- });
1981
- });
1982
- router.post('/v1/service/changelly/getPairsParams', (req, res) => {
1983
- getServerWithAuth(req, res, server => {
1984
- server.externalServices.changelly
1985
- .changellyGetPairsParams(req)
1986
- .then(response => {
1987
- res.json(response);
1988
- })
1989
- .catch(err => {
1990
- return returnError(err ?? 'unknown', res, req);
1991
- });
1992
- });
1993
- });
1994
- router.post('/v1/service/changelly/getFixRateForAmount', (req, res) => {
1995
- getServerWithAuth(req, res, server => {
1996
- server.externalServices.changelly
1997
- .changellyGetFixRateForAmount(req)
1998
- .then(response => {
1999
- res.json(response);
2000
- })
2001
- .catch(err => {
2002
- return returnError(err ?? 'unknown', res, req);
2003
- });
2004
- });
2005
- });
2006
- router.post('/v1/service/changelly/createFixTransaction', (req, res) => {
2007
- getServerWithAuth(req, res, server => {
2008
- server.externalServices.changelly
2009
- .changellyCreateFixTransaction(req)
2010
- .then(response => {
2011
- res.json(response);
2012
- })
2013
- .catch(err => {
2014
- return returnError(err ?? 'unknown', res, req);
2015
- });
2016
- });
2017
- });
2018
- router.post('/v1/service/changelly/getTransactions', (req, res) => {
2019
- let server;
2020
- try {
2021
- server = getServer(req, res);
2022
- }
2023
- catch (ex) {
2024
- return returnError(ex, res, req);
2025
- }
2026
- server.externalServices.changelly
2027
- .changellyGetTransactions(req)
2028
- .then(response => {
2029
- res.json(response);
2030
- })
2031
- .catch(err => {
2032
- return returnError(err ?? 'unknown', res, req);
2033
- });
2034
- });
2035
- router.post('/v1/service/changelly/getStatus', (req, res) => {
2036
- let server;
2037
- try {
2038
- server = getServer(req, res);
2039
- }
2040
- catch (ex) {
2041
- return returnError(ex, res, req);
2042
- }
2043
- server.externalServices.changelly
2044
- .changellyGetStatus(req)
2045
- .then(response => {
2046
- res.json(response);
2047
- })
2048
- .catch(err => {
2049
- return returnError(err ?? 'unknown', res, req);
2050
- });
2051
- });
2052
- router.get('/v1/service/oneInch/getReferrerFee', (req, res) => {
2053
- let server;
2054
- try {
2055
- server = getServer(req, res);
2056
- }
2057
- catch (ex) {
2058
- return returnError(ex, res, req);
2059
- }
2060
- server.externalServices.oneInch
2061
- .oneInchGetReferrerFee(req)
2062
- .then(response => {
2063
- res.json(response);
2064
- })
2065
- .catch(err => {
2066
- return returnError(err ?? 'unknown', res, req);
2067
- });
2068
- });
2069
- router.post('/v1/service/oneInch/getSwap/:chain?', (req, res) => {
2070
- getServerWithAuth(req, res, server => {
2071
- server.externalServices.oneInch
2072
- .oneInchGetSwap(req)
2073
- .then(response => {
2074
- res.json(response);
2075
- })
2076
- .catch(err => {
2077
- return returnError(err ?? 'unknown', res, req);
2078
- });
2079
- });
2080
- });
2081
- router.get('/v1/service/oneInch/getTokens/:chain?', (req, res) => {
2082
- SetPublicCache(res, 1 * ONE_MINUTE);
2083
- let server;
2084
- try {
2085
- server = getServer(req, res);
2086
- }
2087
- catch (ex) {
2088
- return returnError(ex, res, req);
2089
- }
2090
- server.externalServices.coinGecko.coinGeckoGetTokens(req)
2091
- .then(response => {
2092
- res.json(response);
2093
- })
2094
- .catch(err => {
2095
- return returnError(err ?? 'unknown', res, req);
2096
- });
2097
- });
2098
- router.get('/v1/marketstats/:code/', (req, res) => {
2099
- SetPublicCache(res, 5 * ONE_MINUTE);
2100
- let server;
2101
- try {
2102
- server = getServer(req, res);
2103
- }
2104
- catch (ex) {
2105
- return returnError(ex, res, req);
2106
- }
2107
- server.externalServices.coinGecko.coinGeckoGetMarketStats(req)
2108
- .then(response => {
2109
- res.json(response);
2110
- })
2111
- .catch(err => {
2112
- return returnError(err ?? 'unknown', res, req);
2113
- });
2114
- });
2115
- router.get('/v1/services/dex/getSpenderApprovalWhitelist', (req, res) => {
2116
- let server;
2117
- try {
2118
- server = getServer(req, res);
2119
- }
2120
- catch (ex) {
2121
- return returnError(ex, res, req);
2122
- }
2123
- server.getSpenderApprovalWhitelist((err, response) => {
2124
- if (err)
2125
- return returnError(err, res, req);
2126
- res.json(response);
2127
- });
2128
- });
2129
- const moralisCorsOptions = {
2130
- origin: (origin, cb) => {
2131
- const moralisWhiteList = config_1.default.moralis?.whitelist ?? [];
2132
- if (moralisWhiteList.indexOf(origin) !== -1) {
2133
- cb(null, true);
2134
- }
2135
- else {
2136
- cb(new Error('Not allowed by CORS'));
2137
- }
2138
- },
2139
- };
2140
- router.post('/v1/moralis/getWalletTokenBalances', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
2141
- let server;
2142
- try {
2143
- server = getServer(req, res);
2144
- }
2145
- catch (ex) {
2146
- return returnError(ex, res, req);
2147
- }
2148
- server.moralisGetWalletTokenBalances(req)
2149
- .then(response => {
2150
- res.json(response);
2151
- })
2152
- .catch(err => {
2153
- return returnError(err ?? 'unknown', res, req);
2154
- });
2155
- });
2156
- router.post('/v1/moralis/moralisGetTokenAllowance', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
2157
- let server;
2158
- try {
2159
- server = getServer(req, res);
2160
- }
2161
- catch (ex) {
2162
- return returnError(ex, res, req);
2163
- }
2164
- server.moralisGetTokenAllowance(req)
2165
- .then(response => {
2166
- res.json(response);
2167
- })
2168
- .catch(err => {
2169
- return returnError(err ?? 'unknown', res, req);
2170
- });
2171
- });
2172
- router.post('/v1/moralis/moralisGetNativeBalance', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
2173
- let server;
2174
- try {
2175
- server = getServer(req, res);
2176
- }
2177
- catch (ex) {
2178
- return returnError(ex, res, req);
2179
- }
2180
- server.moralisGetNativeBalance(req)
2181
- .then(response => {
2182
- res.json(response);
2183
- })
2184
- .catch(err => {
2185
- return returnError(err ?? 'unknown', res, req);
2186
- });
2187
- });
2188
- router.post('/v1/moralis/GetTokenPrice', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
2189
- let server;
2190
- try {
2191
- server = getServer(req, res);
2192
- }
2193
- catch (ex) {
2194
- return returnError(ex, res, req);
2195
- }
2196
- server.moralisGetTokenPrice(req)
2197
- .then(response => {
2198
- res.json(response);
2199
- })
2200
- .catch(err => {
2201
- return returnError(err ?? 'unknown', res, req);
2202
- });
2203
- });
2204
- router.post('/v1/moralis/getMultipleERC20TokenPrices', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
2205
- let server;
2206
- try {
2207
- server = getServer(req, res);
2208
- }
2209
- catch (ex) {
2210
- return returnError(ex, res, req);
2211
- }
2212
- server.moralisGetMultipleERC20TokenPrices(req)
2213
- .then(response => {
2214
- res.json(response);
2215
- })
2216
- .catch(err => {
2217
- return returnError(err ?? 'unknown', res, req);
2218
- });
2219
- });
2220
- router.post('/v1/moralis/getERC20TokenBalancesWithPricesByWallet', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
2221
- let server;
2222
- try {
2223
- server = getServer(req, res);
2224
- }
2225
- catch (ex) {
2226
- return returnError(ex, res, req);
2227
- }
2228
- server.moralisGetERC20TokenBalancesWithPricesByWallet(req)
2229
- .then(response => {
2230
- res.json(response);
2231
- })
2232
- .catch(err => {
2233
- return returnError(err ?? 'unknown', res, req);
2234
- });
2235
- });
2236
- router.post('/v1/moralis/getSolWalletPortfolio', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
2237
- let server;
2238
- try {
2239
- server = getServer(req, res);
2240
- }
2241
- catch (ex) {
2242
- return returnError(ex, res, req);
2243
- }
2244
- server.moralisGetSolWalletPortfolio(req)
2245
- .then(response => {
2246
- res.json(response);
2247
- })
2248
- .catch(err => {
2249
- return returnError(err ?? 'unknown', res, req);
2250
- });
39
+ const { getServer, getServerWithAuth, getServerWithMultiAuth, logDeprecated, setPublicCache } = (0, context_1.createRouteHelpers)(returnError);
40
+ (0, wallets_1.registerWalletRoutes)(router, {
41
+ createWalletLimiter: (0, createWalletLimiter_1.createWalletLimiter)(opts),
42
+ getServer,
43
+ getServerWithAuth,
44
+ getServerWithMultiAuth,
45
+ logDeprecated,
46
+ returnError
47
+ });
48
+ (0, transactions_1.registerTransactionRoutes)(router, {
49
+ getServerWithAuth,
50
+ returnError
51
+ });
52
+ (0, advertisements_1.registerAdvertisementRoutes)(router, {
53
+ getServer,
54
+ getServerWithAuth,
55
+ setPublicCache,
56
+ returnError
57
+ });
58
+ const estimateFeeLimiter = (0, setup_1.createEstimateFeeLimiter)(opts);
59
+ (0, blockchain_1.registerBlockchainRoutes)(router, {
60
+ estimateFeeLimiter,
61
+ getServer,
62
+ getServerWithAuth,
63
+ logDeprecated,
64
+ setPublicCache,
65
+ returnError
66
+ });
67
+ (0, walletdata_1.registerWalletDataRoutes)(router, {
68
+ getServerWithAuth,
69
+ logDeprecated,
70
+ returnError
71
+ });
72
+ (0, notifications_1.registerNotificationRoutes)(router, {
73
+ getServerWithAuth,
74
+ logDeprecated,
75
+ returnError
76
+ });
77
+ (0, maintenance_1.registerMaintenanceRoutes)(router, {
78
+ getServerWithAuth,
79
+ setPublicCache,
80
+ returnError
81
+ });
82
+ (0, services_1.registerServiceRoutes)(router, {
83
+ getServer,
84
+ getServerWithAuth,
85
+ setPublicCache,
86
+ returnError
87
+ });
88
+ (0, moralis_1.registerMoralisRoutes)(router, {
89
+ getServer,
90
+ returnError
2251
91
  });
2252
92
  router.use(new aave_1.AaveRouter({ returnError, getServer }).router);
2253
93
  router.use(new tss_1.TssRouter({ returnError, opts }).router);