UNPKG

@pokt-network/pocket-js

Version:

Pocket-js core package with the main functionalities to interact with the Pocket Network.

80 lines 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateRelayProof = exports.validateRelayResponse = exports.validateMajorityResponse = exports.validateChallengeRequest = void 0; var hex_1 = require("./hex"); var type_guard_1 = require("./type-guard"); /** * Validates a ChallengeRequest * @param {ChallengeRequest} request - The ChallengeRequest to be evaluated. * @returns {Error | undefined}. */ function validateChallengeRequest(request) { switch (true) { case type_guard_1.typeGuard(validateRelayResponse(request.minorityResponse.relay), Error): return validateRelayResponse(request.minorityResponse.relay); case request.majorityResponse.relays.length !== 2: return new Error("Invalid majority request. The amount of relays needs to be equals to 2"); case type_guard_1.typeGuard(validateMajorityResponse(request.majorityResponse), Error): return validateMajorityResponse(request.majorityResponse); default: return undefined; } } exports.validateChallengeRequest = validateChallengeRequest; /** * Validates a MajorityResponse * @param {MajorityResponse} response - The MajorityResponse to be evaluated. * @returns {Error | undefined}. */ function validateMajorityResponse(response) { var result; response.relays.forEach(function (relay) { result = validateRelayResponse(relay); }); return result; } exports.validateMajorityResponse = validateMajorityResponse; /** * Validates a Relay response * @param {RelayResponse} relay - The Relay response to be evaluated. * @returns {Error | undefined}. */ function validateRelayResponse(relay) { switch (true) { // This should be a better check for validity case !hex_1.Hex.isHex(relay.signature): return new Error("Invalid signature, is not hex: " + relay.signature); case relay.relayRequest.proof.servicerPubKey !== relay.proof.servicerPubKey: return new Error("Request servicer public key is different than the response public key."); case relay.relayRequest.proof.signature !== relay.proof.signature: return new Error("Request proof signature is different than the response proof signature."); default: return undefined; } } exports.validateRelayResponse = validateRelayResponse; /** * Validates a RelayProof * @param {RelayProof} proof - The RelayProof to be evaluated. * @returns {Error | undefined}. */ function validateRelayProof(proof) { switch (true) { case proof.blockchain.length === 0: return new Error("Invalid chain. The chain cannot be empty"); case Number(proof.entropy.toString()) === undefined: return new Error("Invalid entropy. The entropy needs to be a number: " + proof.entropy); case !hex_1.Hex.isHex(proof.signature): return new Error("Invalid string is not hex: " + proof.signature); case !hex_1.Hex.isHex(proof.servicerPubKey): return new Error("Invalid string is not hex: " + proof.servicerPubKey); case Number(proof.sessionBlockHeight) === 0: return new Error("The Block Height needs to be bigger than 0"); case !proof.token.isValid(): return new Error("The token is invalid"); default: return undefined; } } exports.validateRelayProof = validateRelayProof; //# sourceMappingURL=validator.js.map