webssh2-server
Version:
A Websocket to SSH2 gateway using xterm.js, socket.io, ssh2
85 lines (84 loc) • 3.33 kB
TypeScript
/**
* State selectors for deriving data from session state
* All selectors are pure functions with no side effects
*/
import type { SessionState, AuthState, ConnectionState } from './types.js';
import type { ConnectionId, SessionId, UserId } from '../types/branded.js';
/**
* Authentication selectors
*/
export declare const isAuthenticated: (state: SessionState) => boolean;
export declare const isAuthPending: (state: SessionState) => boolean;
export declare const hasAuthError: (state: SessionState) => boolean;
export declare const getAuthError: (state: SessionState) => string | null;
export declare const getAuthMethod: (state: SessionState) => AuthState["method"];
export declare const getUsername: (state: SessionState) => string | null;
/**
* Connection selectors
*/
export declare const isConnected: (state: SessionState) => boolean;
export declare const isConnecting: (state: SessionState) => boolean;
export declare const hasConnectionError: (state: SessionState) => boolean;
export declare const getConnectionError: (state: SessionState) => string | null;
export declare const getConnectionInfo: (state: SessionState) => {
host: string | null;
port: number | null;
status: ConnectionState["status"];
connectionId: ConnectionId | null;
};
export declare const getConnectionStatus: (state: SessionState) => ConnectionState["status"];
/**
* Terminal selectors
*/
export declare const getTerminalDimensions: (state: SessionState) => {
rows: number;
cols: number;
};
export declare const getTerminalType: (state: SessionState) => string;
export declare const getTerminalEnvironment: (state: SessionState) => Readonly<Record<string, string>>;
export declare const getWorkingDirectory: (state: SessionState) => string | null;
/**
* Combined selectors
*/
export declare const canExecuteCommands: (state: SessionState) => boolean;
export declare const canResize: (state: SessionState) => boolean;
export declare const isSessionActive: (state: SessionState) => boolean;
export declare const getSessionSummary: (state: SessionState) => {
id: SessionId;
authenticated: boolean;
connected: boolean;
username: string | null;
host: string | null;
port: number | null;
terminal: string;
dimensions: {
rows: number;
cols: number;
};
};
/**
* Metadata selectors
*/
export declare const getSessionAge: (state: SessionState) => number;
export declare const getLastActivity: (state: SessionState) => number;
export declare const getIdleTime: (state: SessionState) => number;
export declare const isIdle: (state: SessionState, threshold?: number) => boolean;
export declare const getClientInfo: (state: SessionState) => {
ip: string | null;
userAgent: string | null;
userId: UserId | null;
};
/**
* Error selectors
*/
export declare const getAllErrors: (state: SessionState) => string[];
export declare const hasAnyError: (state: SessionState) => boolean;
/**
* Status selectors
*/
export declare const getOverallStatus: (state: SessionState) => "initializing" | "authenticating" | "connecting" | "ready" | "error" | "closed";
/**
* Feature flag selectors (for gradual rollout)
*/
export declare const shouldUseNewAuth: (_state: SessionState) => boolean;
export declare const shouldUseConnectionPool: (_state: SessionState) => boolean;