Skip to content

Commit 677d346

Browse files
committed
Build 1.2.1
1 parent b6d3149 commit 677d346

14 files changed

+111
-62
lines changed

CHANGELOG.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
2-
## [1.1.9] - 2021-01-29
2+
3+
## [1.2.1] - 2021-02-05
4+
5+
### Added
6+
7+
- UserEvents support to HTTP request.
8+
9+
## [1.2.0] - 2021-01-29
310

411
### Added
512

dist/api/HttpServer.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ var _api = _interopRequireDefault(require("./routes/api"));
44
var _doc = _interopRequireDefault(require("./routes/doc"));
55
var _config = _interopRequireDefault(require("../lib/config"));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
66

7-
const HttpServer = ({ api, status, log }) => {
7+
const HttpServer = ({ api, status, log }, send) => {
88
const app = (0, _express.default)();
99
const httpServer = _http.default.Server(app);
10+
1011
app.set('etag', false);
1112
app.set('x-powered-by', false);
1213

@@ -24,15 +25,15 @@ const HttpServer = ({ api, status, log }) => {
2425
res.send(data);
2526
});
2627

27-
app.use('/api', (0, _api.default)({ log, api }));
28+
app.use('/api', (0, _api.default)({ log, api }, send));
2829

2930
if (_config.default.api.exposeDoc) {
3031
app.use('/doc', (0, _doc.default)({ log, app }));
3132
}
3233

3334
// 404
3435
app.use((req, res, next) => res.status(404).send());
35-
return httpServer;
36+
return { httpServer, app };
3637
};exports.HttpServer = HttpServer;var _default =
3738

3839
HttpServer;exports.default = _default;

dist/api/Status.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class Status extends _DataCollector.DataCollector {
2626
return Status.find({}, { timestamp: -1 }, 1).
2727
then(res => {
2828
res = res.data[0];
29-
delete res._id;
29+
if (res) delete res._id;
3030
return res;
3131
});
3232
}
@@ -57,7 +57,7 @@ class Status extends _DataCollector.DataCollector {
5757
this.getHighestBlock(),
5858
this.getTotalBlocks()]);
5959

