UNPKG

webssh2-server

Version:

A Websocket to SSH2 gateway using xterm.js, socket.io, ssh2

104 lines (103 loc) 2.73 kB
/** * State type definitions for immutable state management */ import type { SessionId, UserId, ConnectionId } from '../types/branded.js'; /** * Root session state - immutable */ export interface SessionState { readonly id: SessionId; readonly auth: AuthState; readonly connection: ConnectionState; readonly terminal: TerminalState; readonly metadata: SessionMetadata; } /** * Authentication state */ export interface AuthState { readonly status: 'pending' | 'authenticated' | 'failed'; readonly method: 'basic' | 'manual' | 'post' | 'keyboard-interactive' | null; readonly username: string | null; readonly timestamp: number; readonly errorMessage: string | null; } /** * SSH connection state */ export interface ConnectionState { readonly status: 'disconnected' | 'connecting' | 'connected' | 'error' | 'closed'; readonly connectionId: ConnectionId | null; readonly host: string | null; readonly port: number | null; readonly errorMessage: string | null; readonly lastActivity: number; } /** * Terminal state */ export interface TerminalState { readonly term: string; readonly rows: number; readonly cols: number; readonly environment: Readonly<Record<string, string>>; readonly cwd: string | null; } /** * Session metadata */ export interface SessionMetadata { readonly createdAt: number; readonly updatedAt: number; readonly clientIp: string | null; readonly userAgent: string | null; readonly userId: UserId | null; } /** * Connection pool entry */ export interface PooledConnection { readonly id: ConnectionId; readonly sessionId: SessionId; readonly status: ConnectionStatus; readonly createdAt: number; readonly lastActivity: number; readonly metrics: ConnectionMetrics; } /** * Connection status */ export type ConnectionStatus = 'idle' | 'active' | 'closing' | 'closed' | 'error'; /** * Connection metrics */ export interface ConnectionMetrics { readonly bytesReceived: number; readonly bytesSent: number; readonly packetsReceived: number; readonly packetsSent: number; readonly latency: number | null; } /** * State listener callback type */ export type StateListener = (newState: SessionState, oldState: SessionState) => void; /** * Result type for error handling */ export type Result<T, E = Error> = { ok: true; value: T; } | { ok: false; error: E; }; /** * Helper functions for Result type */ export declare const ok: <T>(value: T) => Result<T>; export declare const err: <E = Error>(error: E) => Result<never, E>; /** * Initial state factory */ export declare const createInitialState: (sessionId: SessionId) => SessionState;