UNPKG

osc-mcp-server

Version:

Model Context Protocol server for OSC (Open Sound Control) endpoint management

188 lines 7.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParameterValidator = void 0; exports.validatePort = validatePort; exports.validateBufferSize = validateBufferSize; exports.validateAddressPattern = validateAddressPattern; exports.validateAddressFilters = validateAddressFilters; exports.validateEndpointId = validateEndpointId; exports.validateTimeWindow = validateTimeWindow; exports.validateLimit = validateLimit; exports.validateCreateEndpointParams = validateCreateEndpointParams; exports.validateStopEndpointParams = validateStopEndpointParams; exports.validateGetMessagesParams = validateGetMessagesParams; exports.validateGetEndpointStatusParams = validateGetEndpointStatusParams; const index_1 = require("./index"); function validResult() { return { isValid: true }; } function invalidResult(error) { return { isValid: false, error }; } function validatePort(port) { if (port === undefined || port === null) { return invalidResult(index_1.ValidationErrors.missingParameter('port')); } if (typeof port !== 'number' || !Number.isInteger(port)) { return invalidResult(index_1.ValidationErrors.invalidParameter('port', port, 'integer')); } if (port < 1024 || port > 65535) { return invalidResult(index_1.ValidationErrors.parameterOutOfRange('port', port, 1024, 65535)); } return validResult(); } function validateBufferSize(bufferSize) { if (bufferSize === undefined || bufferSize === null) { return validResult(); } if (typeof bufferSize !== 'number' || !Number.isInteger(bufferSize)) { return invalidResult(index_1.ValidationErrors.invalidParameter('bufferSize', bufferSize, 'integer')); } if (bufferSize < 1 || bufferSize > 10000) { return invalidResult(index_1.ValidationErrors.parameterOutOfRange('bufferSize', bufferSize, 1, 10000)); } return validResult(); } function validateAddressPattern(pattern) { if (!pattern.startsWith('/')) { return invalidResult(index_1.ValidationErrors.invalidAddressPattern(pattern)); } const invalidChars = /[<>"|\\]/; if (invalidChars.test(pattern)) { return invalidResult(index_1.ValidationErrors.invalidAddressPattern(pattern)); } return validResult(); } function validateAddressFilters(filters) { if (filters === undefined || filters === null) { return validResult(); } if (!Array.isArray(filters)) { return invalidResult(index_1.ValidationErrors.invalidParameter('addressFilters', filters, 'array')); } for (let i = 0; i < filters.length; i++) { const filter = filters[i]; if (typeof filter !== 'string') { return invalidResult(index_1.ValidationErrors.invalidParameter(`addressFilters[${i}]`, filter, 'string')); } const patternResult = validateAddressPattern(filter); if (!patternResult.isValid) { return patternResult; } } return validResult(); } function validateEndpointId(endpointId) { if (endpointId === undefined || endpointId === null || endpointId === '') { return invalidResult(index_1.ValidationErrors.missingParameter('endpointId')); } if (typeof endpointId !== 'string') { return invalidResult(index_1.ValidationErrors.invalidParameter('endpointId', endpointId, 'string')); } if (endpointId.trim().length === 0) { return invalidResult(index_1.ValidationErrors.invalidParameter('endpointId', endpointId, 'non-empty string')); } return validResult(); } function validateTimeWindow(timeWindowSeconds) { if (timeWindowSeconds === undefined || timeWindowSeconds === null) { return validResult(); } if (typeof timeWindowSeconds !== 'number') { return invalidResult(index_1.ValidationErrors.invalidParameter('timeWindowSeconds', timeWindowSeconds, 'number')); } if (timeWindowSeconds < 1 || timeWindowSeconds > 86400) { return invalidResult(index_1.ValidationErrors.parameterOutOfRange('timeWindowSeconds', timeWindowSeconds, 1, 86400)); } return validResult(); } function validateLimit(limit) { if (limit === undefined || limit === null) { return validResult(); } if (typeof limit !== 'number' || !Number.isInteger(limit)) { return invalidResult(index_1.ValidationErrors.invalidParameter('limit', limit, 'integer')); } if (limit < 1 || limit > 1000) { return invalidResult(index_1.ValidationErrors.parameterOutOfRange('limit', limit, 1, 1000)); } return validResult(); } function validateCreateEndpointParams(params) { if (!params || typeof params !== 'object') { return invalidResult(index_1.ValidationErrors.invalidParameter('params', params, 'object')); } const portResult = validatePort(params.port); if (!portResult.isValid) { return portResult; } const bufferSizeResult = validateBufferSize(params.bufferSize); if (!bufferSizeResult.isValid) { return bufferSizeResult; } const filtersResult = validateAddressFilters(params.addressFilters); if (!filtersResult.isValid) { return filtersResult; } return validResult(); } function validateStopEndpointParams(params) { if (!params || typeof params !== 'object') { return invalidResult(index_1.ValidationErrors.invalidParameter('params', params, 'object')); } return validateEndpointId(params.endpointId); } function validateGetMessagesParams(params) { if (!params || typeof params !== 'object') { return invalidResult(index_1.ValidationErrors.invalidParameter('params', params, 'object')); } if (params.endpointId !== undefined) { const endpointIdResult = validateEndpointId(params.endpointId); if (!endpointIdResult.isValid) { return endpointIdResult; } } if (params.addressPattern !== undefined) { if (typeof params.addressPattern !== 'string') { return invalidResult(index_1.ValidationErrors.invalidParameter('addressPattern', params.addressPattern, 'string')); } const patternResult = validateAddressPattern(params.addressPattern); if (!patternResult.isValid) { return patternResult; } } const timeWindowResult = validateTimeWindow(params.timeWindowSeconds); if (!timeWindowResult.isValid) { return timeWindowResult; } const limitResult = validateLimit(params.limit); if (!limitResult.isValid) { return limitResult; } return validResult(); } function validateGetEndpointStatusParams(params) { if (!params || typeof params !== 'object') { return invalidResult(index_1.ValidationErrors.invalidParameter('params', params, 'object')); } if (params.endpointId !== undefined) { return validateEndpointId(params.endpointId); } return validResult(); } class ParameterValidator { static validateCreateEndpoint(params) { return validateCreateEndpointParams(params); } static validateStopEndpoint(params) { return validateStopEndpointParams(params); } static validateGetMessages(params) { return validateGetMessagesParams(params); } static validateGetEndpointStatus(params) { return validateGetEndpointStatusParams(params); } } exports.ParameterValidator = ParameterValidator; //# sourceMappingURL=validation.js.map