mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-29 22:55:24 +00:00
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
/**
|
|
* What core needs from live SSH terminal sessions, through the plugin
|
|
* service "sessions.live" (the "ssh" provider) rather than an import.
|
|
*
|
|
* The open-tabs route lists the caller's sessions and ties saved tabs to the
|
|
* terminal's idle timeout. With no provider (the terminal is off) a lookup
|
|
* finds nothing, because "no live session" and "the terminal is off" mean the
|
|
* same thing there.
|
|
*/
|
|
|
|
import { getServiceImplementation } from "../plugins/service-registry.js";
|
|
|
|
const LIVE_SESSIONS_SERVICE = "sessions.live";
|
|
const SSH_PROVIDER = "ssh";
|
|
|
|
export interface LiveSessionInfo {
|
|
id: string;
|
|
userId: string;
|
|
hostId: number;
|
|
hostName: string;
|
|
isConnected: boolean;
|
|
createdAt: number;
|
|
lastDetachedAt: number | null;
|
|
tabInstanceId: string | null;
|
|
cols: number;
|
|
rows: number;
|
|
}
|
|
|
|
interface LiveSessionsV1 {
|
|
listForUser: (userId: string) => LiveSessionInfo[];
|
|
idleTimeoutMinutes: () => number;
|
|
}
|
|
|
|
function provider(): LiveSessionsV1 | undefined {
|
|
return getServiceImplementation<LiveSessionsV1>(
|
|
LIVE_SESSIONS_SERVICE,
|
|
"^1.0.0",
|
|
SSH_PROVIDER,
|
|
);
|
|
}
|
|
|
|
export const liveTerminalSessions = {
|
|
listForUser(userId: string): LiveSessionInfo[] {
|
|
return provider()?.listForUser(userId) ?? [];
|
|
},
|
|
/** How long the terminal keeps a detached session, or null while it is off. */
|
|
idleTimeoutMinutes(): number | null {
|
|
return provider()?.idleTimeoutMinutes() ?? null;
|
|
},
|
|
};
|