UNPKG

@mickdarling/dollhousemcp

Version:

DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.

47 lines 5.73 kB
/** * Security-specific error class for DollhouseMCP * * Used to indicate security violations, validation failures, * and other security-related issues. */ export class SecurityError extends Error { code; severity; details; constructor(message, code = 'SECURITY_VIOLATION', severity = 'high', details) { super(message); this.name = 'SecurityError'; this.code = code; this.severity = severity; this.details = details; // Maintains proper stack trace for where our error was thrown if (Error.captureStackTrace) { Error.captureStackTrace(this, SecurityError); } } /** * Creates a SecurityError for content validation failures */ static contentValidation(message, patterns) { return new SecurityError(message, 'CONTENT_VALIDATION_FAILED', 'high', { detectedPatterns: patterns }); } /** * Creates a SecurityError for YAML injection attempts */ static yamlInjection(message) { return new SecurityError(message, 'YAML_INJECTION_DETECTED', 'critical'); } /** * Creates a SecurityError for path traversal attempts */ static pathTraversal(message, path) { return new SecurityError(message, 'PATH_TRAVERSAL_DETECTED', 'high', { attemptedPath: path }); } /** * Creates a SecurityError for token validation failures */ static tokenValidation(message) { return new SecurityError(message, 'TOKEN_VALIDATION_FAILED', 'high'); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlFcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lcnJvcnMvU2VjdXJpdHlFcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxhQUFjLFNBQVEsS0FBSztJQUN0QixJQUFJLENBQVM7SUFDYixRQUFRLENBQXlDO0lBQ2pELE9BQU8sQ0FBdUI7SUFFOUMsWUFDRSxPQUFlLEVBQ2YsT0FBZSxvQkFBb0IsRUFDbkMsV0FBbUQsTUFBTSxFQUN6RCxPQUE2QjtRQUU3QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2Qiw4REFBOEQ7UUFDOUQsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBZSxFQUFFLFFBQW1CO1FBQzNELE9BQU8sSUFBSSxhQUFhLENBQ3RCLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsTUFBTSxFQUNOLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQWU7UUFDbEMsT0FBTyxJQUFJLGFBQWEsQ0FDdEIsT0FBTyxFQUNQLHlCQUF5QixFQUN6QixVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBZSxFQUFFLElBQWE7UUFDakQsT0FBTyxJQUFJLGFBQWEsQ0FDdEIsT0FBTyxFQUNQLHlCQUF5QixFQUN6QixNQUFNLEVBQ04sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQWU7UUFDcEMsT0FBTyxJQUFJLGFBQWEsQ0FDdEIsT0FBTyxFQUNQLHlCQUF5QixFQUN6QixNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VjdXJpdHktc3BlY2lmaWMgZXJyb3IgY2xhc3MgZm9yIERvbGxob3VzZU1DUFxuICogXG4gKiBVc2VkIHRvIGluZGljYXRlIHNlY3VyaXR5IHZpb2xhdGlvbnMsIHZhbGlkYXRpb24gZmFpbHVyZXMsXG4gKiBhbmQgb3RoZXIgc2VjdXJpdHktcmVsYXRlZCBpc3N1ZXMuXG4gKi9cblxuZXhwb3J0IGNsYXNzIFNlY3VyaXR5RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzZXZlcml0eTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG4gIHB1YmxpYyByZWFkb25seSBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nID0gJ1NFQ1VSSVRZX1ZJT0xBVElPTicsXG4gICAgc2V2ZXJpdHk6ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnID0gJ2hpZ2gnLFxuICAgIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTZWN1cml0eUVycm9yJztcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMuc2V2ZXJpdHkgPSBzZXZlcml0eTtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuXG4gICAgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSBmb3Igd2hlcmUgb3VyIGVycm9yIHdhcyB0aHJvd25cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFNlY3VyaXR5RXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgU2VjdXJpdHlFcnJvciBmb3IgY29udGVudCB2YWxpZGF0aW9uIGZhaWx1cmVzXG4gICAqL1xuICBzdGF0aWMgY29udGVudFZhbGlkYXRpb24obWVzc2FnZTogc3RyaW5nLCBwYXR0ZXJucz86IHN0cmluZ1tdKTogU2VjdXJpdHlFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgbWVzc2FnZSxcbiAgICAgICdDT05URU5UX1ZBTElEQVRJT05fRkFJTEVEJyxcbiAgICAgICdoaWdoJyxcbiAgICAgIHsgZGV0ZWN0ZWRQYXR0ZXJuczogcGF0dGVybnMgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFNlY3VyaXR5RXJyb3IgZm9yIFlBTUwgaW5qZWN0aW9uIGF0dGVtcHRzXG4gICAqL1xuICBzdGF0aWMgeWFtbEluamVjdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBTZWN1cml0eUVycm9yIHtcbiAgICByZXR1cm4gbmV3IFNlY3VyaXR5RXJyb3IoXG4gICAgICBtZXNzYWdlLFxuICAgICAgJ1lBTUxfSU5KRUNUSU9OX0RFVEVDVEVEJyxcbiAgICAgICdjcml0aWNhbCdcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTZWN1cml0eUVycm9yIGZvciBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0c1xuICAgKi9cbiAgc3RhdGljIHBhdGhUcmF2ZXJzYWwobWVzc2FnZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nKTogU2VjdXJpdHlFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgbWVzc2FnZSxcbiAgICAgICdQQVRIX1RSQVZFUlNBTF9ERVRFQ1RFRCcsXG4gICAgICAnaGlnaCcsXG4gICAgICB7IGF0dGVtcHRlZFBhdGg6IHBhdGggfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFNlY3VyaXR5RXJyb3IgZm9yIHRva2VuIHZhbGlkYXRpb24gZmFpbHVyZXNcbiAgICovXG4gIHN0YXRpYyB0b2tlblZhbGlkYXRpb24obWVzc2FnZTogc3RyaW5nKTogU2VjdXJpdHlFcnJvciB7XG4gICAgcmV0dXJuIG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgbWVzc2FnZSxcbiAgICAgICdUT0tFTl9WQUxJREFUSU9OX0ZBSUxFRCcsXG4gICAgICAnaGlnaCdcbiAgICApO1xuICB9XG59Il19