@vechain/connex.driver-nodejs
Version:
Connex framework driver implementation in NodeJS
85 lines • 5.61 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const WS = require("ws/index");
const json_rpc_1 = require("@vechain/json-rpc");
const options_1 = require("./options");
const methods = [
'pollHead',
'getBlock',
'getTransaction',
'getReceipt',
'getAccount',
'getCode',
'getStorage',
'explain',
'filterEventLogs',
'filterTransferLogs',
'signTx',
'signCert',
'isAddressOwned',
];
class DriverHost {
constructor(server, path, acceptor) {
this.wss = new WS.Server({
server,
path
});
this.wss.on('connection', (ws, req) => __awaiter(this, void 0, void 0, function* () {
this.handleConnection(ws, req, acceptor);
}));
}
close() {
this.wss.close();
}
handleConnection(ws, req, acceptor) {
const rpc = new json_rpc_1.JSONRPC((data, isRequest) => {
if (!isRequest) {
data = ' ' + data;
}
ws.send(data);
return Promise.resolve();
});
ws.on('message', data => {
const isRequest = data[0] !== ' ';
rpc.receive(data, isRequest).catch(err => {
if (!options_1.options.disableErrorLog) {
// tslint:disable-next-line: no-console
console.warn('receive jsonrpc payload: ', err);
}
});
});
let driver;
rpc.serve(method => {
if (method === 'connect') {
return (genesisId) => __awaiter(this, void 0, void 0, function* () {
if (driver) {
throw new Error('already accepted');
}
driver = yield acceptor(ws, req, genesisId);
return {
genesis: driver.genesis,
head: driver.head
};
});
}
if (methods.includes(method)) {
return (...args) => {
if (!driver) {
throw new Error('not accepted');
}
return driver[method](...args);
};
}
});
}
}
exports.DriverHost = DriverHost;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmVyLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHJpdmVyLWhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLCtCQUE4QjtBQUM5QixnREFBMkM7QUFHM0MsdUNBQW1DO0FBRW5DLE1BQU0sT0FBTyxHQUErQjtJQUN4QyxVQUFVO0lBQ1YsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osWUFBWTtJQUNaLFNBQVM7SUFDVCxZQUFZO0lBQ1osU0FBUztJQUNULGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsUUFBUTtJQUNSLFVBQVU7SUFDVixnQkFBZ0I7Q0FDbkIsQ0FBQTtBQUVELE1BQWEsVUFBVTtJQUVuQixZQUNJLE1BQWtDLEVBQ2xDLElBQVksRUFDWixRQUE2QjtRQUU3QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNyQixNQUFNO1lBQ04sSUFBSTtTQUNQLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM1QyxDQUFDLENBQUEsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVNLEtBQUs7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxFQUFNLEVBQUUsR0FBeUIsRUFBRSxRQUE2QjtRQUNyRixNQUFNLEdBQUcsR0FBRyxJQUFJLGtCQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDWixJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQTthQUNwQjtZQUNELEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDYixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUM1QixDQUFDLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sU0FBUyxHQUFJLElBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUE7WUFDN0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFjLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsaUJBQU8sQ0FBQyxlQUFlLEVBQUU7b0JBQzFCLHVDQUF1QztvQkFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxHQUFHLENBQUMsQ0FBQTtpQkFDakQ7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxNQUFpQyxDQUFBO1FBRXJDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDZixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLE9BQU8sQ0FBTyxTQUFrQixFQUFFLEVBQUU7b0JBQ2hDLElBQUksTUFBTSxFQUFFO3dCQUNSLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtxQkFDdEM7b0JBQ0QsTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLEVBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUE7b0JBQ2xELE9BQU87d0JBQ0gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO3dCQUN2QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7cUJBQ3BCLENBQUE7Z0JBQ0wsQ0FBQyxDQUFBLENBQUE7YUFDSjtZQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFhLENBQUMsRUFBRTtnQkFDakMsT0FBTyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtxQkFDbEM7b0JBQ0QsT0FBUSxNQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtnQkFDM0MsQ0FBQyxDQUFBO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7Q0FDSjtBQWhFRCxnQ0FnRUMifQ==