UNPKG

mokka

Version:

Mokka Consensus Algorithm implementation in Javascript

56 lines 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Mokka = void 0; const MessageApi_1 = require("./api/MessageApi"); const NodeApi_1 = require("./api/NodeApi"); const HeartbeatController_1 = require("./controllers/HeartbeatController"); const NodeModel_1 = require("./models/NodeModel"); const RequestProcessorService_1 = require("./services/RequestProcessorService"); class Mokka extends NodeModel_1.NodeModel { constructor(options) { super(options.privateKey, options.address, options.crashModel); this.heartbeat = options.heartbeat; this.electionTimeout = options.electionTimeout; this.proofExpiration = options.proofExpiration; this.logger = options.logger || { // tslint:disable-next-line error: console.log, // tslint:disable-next-line info: console.log, // tslint:disable-next-line trace: console.log }; this.reqMiddleware = options.reqMiddleware ? options.reqMiddleware : async (packet) => packet; this.resMiddleware = options.resMiddleware ? options.resMiddleware : async (packet) => packet; this.customVoteRule = options.customVoteRule ? options.customVoteRule : async (packet) => true; this.heartbeatCtrl = new HeartbeatController_1.HeartbeatController(this); this.requestProcessorService = new RequestProcessorService_1.RequestProcessorService(this); this.nodeApi = new NodeApi_1.NodeApi(this); this.messageApi = new MessageApi_1.MessageApi(this); } quorum(responses) { if (!this.nodes.size || !responses) return false; return responses >= this.majority(); } setVote(vote) { this.vote = vote; } connect() { this.heartbeatCtrl.setNextBeat(this.heartbeatCtrl.timeout()); this.heartbeatCtrl.watchBeat(); } async disconnect() { await this.heartbeatCtrl.stopBeat(); } async emitPacket(packet) { let parsedPacket = this.messageApi.decodePacket(packet); parsedPacket = await this.reqMiddleware(parsedPacket); await this.requestProcessorService.process(parsedPacket); } } exports.Mokka = Mokka; //# sourceMappingURL=main.js.map