webssh2-server
Version:
A Websocket to SSH2 gateway using xterm.js, socket.io, ssh2
114 lines (113 loc) • 3.4 kB
TypeScript
import type { Result } from '../types/result.js';
import type { SshHost, SshPort, Username, Password, TerminalType } from '../types/branded.js';
/**
* Validation error
*/
export interface ValidationError {
readonly field: string;
readonly value: unknown;
readonly message: string;
readonly constraint: string | undefined;
}
/**
* Validation result
*/
export type ValidationResult<T> = Result<T, ValidationError[]>;
/**
* Common validation constraints
*/
export declare const Constraints: {
readonly HOST: {
readonly MIN_LENGTH: 1;
readonly MAX_LENGTH: 255;
};
readonly PORT: {
readonly MIN: 1;
readonly MAX: 65535;
};
readonly USERNAME: {
readonly MIN_LENGTH: 1;
readonly MAX_LENGTH: 255;
readonly PATTERN: RegExp;
};
readonly PASSWORD: {
readonly MIN_LENGTH: 0;
readonly MAX_LENGTH: 4096;
};
readonly TERM: {
readonly MIN_LENGTH: 1;
readonly MAX_LENGTH: 50;
readonly PATTERN: RegExp;
readonly DEFAULT: "xterm-256color";
};
readonly ENV_VAR_NAME: {
readonly PATTERN: RegExp;
};
readonly ENV_VAR_VALUE: {
readonly MAX_LENGTH: 4096;
};
readonly PATH: {
readonly MAX_LENGTH: 4096;
readonly PATTERN: RegExp;
};
readonly URL: {
readonly MAX_LENGTH: 2048;
};
};
/**
* Validate hostname or IP address
*/
export declare function validateHost(value: unknown, field?: string): ValidationResult<SshHost>;
/**
* Validate optional host
*/
export declare function validateOptionalHost(value: unknown, field?: string): ValidationResult<SshHost | null>;
/**
* Validate port number
*/
export declare function validatePort(value: unknown, field?: string): ValidationResult<SshPort>;
/**
* Validate username
*/
export declare function validateUsername(value: unknown, field?: string): ValidationResult<Username>;
/**
* Validate optional username
*/
export declare function validateOptionalUsername(value: unknown, field?: string): ValidationResult<Username | null>;
/**
* Validate password
*/
export declare function validatePassword(value: unknown, field?: string, options?: {
minLength?: number;
maxLength?: number;
required?: boolean;
}): ValidationResult<Password>;
/**
* Validate terminal type
*/
export declare function validateTerminal(value: unknown, field?: string): ValidationResult<TerminalType | null>;
/**
* Validate environment variable
*/
export declare function validateEnvVar(name: unknown, value: unknown): ValidationResult<[string, string]>;
/**
* Validate object against schema
*/
export type FieldValidator<T> = (value: unknown, field: string) => ValidationResult<T>;
export interface Schema {
[field: string]: FieldValidator<unknown>;
}
/**
* Validate object against schema
*/
export declare function validateObject<T extends Record<string, unknown>>(obj: unknown, schema: Schema): ValidationResult<T>;
/**
* Combine multiple validation results
*/
export declare function combineValidations<T extends readonly unknown[]>(...validations: {
[K in keyof T]: ValidationResult<T[K]>;
}): ValidationResult<T>;
/**
* Create custom validator
*/
export declare function createValidator<T>(validate: (value: unknown) => boolean, transform: (value: unknown) => T, errorMessage: string, constraint?: string): FieldValidator<T>;