@pokt-network/pocket-js
Version:
Pocket-js core package with the main functionalities to interact with the Pocket Network.
80 lines • 3.48 kB
JavaScript
;
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