osc-mcp-server
Version:
Model Context Protocol server for OSC (Open Sound Control) endpoint management
188 lines • 7.45 kB
JavaScript
;
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