UNPKG

rpc-websocketserver

Version:

Simple rpc websocket server, wrapping the very popular 'ws' library. Register your RPCs with convenient decorators.

99 lines 4.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateParams = exports.validateMethod = exports.validateAndParseMessage = exports.assertValidRequest = exports.assertStringOrBuffer = void 0; /** * Assertion to ensure value to be string or Buffer * * @param val {*} - value to be asserted on * @param Err {ErrorType} - Error to be thrown if assertion fails */ function assertStringOrBuffer(val, Err) { if (!Buffer.isBuffer(val) && typeof val !== 'string') throw new Err("Message must be of type 'string' or 'Buffer'"); } exports.assertStringOrBuffer = assertStringOrBuffer; /** * Assertion to ensure value is a valid rpc request object * * @param val {*} - value to be asserted on * @param Err {ErrorType} - Error to be thrown if assertion fails */ function assertValidRequest(val, Err) { if (typeof (val === null || val === void 0 ? void 0 : val.method) !== 'string') throw new Err("Request must include prop 'method' with value of type 'string'"); if (val.hasOwnProperty('params')) { if (!Array.isArray(val.params) && typeof val.params !== 'object') throw new Err("Params must be one of 'object' or 'array'"); } } exports.assertValidRequest = assertValidRequest; /** * Validates and parses a message. Will throw error if parse/validation fails. * * @param message {*} - message to be parsed and validated * @param Err {ErrorType} - Error to be thrown if parse/validation fails * @returns {object} - parsed message */ function validateAndParseMessage(message, Err) { assertStringOrBuffer(message, Err); try { var m = Buffer.isBuffer(message) ? message.toString('utf8') : message; return JSON.parse(m); } catch (err) { throw new Err(err.message); } } exports.validateAndParseMessage = validateAndParseMessage; /** * Validates method for existence * * @param methodName {string} - method to be found * @param registeredMethods - registered method pool to find method in * @param Err - Error to be thrown if method could not be found * @returns {Method} */ function validateMethod(methodName, registeredMethods, Err) { var method = registeredMethods.get(methodName); if (!method) throw new Err("Method with name '" + methodName + "' could not be found."); return method; } exports.validateMethod = validateMethod; /** * Validates params for correctness * * @param providedParams {Params | MethodArgs | undefined} - params provided by client * @param expectedParams {Params} - expected params of registered method * @param Err {ErrorType} - Error to be thrown if params are incorrect * @returns {MethodArgs} - args to be passed to function */ function validateParams(providedParams, expectedParams, Err) { var expectedParamsKeys = Object.keys(expectedParams); var providedParamsKeys = []; var providedParamsLength = 0; if (Array.isArray(providedParams)) { providedParamsLength = providedParams.length; } else if (typeof providedParams === 'object') { providedParamsKeys = Object.keys(providedParams); providedParamsLength = providedParamsKeys.length; } if (providedParamsLength !== expectedParamsKeys.length) throw new Err("Expected " + expectedParamsKeys.length + " params. Received " + providedParamsLength + "."); var methodArgs = []; if (Array.isArray(providedParams)) { methodArgs = providedParams; } else if (typeof providedParams === 'object') { for (var i = 0; i < expectedParamsKeys.length; i++) { if (!providedParams.hasOwnProperty(expectedParamsKeys[i])) { throw new Err("Params must include '" + expectedParamsKeys[i] + "'"); } methodArgs.push(providedParams[expectedParamsKeys[i]]); } } return methodArgs; } exports.validateParams = validateParams; //# sourceMappingURL=utils.js.map