UNPKG

@vechain/connex.driver-nodejs

Version:

Connex framework driver implementation in NodeJS

85 lines 5.61 kB
"use strict"; 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==