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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/bws.example.config.js +4 -2
  2. package/package.json +4 -4
  3. package/src/bws.ts +2 -0
  4. package/src/config.ts +4 -2
  5. package/src/externalservices/moonpay.ts +85 -1
  6. package/src/lib/blockchainexplorers/v8.ts +1 -1
  7. package/src/lib/common/utils.ts +18 -5
  8. package/src/lib/expressapp.ts +63 -2378
  9. package/src/lib/model/txproposal.ts +14 -10
  10. package/src/lib/routes/advertisements.ts +151 -0
  11. package/src/lib/routes/blockchain.ts +151 -0
  12. package/src/lib/routes/context.ts +149 -0
  13. package/src/lib/routes/maintenance.ts +114 -0
  14. package/src/lib/routes/moralis.ts +89 -0
  15. package/src/lib/routes/notifications.ts +135 -0
  16. package/src/lib/routes/services.ts +540 -0
  17. package/src/lib/routes/setup.ts +86 -0
  18. package/src/lib/routes/transactions.ts +196 -0
  19. package/src/lib/routes/walletdata.ts +166 -0
  20. package/src/lib/routes/wallets.ts +288 -0
  21. package/src/lib/server.ts +24 -1
  22. package/src/lib/storage.ts +3 -0
  23. package/test/integration/externalservices/moonpay.test.ts +149 -0
  24. package/test/utils.test.ts +29 -0
  25. package/ts_build/package.json +4 -4
  26. package/ts_build/src/bws.js +3 -0
  27. package/ts_build/src/bws.js.map +1 -1
  28. package/ts_build/src/config.d.ts.map +1 -1
  29. package/ts_build/src/config.js.map +1 -1
  30. package/ts_build/src/externalservices/moonpay.d.ts +4 -0
  31. package/ts_build/src/externalservices/moonpay.d.ts.map +1 -1
  32. package/ts_build/src/externalservices/moonpay.js +68 -1
  33. package/ts_build/src/externalservices/moonpay.js.map +1 -1
  34. package/ts_build/src/lib/blockchainexplorers/v8.js +1 -1
  35. package/ts_build/src/lib/common/index.d.ts +1 -0
  36. package/ts_build/src/lib/common/index.d.ts.map +1 -1
  37. package/ts_build/src/lib/common/utils.d.ts +1 -0
  38. package/ts_build/src/lib/common/utils.d.ts.map +1 -1
  39. package/ts_build/src/lib/common/utils.js +20 -9
  40. package/ts_build/src/lib/common/utils.js.map +1 -1
  41. package/ts_build/src/lib/expressapp.d.ts.map +1 -1
  42. package/ts_build/src/lib/expressapp.js +64 -2224
  43. package/ts_build/src/lib/expressapp.js.map +1 -1
  44. package/ts_build/src/lib/model/txproposal.d.ts +1 -4
  45. package/ts_build/src/lib/model/txproposal.d.ts.map +1 -1
  46. package/ts_build/src/lib/model/txproposal.js +13 -9
  47. package/ts_build/src/lib/model/txproposal.js.map +1 -1
  48. package/ts_build/src/lib/routes/advertisements.d.ts +11 -0
  49. package/ts_build/src/lib/routes/advertisements.d.ts.map +1 -0
  50. package/ts_build/src/lib/routes/advertisements.js +119 -0
  51. package/ts_build/src/lib/routes/advertisements.js.map +1 -0
  52. package/ts_build/src/lib/routes/blockchain.d.ts +13 -0
  53. package/ts_build/src/lib/routes/blockchain.d.ts.map +1 -0
  54. package/ts_build/src/lib/routes/blockchain.js +125 -0
  55. package/ts_build/src/lib/routes/blockchain.js.map +1 -0
  56. package/ts_build/src/lib/routes/context.d.ts +12 -0
  57. package/ts_build/src/lib/routes/context.d.ts.map +1 -0
  58. package/ts_build/src/lib/routes/context.js +115 -0
  59. package/ts_build/src/lib/routes/context.js.map +1 -0
  60. package/ts_build/src/lib/routes/maintenance.d.ts +10 -0
  61. package/ts_build/src/lib/routes/maintenance.d.ts.map +1 -0
  62. package/ts_build/src/lib/routes/maintenance.js +101 -0
  63. package/ts_build/src/lib/routes/maintenance.js.map +1 -0
  64. package/ts_build/src/lib/routes/moralis.d.ts +9 -0
  65. package/ts_build/src/lib/routes/moralis.d.ts.map +1 -0
  66. package/ts_build/src/lib/routes/moralis.js +78 -0
  67. package/ts_build/src/lib/routes/moralis.js.map +1 -0
  68. package/ts_build/src/lib/routes/notifications.d.ts +10 -0
  69. package/ts_build/src/lib/routes/notifications.d.ts.map +1 -0
  70. package/ts_build/src/lib/routes/notifications.js +120 -0
  71. package/ts_build/src/lib/routes/notifications.js.map +1 -0
  72. package/ts_build/src/lib/routes/services.d.ts +11 -0
  73. package/ts_build/src/lib/routes/services.d.ts.map +1 -0
  74. package/ts_build/src/lib/routes/services.js +440 -0
  75. package/ts_build/src/lib/routes/services.js.map +1 -0
  76. package/ts_build/src/lib/routes/setup.d.ts +4 -0
  77. package/ts_build/src/lib/routes/setup.d.ts.map +1 -0
  78. package/ts_build/src/lib/routes/setup.js +79 -0
  79. package/ts_build/src/lib/routes/setup.js.map +1 -0
  80. package/ts_build/src/lib/routes/transactions.d.ts +9 -0
  81. package/ts_build/src/lib/routes/transactions.d.ts.map +1 -0
  82. package/ts_build/src/lib/routes/transactions.js +188 -0
  83. package/ts_build/src/lib/routes/transactions.js.map +1 -0
  84. package/ts_build/src/lib/routes/walletdata.d.ts +10 -0
  85. package/ts_build/src/lib/routes/walletdata.d.ts.map +1 -0
  86. package/ts_build/src/lib/routes/walletdata.js +152 -0
  87. package/ts_build/src/lib/routes/walletdata.js.map +1 -0
  88. package/ts_build/src/lib/routes/wallets.d.ts +13 -0
  89. package/ts_build/src/lib/routes/wallets.d.ts.map +1 -0
  90. package/ts_build/src/lib/routes/wallets.js +291 -0
  91. package/ts_build/src/lib/routes/wallets.js.map +1 -0
  92. package/ts_build/src/lib/server.d.ts.map +1 -1
  93. package/ts_build/src/lib/server.js +19 -1
  94. package/ts_build/src/lib/server.js.map +1 -1
  95. package/ts_build/src/lib/storage.d.ts.map +1 -1
  96. package/ts_build/src/lib/storage.js +3 -0
  97. package/ts_build/src/lib/storage.js.map +1 -1
  98. package/ts_build/test/integration/externalservices/moonpay.test.js +139 -0
  99. package/ts_build/test/integration/externalservices/moonpay.test.js.map +1 -1
  100. package/ts_build/test/utils.test.js +23 -0
  101. package/ts_build/test/utils.test.js.map +1 -1
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerBlockchainRoutes = registerBlockchainRoutes;
4
+ const ONE_MINUTE = 60;
5
+ function callbackResult(fn) {
6
+ return new Promise((resolve, reject) => {
7
+ fn((err, data) => {
8
+ if (err)
9
+ return reject(err);
10
+ return resolve(data);
11
+ });
12
+ });
13
+ }
14
+ function getServerOrReturnError(req, res, context) {
15
+ try {
16
+ return context.getServer(req, res);
17
+ }
18
+ catch (err) {
19
+ context.returnError(err, res, req);
20
+ return null;
21
+ }
22
+ }
23
+ function respondWithPublicServer(req, res, context, handler) {
24
+ const server = getServerOrReturnError(req, res, context);
25
+ if (!server)
26
+ return;
27
+ Promise.resolve()
28
+ .then(() => handler(server))
29
+ .then(response => {
30
+ res.json(response);
31
+ })
32
+ .catch(err => {
33
+ context.returnError(err ?? 'unknown', res, req);
34
+ });
35
+ }
36
+ function respondWithAuthServer(req, res, context, handler) {
37
+ context.getServerWithAuth(req, res, server => {
38
+ Promise.resolve()
39
+ .then(() => handler(server))
40
+ .then(response => {
41
+ res.json(response);
42
+ })
43
+ .catch(err => {
44
+ context.returnError(err ?? 'unknown', res, req);
45
+ });
46
+ });
47
+ }
48
+ function registerBlockchainRoutes(router, context) {
49
+ const { estimateFeeLimiter, logDeprecated, setPublicCache } = context;
50
+ router.get('/v1/feelevels/', estimateFeeLimiter, (req, res) => {
51
+ setPublicCache(res, 1 * ONE_MINUTE);
52
+ logDeprecated(req);
53
+ respondWithPublicServer(req, res, context, server => callbackResult(resolve => {
54
+ const opts = {};
55
+ if (req.query.network)
56
+ opts.network = req.query.network;
57
+ server.getFeeLevels(opts, resolve);
58
+ }).then((feeLevels) => {
59
+ for (const feeLevel of feeLevels) {
60
+ feeLevel.feePerKB = feeLevel.feePerKb;
61
+ delete feeLevel.feePerKb;
62
+ }
63
+ return feeLevels;
64
+ }));
65
+ });
66
+ router.get('/v2/feelevels/', (req, res) => {
67
+ setPublicCache(res, 1 * ONE_MINUTE);
68
+ respondWithPublicServer(req, res, context, server => callbackResult(resolve => {
69
+ const opts = {};
70
+ if (req.query.coin)
71
+ opts.coin = req.query.coin;
72
+ if (req.query.chain || req.query.coin)
73
+ opts.chain = (req.query.chain || req.query.coin);
74
+ if (req.query.network)
75
+ opts.network = req.query.network;
76
+ server.getFeeLevels(opts, resolve);
77
+ }));
78
+ });
79
+ router.post('/v3/estimateGas/', (req, res) => {
80
+ respondWithAuthServer(req, res, context, server => {
81
+ return server.estimateGas(req.body);
82
+ });
83
+ });
84
+ router.post('/v1/ethmultisig/', (req, res) => {
85
+ respondWithAuthServer(req, res, context, server => {
86
+ return server.getMultisigContractInstantiationInfo(req.body);
87
+ });
88
+ });
89
+ router.post('/v1/ethmultisig/info', (req, res) => {
90
+ respondWithAuthServer(req, res, context, server => {
91
+ return server.getMultisigContractInfo(req.body);
92
+ });
93
+ });
94
+ router.post('/v1/multisig/', (req, res) => {
95
+ respondWithAuthServer(req, res, context, server => {
96
+ return server.getMultisigContractInstantiationInfo(req.body);
97
+ });
98
+ });
99
+ router.post('/v1/multisig/info', (req, res) => {
100
+ respondWithAuthServer(req, res, context, server => {
101
+ return server.getMultisigContractInfo(req.body);
102
+ });
103
+ });
104
+ router.post('/v1/token/info', (req, res) => {
105
+ respondWithAuthServer(req, res, context, server => {
106
+ return server.getTokenContractInfo(req.body);
107
+ });
108
+ });
109
+ router.post('/v1/token/allowance', (req, res) => {
110
+ respondWithPublicServer(req, res, context, server => {
111
+ return server.getTokenAllowance(req.body);
112
+ });
113
+ });
114
+ router.get('/v1/nonce/:address', (req, res) => {
115
+ respondWithAuthServer(req, res, context, server => {
116
+ return server.getNonce({
117
+ coin: req.query.coin || 'eth',
118
+ chain: req.query.chain,
119
+ network: req.query.network || 'livenet',
120
+ address: req.params['address']
121
+ });
122
+ });
123
+ });
124
+ }
125
+ //# sourceMappingURL=blockchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../../../src/lib/routes/blockchain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import express from 'express';
2
+ import * as Types from '../../types/expressapp';
3
+ interface RouteHelpers {
4
+ getServer: Types.GetServerFn;
5
+ getServerWithAuth: Types.GetServerWithAuthFn;
6
+ getServerWithMultiAuth: Types.GetServerWithMultiAuthFn;
7
+ logDeprecated: Types.LogDeprecatedFn;
8
+ setPublicCache: (res: express.Response, seconds: number) => void;
9
+ }
10
+ export declare function createRouteHelpers(returnError: Types.ReturnErrorFn): RouteHelpers;
11
+ export {};
12
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../src/lib/routes/context.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAKhD,UAAU,YAAY;IACpB,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;IAC7B,iBAAiB,EAAE,KAAK,CAAC,mBAAmB,CAAC;IAC7C,sBAAsB,EAAE,KAAK,CAAC,wBAAwB,CAAC;IACvD,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC;IACrC,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,GAAG,YAAY,CAsIjF"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRouteHelpers = createRouteHelpers;
4
+ const errordefinitions_1 = require("../errors/errordefinitions");
5
+ const logger_1 = require("../logger");
6
+ const server_1 = require("../server");
7
+ function createRouteHelpers(returnError) {
8
+ const logDeprecated = req => {
9
+ logger_1.logger.warn('DEPRECATED', req.method, req.url, '(' + req.header('x-client-version') + ')');
10
+ };
11
+ const getCredentials = req => {
12
+ const identity = req.header('x-identity');
13
+ if (!identity)
14
+ return;
15
+ return {
16
+ copayerId: identity,
17
+ signature: req.header('x-signature'),
18
+ session: req.header('x-session')
19
+ };
20
+ };
21
+ const getServer = (req, _res) => {
22
+ const opts = {
23
+ clientVersion: req.header('x-client-version'),
24
+ userAgent: req.header('user-agent')
25
+ };
26
+ return server_1.WalletService.getInstance(opts);
27
+ };
28
+ const getServerWithAuth = async (req, res, opts, cb) => {
29
+ if (typeof opts === 'function') {
30
+ cb = opts;
31
+ opts = {};
32
+ }
33
+ opts = (opts || {});
34
+ const credentials = getCredentials(req);
35
+ if (!credentials) {
36
+ return returnError(errordefinitions_1.Errors.NOT_AUTHORIZED, res, req);
37
+ }
38
+ const reqUrl = req.redirectedUrl || req.url;
39
+ const auth = {
40
+ copayerId: credentials.copayerId,
41
+ message: req.method.toLowerCase() + '|' + reqUrl + '|' + JSON.stringify(req.body),
42
+ signature: credentials.signature,
43
+ clientVersion: req.header('x-client-version'),
44
+ userAgent: req.header('user-agent'),
45
+ walletId: req.header('x-wallet-id'),
46
+ session: undefined
47
+ };
48
+ if (opts.allowSession) {
49
+ auth.session = credentials.session;
50
+ }
51
+ try {
52
+ const server = await new Promise((resolve, reject) => {
53
+ server_1.WalletService.getInstanceWithAuth(auth, (err, server) => {
54
+ if (err) {
55
+ return reject(err);
56
+ }
57
+ if (opts.onlySupportStaff && !server.copayerIsSupportStaff) {
58
+ return reject(errordefinitions_1.Errors.NOT_AUTHORIZED);
59
+ }
60
+ if (server.copayerIsSupportStaff) {
61
+ req.isSupportStaff = true;
62
+ }
63
+ if (opts.onlyMarketingStaff && !server.copayerIsMarketingStaff) {
64
+ return reject(errordefinitions_1.Errors.NOT_AUTHORIZED);
65
+ }
66
+ req.walletId = server.walletId;
67
+ req.copayerId = server.copayerId;
68
+ return resolve(server);
69
+ });
70
+ });
71
+ if (cb) {
72
+ return cb(server);
73
+ }
74
+ return server;
75
+ }
76
+ catch (err) {
77
+ if (opts.silentFailure) {
78
+ if (cb) {
79
+ return cb(null, err);
80
+ }
81
+ throw err;
82
+ }
83
+ return returnError(err, res, req);
84
+ }
85
+ };
86
+ const getServerWithMultiAuth = (req, res, opts = {}) => {
87
+ const identitiesHeader = req.headers['x-identities'];
88
+ const identitiesHeaderValue = Array.isArray(identitiesHeader) ? identitiesHeader.join(',') : identitiesHeader;
89
+ const identities = identitiesHeaderValue ? identitiesHeaderValue.split(',') : false;
90
+ const signature = req.headers['x-signature'];
91
+ if (!identities || !signature) {
92
+ throw errordefinitions_1.Errors.NOT_AUTHORIZED;
93
+ }
94
+ if (!Array.isArray(identities)) {
95
+ throw errordefinitions_1.Errors.NOT_AUTHORIZED;
96
+ }
97
+ return identities.map(id => new Promise((resolve, reject) => getServerWithAuth(Object.assign(req, {
98
+ headers: {
99
+ ...req.headers,
100
+ 'x-identity': id
101
+ }
102
+ }), res, opts, (server, err) => (err ? reject(err) : resolve(server)))));
103
+ };
104
+ const setPublicCache = (res, seconds) => {
105
+ res.setHeader('Cache-Control', `public, max-age=${seconds}, stale-if-error=${10 * seconds}`);
106
+ };
107
+ return {
108
+ getServer,
109
+ getServerWithAuth,
110
+ getServerWithMultiAuth,
111
+ logDeprecated,
112
+ setPublicCache
113
+ };
114
+ }
115
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/lib/routes/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import express from 'express';
2
+ import type * as Types from '../../types/expressapp';
3
+ interface RouteContext {
4
+ getServerWithAuth: Types.GetServerWithAuthFn;
5
+ setPublicCache: (res: express.Response, seconds: number) => void;
6
+ returnError: Types.ReturnErrorFn;
7
+ }
8
+ export declare function registerMaintenanceRoutes(router: express.Router, context: RouteContext): void;
9
+ export {};
10
+ //# sourceMappingURL=maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../../src/lib/routes/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,KAAK,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAErD,UAAU,YAAY;IACpB,iBAAiB,EAAE,KAAK,CAAC,mBAAmB,CAAC;IAC7C,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC;CAClC;AAID,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,QAoGtF"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerMaintenanceRoutes = registerMaintenanceRoutes;
4
+ const server_1 = require("../server");
5
+ const stats_1 = require("../stats");
6
+ const ONE_MINUTE = 60;
7
+ function registerMaintenanceRoutes(router, context) {
8
+ const { getServerWithAuth, setPublicCache, returnError } = context;
9
+ router.post('/v1/addresses/scan/', (req, res) => {
10
+ getServerWithAuth(req, res, server => {
11
+ req.body = req.body || {};
12
+ req.body.startIdx = server.copayerIsSupportStaff ? Number(req.body.startIdx) : null;
13
+ server.startScan(req.body, (err, started) => {
14
+ if (err)
15
+ return returnError(err, res, req);
16
+ res.json(started);
17
+ res.end();
18
+ });
19
+ });
20
+ });
21
+ router.get('/v1/stats/', (req, res) => {
22
+ setPublicCache(res, 1 * ONE_MINUTE);
23
+ const opts = {};
24
+ if (req.query.network)
25
+ opts.network = req.query.network;
26
+ if (req.query.coin)
27
+ opts.coin = req.query.coin;
28
+ if (req.query.from)
29
+ opts.from = req.query.from;
30
+ if (req.query.to)
31
+ opts.to = req.query.to;
32
+ const stats = new stats_1.Stats(opts);
33
+ stats.run((err, data) => {
34
+ if (err)
35
+ return returnError(err, res, req);
36
+ res.json(data);
37
+ res.end();
38
+ });
39
+ });
40
+ router.get('/v1/version/', (req, res) => {
41
+ setPublicCache(res, 1 * ONE_MINUTE);
42
+ res.json({
43
+ serviceVersion: server_1.WalletService.getServiceVersion()
44
+ });
45
+ res.end();
46
+ });
47
+ router.get('/v1/txnotes/:txid', (req, res) => {
48
+ getServerWithAuth(req, res, server => {
49
+ server.getTxNote({
50
+ txid: req.params['txid']
51
+ }, (err, note) => {
52
+ if (err)
53
+ return returnError(err, res, req);
54
+ res.json(note);
55
+ });
56
+ });
57
+ });
58
+ router.put('/v1/txnotes/:txid/', (req, res) => {
59
+ req.body.txid = req.params['txid'];
60
+ getServerWithAuth(req, res, server => {
61
+ server.editTxNote(req.body, (err, note) => {
62
+ if (err)
63
+ return returnError(err, res, req);
64
+ res.json(note);
65
+ });
66
+ });
67
+ });
68
+ router.get('/v1/txnotes/', (req, res) => {
69
+ getServerWithAuth(req, res, server => {
70
+ const opts = {};
71
+ const rawMinTs = req.query.minTs;
72
+ if (typeof rawMinTs === 'string' && rawMinTs.trim() !== '') {
73
+ const minTs = Number(rawMinTs);
74
+ if (Number.isFinite(minTs)) {
75
+ opts.minTs = minTs;
76
+ }
77
+ }
78
+ server.getTxNotes(opts, (err, notes) => {
79
+ if (err)
80
+ return returnError(err, res, req);
81
+ res.json(notes);
82
+ });
83
+ });
84
+ });
85
+ router.post('/v1/clearcache/', (req, res) => {
86
+ getServerWithAuth(req, res, server => {
87
+ server
88
+ .clearWalletCache(req.query)
89
+ .then(val => {
90
+ if (val) {
91
+ res.sendStatus(200);
92
+ }
93
+ else {
94
+ res.sendStatus(500);
95
+ }
96
+ })
97
+ .catch(err => returnError(err, res, req));
98
+ });
99
+ });
100
+ }
101
+ //# sourceMappingURL=maintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../../../src/lib/routes/maintenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import express from 'express';
2
+ import type * as Types from '../../types/expressapp';
3
+ interface RouteContext {
4
+ getServer: Types.GetServerFn;
5
+ returnError: Types.ReturnErrorFn;
6
+ }
7
+ export declare function registerMoralisRoutes(router: express.Router, context: RouteContext): void;
8
+ export {};
9
+ //# sourceMappingURL=moralis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moralis.d.ts","sourceRoot":"","sources":["../../../../src/lib/routes/moralis.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAGrD,UAAU,YAAY;IACpB,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;IAC7B,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC;CAClC;AA0BD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,QAqDlF"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerMoralisRoutes = registerMoralisRoutes;
7
+ const cors_1 = __importDefault(require("cors"));
8
+ const config_1 = __importDefault(require("../../config"));
9
+ function getServerOrReturnError(req, res, context) {
10
+ try {
11
+ return context.getServer(req, res);
12
+ }
13
+ catch (err) {
14
+ context.returnError(err, res, req);
15
+ return null;
16
+ }
17
+ }
18
+ function respondWithPublicServer(req, res, context, handler) {
19
+ const server = getServerOrReturnError(req, res, context);
20
+ if (!server)
21
+ return;
22
+ handler(server)
23
+ .then(response => {
24
+ res.json(response);
25
+ })
26
+ .catch(err => {
27
+ context.returnError(err ?? 'unknown', res, req);
28
+ });
29
+ }
30
+ function registerMoralisRoutes(router, context) {
31
+ const moralisCorsOptions = {
32
+ origin: (origin, cb) => {
33
+ const moralisWhiteList = config_1.default.moralis?.whitelist ?? [];
34
+ if (moralisWhiteList.indexOf(origin) !== -1) {
35
+ cb(null, true);
36
+ }
37
+ else {
38
+ cb(new Error('Not allowed by CORS'));
39
+ }
40
+ }
41
+ };
42
+ router.post('/v1/moralis/getWalletTokenBalances', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
43
+ respondWithPublicServer(req, res, context, server => {
44
+ return server.moralisGetWalletTokenBalances(req);
45
+ });
46
+ });
47
+ router.post('/v1/moralis/moralisGetTokenAllowance', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
48
+ respondWithPublicServer(req, res, context, server => {
49
+ return server.moralisGetTokenAllowance(req);
50
+ });
51
+ });
52
+ router.post('/v1/moralis/moralisGetNativeBalance', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
53
+ respondWithPublicServer(req, res, context, server => {
54
+ return server.moralisGetNativeBalance(req);
55
+ });
56
+ });
57
+ router.post('/v1/moralis/GetTokenPrice', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
58
+ respondWithPublicServer(req, res, context, server => {
59
+ return server.moralisGetTokenPrice(req);
60
+ });
61
+ });
62
+ router.post('/v1/moralis/getMultipleERC20TokenPrices', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
63
+ respondWithPublicServer(req, res, context, server => {
64
+ return server.moralisGetMultipleERC20TokenPrices(req);
65
+ });
66
+ });
67
+ router.post('/v1/moralis/getERC20TokenBalancesWithPricesByWallet', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
68
+ respondWithPublicServer(req, res, context, server => {
69
+ return server.moralisGetERC20TokenBalancesWithPricesByWallet(req);
70
+ });
71
+ });
72
+ router.post('/v1/moralis/getSolWalletPortfolio', (0, cors_1.default)(moralisCorsOptions), (req, res) => {
73
+ respondWithPublicServer(req, res, context, server => {
74
+ return server.moralisGetSolWalletPortfolio(req);
75
+ });
76
+ });
77
+ }
78
+ //# sourceMappingURL=moralis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moralis.js","sourceRoot":"","sources":["../../../../src/lib/routes/moralis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import express from 'express';
2
+ import type * as Types from '../../types/expressapp';
3
+ interface RouteContext {
4
+ getServerWithAuth: Types.GetServerWithAuthFn;
5
+ logDeprecated: Types.LogDeprecatedFn;
6
+ returnError: Types.ReturnErrorFn;
7
+ }
8
+ export declare function registerNotificationRoutes(router: express.Router, context: RouteContext): void;
9
+ export {};
10
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../../../src/lib/routes/notifications.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAIrD,UAAU,YAAY;IACpB,iBAAiB,EAAE,KAAK,CAAC,mBAAmB,CAAC;IAC7C,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC;IACrC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC;CAClC;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,QA0HvF"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerNotificationRoutes = registerNotificationRoutes;
4
+ const common_1 = require("../common");
5
+ const { Defaults } = common_1.Common;
6
+ function registerNotificationRoutes(router, context) {
7
+ const { getServerWithAuth, logDeprecated, returnError } = context;
8
+ router.post('/v1/login/', (req, res) => {
9
+ getServerWithAuth(req, res, server => {
10
+ server.login({}, (err, session) => {
11
+ if (err)
12
+ return returnError(err, res, req);
13
+ res.json(session);
14
+ });
15
+ });
16
+ });
17
+ router.post('/v1/logout/', (req, res) => {
18
+ getServerWithAuth(req, res, server => {
19
+ server.logout({}, err => {
20
+ if (err)
21
+ return returnError(err, res, req);
22
+ res.end();
23
+ });
24
+ });
25
+ });
26
+ router.get('/v1/notifications/', (req, res) => {
27
+ getServerWithAuth(req, res, {
28
+ allowSession: true
29
+ }, server => {
30
+ const timeSpan = req.query.timeSpan
31
+ ? Math.min(+req.query.timeSpan || 0, Defaults.MAX_NOTIFICATIONS_TIMESPAN)
32
+ : Defaults.NOTIFICATIONS_TIMESPAN;
33
+ const opts = {
34
+ minTs: +Date.now() - timeSpan * 1000,
35
+ notificationId: req.query.notificationId
36
+ };
37
+ server.getNotifications(opts, (err, notifications) => {
38
+ if (err)
39
+ return returnError(err, res, req);
40
+ res.json(notifications);
41
+ });
42
+ });
43
+ });
44
+ router.post('/v1/pushnotifications/subscriptions/', (req, res) => {
45
+ getServerWithAuth(req, res, server => {
46
+ server.pushNotificationsSubscribe(req.body, (err, response) => {
47
+ if (err)
48
+ return returnError(err, res, req);
49
+ res.json(response);
50
+ });
51
+ });
52
+ });
53
+ router.post('/v2/pushnotifications/subscriptions/', (req, res) => {
54
+ getServerWithAuth(req, res, server => {
55
+ server.pushNotificationsBrazeSubscribe(req.body, (err, response) => {
56
+ if (err)
57
+ return returnError(err, res, req);
58
+ res.json(response);
59
+ });
60
+ });
61
+ });
62
+ router.delete('/v1/pushnotifications/subscriptions/', (req, res) => {
63
+ logDeprecated(req);
64
+ getServerWithAuth(req, res, server => {
65
+ server.pushNotificationsUnsubscribe({
66
+ token: 'dummy'
67
+ }, (err, response) => {
68
+ if (err)
69
+ return returnError(err, res, req);
70
+ res.json(response);
71
+ });
72
+ });
73
+ });
74
+ router.delete('/v2/pushnotifications/subscriptions/:token', (req, res) => {
75
+ const opts = {
76
+ token: req.params['token']
77
+ };
78
+ getServerWithAuth(req, res, server => {
79
+ server.pushNotificationsUnsubscribe(opts, (err, response) => {
80
+ if (err)
81
+ return returnError(err, res, req);
82
+ res.json(response);
83
+ });
84
+ });
85
+ });
86
+ router.delete('/v3/pushnotifications/subscriptions/:externalUserId', (req, res) => {
87
+ const opts = {
88
+ externalUserId: req.params['externalUserId']
89
+ };
90
+ getServerWithAuth(req, res, server => {
91
+ server.pushNotificationsBrazeUnsubscribe(opts, (err, response) => {
92
+ if (err)
93
+ return returnError(err, res, req);
94
+ res.json(response);
95
+ });
96
+ });
97
+ });
98
+ router.post('/v1/txconfirmations/', (req, res) => {
99
+ getServerWithAuth(req, res, server => {
100
+ server.txConfirmationSubscribe(req.body, (err, response) => {
101
+ if (err)
102
+ return returnError(err, res, req);
103
+ res.json(response);
104
+ });
105
+ });
106
+ });
107
+ router.delete('/v1/txconfirmations/:txid', (req, res) => {
108
+ const opts = {
109
+ txid: req.params['txid']
110
+ };
111
+ getServerWithAuth(req, res, server => {
112
+ server.txConfirmationUnsubscribe(opts, (err, response) => {
113
+ if (err)
114
+ return returnError(err, res, req);
115
+ res.json(response);
116
+ });
117
+ });
118
+ });
119
+ }
120
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../../../src/lib/routes/notifications.ts"],"names":[],"mappings":"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"}