60-
const status = Object.assign(blocksStatus, {
60+
const status = Object.assign(blocksStatus || {}, {
6161
dbLastBlockReceived: last.number,
6262
dbLastBlockReceivedTime: last._received,
6363
dbHighBlock: high.number,

dist/api/UserEventsApi.js

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const UserEventsApi = (io, api, { log }) => {
2020
let result = res.data;
2121
let req = payload;
2222
let error = res.error;
23+
if (!msg.socketId) return;
2324
const socket = io.sockets.connected[msg.socketId];
2425
log.trace(`Sending message to client ${module}.${action} error:${JSON.stringify(error)}`);
2526
if (socket) socket.emit('data', (0, _apiTools.formatRes)({ module, action, result, req, error }));

dist/api/docs.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ definitions:
7979

8080
Response:
8181
type: object
82+
description: Response
83+
name: Item
8284
properties:
8385
pages:
8486
type: object
@@ -90,6 +92,7 @@ definitions:
9092
description: sortable fields
9193
type: object
9294
defaultSort:
95+
type: object
9396
sortDir:
9497
type: boolean
9598
limit:
@@ -106,6 +109,7 @@ definitions:
106109
type: object
107110

108111
ResponseList:
112+
description: ResponseList
109113
type: object
110114
properties:
111115
pages:
@@ -118,6 +122,7 @@ definitions:
118122
description: sortable fields
119123
type: object
120124
defaultSort:
125+
type: object
121126
sortDir:
122127
type: boolean
123128
limit:

dist/api/index.js

+35-21
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,43 @@ const address = _config.default.api.address || 'localhost';
2525
status.start();
2626
txPool.start();
2727

28+
let userEvents;
29+
30+
const delayedResult = (res, payload, socket) => {
31+
const { params, result, delayed } = res;
32+
if (delayed && userEvents) {
33+
const registry = delayed.registry || !result.data && delayed.runIfEmpty;
34+
if (payload.getDelayed) {
35+
const lastBlock = api.getLastBlock();
36+
const block = lastBlock ? lastBlock.number : null;
37+
38+
userEvents.send({
39+
action: delayed.action,
40+
module: delayed.module,
41+
params,
42+
socketId: socket ? socket.id : undefined,
43+
payload,
44+
block,
45+
result });
46+
47+
}
48+
res.result.delayed = { fields: delayed.fields, registry };
49+
}
50+
return res;
51+
};
52+
53+
const send = ({ res, response, payload }) => {
54+
const { result } = delayedResult(response, payload);
55+
res.send(result);
56+
};
57+
2858
// http server
29-
const httpServer = (0, _HttpServer.HttpServer)({ api, status, log: _log.default });
59+
const { httpServer } = (0, _HttpServer.HttpServer)({ api, status, log: _log.default }, send);
3060
httpServer.listen(port, address);
3161
const io = new _socket.default(httpServer);
3262

3363
// start userEvents api
34-
const userEvents = (0, _UserEventsApi.default)(io, api, { log: _log.default });
64+
userEvents = (0, _UserEventsApi.default)(io, api, { log: _log.default });
3565

3666
io.httpServer.on('listening', () => {
3767
_log.default.info(`Server listening on: ${address || '0.0.0.0'}:${port}`);
@@ -127,25 +157,9 @@ const address = _config.default.api.address || 'localhost';
127157
socket.on('data', async payload => {
128158
try {
129159
const res = await api.run(payload);
130-
const { module, action, params, result, delayed } = res;
131-
if (delayed && userEvents) {
132-
const registry = delayed.registry || !result.data && delayed.runIfEmpty;
133-
if (payload.getDelayed) {
134-
const lastBlock = api.getLastBlock();
135-
const block = lastBlock ? lastBlock.number : null;
136-
userEvents.send({
137-
action: delayed.action,
138-
module: delayed.module,
139-
params,
140-
socketId: socket.id,
141-
payload,
142-
block,
143-
result });
144-
145-
}
146-
result.delayed = { fields: delayed.fields, registry };
147-
}
148-
socket.emit('data', (0, _apiTools.formatRes)({ module, action, result, req: payload }));
160+
const req = payload;
161+
const { module, action, result } = delayedResult(res, payload, socket);
162+
socket.emit('data', (0, _apiTools.formatRes)({ module, action, result, req }));
149163
} catch (err) {
150164
_log.default.debug(`Action: ${payload.action}: ERROR: ${err}`);
151165
_log.default.trace(err);

dist/api/modules/ContractVerification.js

+7-6
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
var _StoredConfig = require("../../lib/StoredConfig");
33
var _ContractVerifierModule = require("../../services/userEvents/ContractVerifierModule");
44
var _Errors = require("../lib/Errors");
5-
var _mongodb = require("mongodb");
6-
var _types = require("../../lib/types");
5+
6+
var _types = require("../../lib/types"); // import { ObjectID } from 'mongodb'
77

88
class ContractVerification extends _DataCollector.DataCollectorItem {
99
constructor(collections, name) {
@@ -58,12 +58,14 @@ class ContractVerification extends _DataCollector.DataCollectorItem {
5858

5959
// TODO Check if has pending verifications
6060

61-
const { creationCode, code } = data;
61+
// const { creationCode, code } = data
62+
const { creationCode } = data;
6263
if (!creationCode) throw new _Errors.Error404('Contract creation data not found');
6364

6465
// Contract verifier payload
6566
request.bytecode = creationCode;
66-
request.deployedBytecode = code;
67+
// request.deployedBytecode = code
68+
request._id = (0, _ContractVerifierModule.getVerificationId)(request);
6769
return { data: request };
6870
} catch (err) {
6971
return Promise.reject(err);
@@ -130,8 +132,7 @@ class ContractVerification extends _DataCollector.DataCollectorItem {
130132
try {
131133
let { id } = params;
132134
if (!id) throw new Error('Invalid id');
133-
const _id = (0, _mongodb.ObjectID)(id);
134-
const verification = await this.getOne({ _id });
135+
const verification = await this.getOne({ _id: id });
135136
if (verification && verification.data) {
136137
const { result, match } = verification.data;
137138
return { data: { result, match } };

dist/api/modules/VerificationResults.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ class VerificationResults extends _DataCollector.DataCollectorItem {
4545
* $ref: '#/responses/NotFound'
4646
*/
4747
getVerification: async params => {
48-
const { address } = params;
48+
const { address, fields } = params;
4949
const query = { address, match: true };
50-
return this.getItem(query, params);
50+
return this.getOne(query, fields);
5151
} };
5252

5353
}}exports.VerificationResults = VerificationResults;var _default =

dist/api/routes/api.js

+17-15
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,30 @@
22
var _bodyParser = _interopRequireDefault(require("body-parser"));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
33
const router = _express.default.Router();
44

5-
const Routes = ({ log, api }) => {
6-
const getResult = async (api, { module, action, params }) => {
5+
const Routes = ({ log, api }, send) => {
6+
const getResult = async ({ module, action, params }) => {
77
try {
8-
const { result } = await api.run({ module, action, params });
9-
if (!result) throw new Error('Missing result');
10-
if (!result.data) throw new Error('Missing data');
11-
return result;
8+
const response = await api.run({ module, action, params });
9+
if (!response.result) throw new Error('Missing result');
10+
// if (!result.data) throw new Error('Missing data')
11+
return response;
1212
} catch (err) {
13+
log.debug({ module, action, params });
1314
return Promise.reject(err);
1415
}
1516
};
16-
const sendResult = async (api, res, { module, action, params }) => {
17-
let result;
17+
const sendResult = async ({ res, req, next }, payload) => {
18+
const { module, action } = payload;
19+
let response;
1820
try {
1921
if (!!module !== !!action) {
2022
res.status(400).send();
2123
return;
2224
}
23-
if (!module && !action) result = api.info();else
24-
result = await getResult(api, { module, action, params });
25-
if (!result) throw new Error('Empty result');
26-
res.send(result);
25+
if (!module && !action) response = { result: api.info() };else
26+
response = await getResult(payload);
27+
if (typeof send === 'function') send({ response, res, req, next, payload });else
28+
res.send(response.result);
2729
} catch (err) {
2830
res.status(404).send();
2931
log.error(err);
@@ -35,11 +37,11 @@ const Routes = ({ log, api }) => {
3537
const { module, action } = params;
3638
delete params.module;
3739
delete params.action;
38-
return sendResult(api, res, { module, action, params });
40+
return sendResult({ res, req, next }, { module, action, params });
3941
});
4042

41-
router.post('/', _bodyParser.default.json(), (req, res, next) => {
42-
return sendResult(api, res, req.body);
43+
router.post('/', _bodyParser.default.json({ limit: '5mb' }), (req, res, next) => {
44+
return sendResult({ res, req, next }, req.body);
4345
});
4446

4547
return router;

dist/lib/collections.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,11 @@
257257

258258
{
259259
key: { match: 1 },
260-
name: 'verificationsResultsMatchIndex' }] },
260+
name: 'verificationsResultsMatchIndex' },
261+
262+
{
263+
key: { address: 1, match: 1 },
264+
name: 'verificationResultAddressMatchIndex' }] },
261265

262266

263267

dist/services/userEvents/ContractVerifierModule.js

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.ContractVerifierModule = ContractVerifierModule;exports.replaceImport = replaceImport;exports.extractUsedSourcesFromRequest = extractUsedSourcesFromRequest;exports.default = exports.versionsId = void 0;var _socket = _interopRequireDefault(require("socket.io-client"));
1+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.ContractVerifierModule = ContractVerifierModule;exports.replaceImport = replaceImport;exports.extractUsedSourcesFromRequest = extractUsedSourcesFromRequest;exports.getVerificationId = getVerificationId;exports.default = exports.versionsId = void 0;var _socket = _interopRequireDefault(require("socket.io-client"));
22
var _StoredConfig = require("../../lib/StoredConfig");
3-
var _mongodb = require("mongodb");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
3+
var _rskUtils = require("@rsksmart/rsk-utils");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
44

55
// id to store solc versions list on Config collection
66
const versionsId = '_contractVerifierVersions';exports.versionsId = versionsId;
@@ -41,7 +41,7 @@ function ContractVerifierModule(db, collections, { url } = {}, { log } = {}) {
4141
const result = data ? data.result : null;
4242
let { _id, address } = request;
4343
if (!_id) throw new Error(`Missing _id {$request}`);
44-
_id = (0, _mongodb.ObjectID)(_id);
44+
// _id = ObjectID(_id)
4545
log.debug(`New verification received ${address}`);
4646
// Update verification
4747
const match = checkResult(result || {});
@@ -81,11 +81,12 @@ function ContractVerifierModule(db, collections, { url } = {}, { log } = {}) {
8181
const { data } = result;
8282
const { module, action } = payload;
8383
const { address } = data;
84-
delete data._id;
84+
// delete data._id
85+
const { _id } = data;
8586
if (!address) throw new Error(`Missing address in verification`);
86-
let res = await collection.insertOne({ address, request: data, timestamp: Date.now() });
87+
let res = await collection.insertOne({ _id, address, request: data, timestamp: Date.now() });
8788
const id = res.insertedId;
88-
if (!id) throw new Error(`Error creating pending verification`);
89+
if (!id || id !== _id) throw new Error(`Error creating pending verification`);
8990
data._id = id;
9091
log.debug(`Sending verification to verifier ID:${id}`);
9192
if (!socket.connected) throw new Error('Cannot connect to contract verifier');
@@ -140,6 +141,12 @@ function extractUsedSourcesFromRequest({ source, imports }, { usedSources }) {
140141
const { contents } = imp;
141142
return { name, contents };
142143
});
144+
}
145+
146+
function getVerificationId({ address }) {
147+
if (!(0, _rskUtils.isAddress)(address)) throw new Error(`Invalid address ${address}`);
148+
const timestamp = Date.now();
149+
return (0, _rskUtils.add0x)((0, _rskUtils.keccak256)(`${address}${timestamp}`));
143150
}var _default =
144151

145152
ContractVerifierModule;exports.default = _default;

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rsk-explorer-api",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"description": "",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)