// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { JSONPrimitive } from '@lumino/coreutils'; import { IObservableDisposable } from '@lumino/disposable'; import { ISignal } from '@lumino/signaling'; import { ServerConnection } from '..'; import { IManager as IBaseManager } from '../basemanager'; import { IModel, isAvailable } from './restapi'; export { IModel, isAvailable }; export namespace ITerminal { export interface IOptions { /** * The terminal name. */ name?: string; /** * The terminal current directory. */ cwd?: string; } } /** * An interface for a terminal session. */ export interface ITerminalConnection extends IObservableDisposable { /** * A signal emitted when a message is received from the server. */ messageReceived: ISignal; /** * Get the name of the terminal session. */ readonly name: string; /** * The model associated with the session. */ readonly model: IModel; /** * The server settings for the session. */ readonly serverSettings: ServerConnection.ISettings; /** * The current connection status of the terminal. */ readonly connectionStatus: ConnectionStatus; /** * A signal emitted when the terminal connection status changes. */ connectionStatusChanged: ISignal; /** * Send a message to the terminal session. */ send(message: IMessage): void; /** * Reconnect to the terminal. * * @returns A promise that resolves when the terminal has reconnected. */ reconnect(): Promise; /** * Shut down the terminal session. */ shutdown(): Promise; } export namespace ITerminalConnection { export interface IOptions { /** * Terminal model. */ model: IModel; /** * The server settings. */ serverSettings?: ServerConnection.ISettings; } } /** * A message from the terminal session. */ export interface IMessage { /** * The type of the message. */ readonly type: MessageType; /** * The content of the message. */ readonly content?: JSONPrimitive[]; } /** * Valid message types for the terminal. */ export type MessageType = 'stdout' | 'disconnect' | 'set_size' | 'stdin'; /** * The interface for a terminal manager. * * #### Notes * The manager is responsible for maintaining the state of running * terminal sessions. */ export interface IManager extends IBaseManager { /** * A signal emitted when the running terminals change. */ runningChanged: ISignal; /** * A signal emitted when there is a connection failure. */ connectionFailure: ISignal; /** * Test whether the manager is ready. */ readonly isReady: boolean; /** * A promise that fulfills when the manager is ready. */ readonly ready: Promise; /** * Whether the terminal service is available. */ isAvailable(): boolean; /** * Create an iterator over the known running terminals. * * @returns A new iterator over the running terminals. */ running(): IterableIterator; /** * Create a new terminal session. * * @param options - The options used to create the terminal. * * @returns A promise that resolves with the terminal connection instance. * * #### Notes * The manager `serverSettings` will be always be used. */ startNew(options?: ITerminal.IOptions): Promise; /* * Connect to a running session. * * @param options - The options used to connect to the terminal. * * @returns The new terminal connection instance. */ connectTo( options: Omit ): ITerminalConnection; /** * Shut down a terminal session by name. * * @param name - The name of the terminal session. * * @returns A promise that resolves when the session is shut down. */ shutdown(name: string): Promise; /** * Shut down all terminal sessions. * * @returns A promise that resolves when all of the sessions are shut down. */ shutdownAll(): Promise; /** * Force a refresh of the running terminal sessions. * * @returns A promise that with the list of running sessions. * * #### Notes * This is not typically meant to be called by the user, since the * manager maintains its own internal state. */ refreshRunning(): Promise; } /** * The valid terminal connection states. * * #### Notes * The status states are: * * `connected`: The terminal connection is live. * * `connecting`: The terminal connection is not live, but we are attempting * to reconnect to the terminal. * * `disconnected`: The terminal connection is down, we are not * trying to reconnect. */ export type ConnectionStatus = 'connected' | 'connecting' | 'disconnected';