UNPKG

signalk-server

Version:

An implementation of a [Signal K](http://signalk.org) server for boats.

61 lines (60 loc) 2.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.validate = void 0; const api_schema_builder_1 = require("api-schema-builder"); const _1 = require("."); const debug_1 = require("../../debug"); const openApi_json_1 = __importDefault(require("./openApi.json")); const debug = (0, debug_1.createDebug)('signalk-server:api:resources:validate'); class ValidationError extends Error { } const API_SCHEMA = (0, api_schema_builder_1.buildSchemaSync)(openApi_json_1.default); exports.validate = { resource: (type, id, method, // eslint-disable-next-line @typescript-eslint/no-explicit-any value) => { debug(`Validating ${type} ${method} ${JSON.stringify(value)}`); const endpoint = API_SCHEMA[`${_1.RESOURCES_API_PATH}/${type}${id ? '/:id' : ''}`][method.toLowerCase()]; if (!endpoint) { throw new Error(`Validation: endpoint for ${type} ${method} not found`); } const valid = endpoint.body.validate(value); if (valid) { return; } else { debug(endpoint.body.errors); throw new ValidationError(JSON.stringify(endpoint.body.errors)); } }, query: (type, id, method, // eslint-disable-next-line @typescript-eslint/no-explicit-any value) => { debug(`*** Validating query params for ${type} ${method} ${JSON.stringify(value)}`); const endpoint = API_SCHEMA[`${_1.RESOURCES_API_PATH}/${type}${id ? '/:id' : ''}`][method.toLowerCase()]; if (!endpoint) { throw new Error(`Validation: endpoint for ${type} ${method} not found`); } const valid = endpoint.parameters.validate({ query: value }); if (valid) { return; } else { debug(endpoint.parameters.errors); throw new ValidationError(JSON.stringify(endpoint.parameters.errors)); } }, // returns true if id is a valid Signal K UUID uuid: (id) => { const uuid = RegExp('^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$'); return uuid.test(id); }, // returns true if id is a valid Signal K Chart resource id chartId: (id) => { const uuid = RegExp('(^[A-Za-z0-9_-]{8,}$)'); return uuid.test(id); } };