/** * Wire all domain handlers onto a PeerSession. */ import { registerHandshake } from './session.js' import { registerContainerHandlers } from '../handlers/containers.js' import { registerImageHandlers } from '../handlers/images.js' import { registerNetworkHandlers } from '../handlers/networks.js' import { registerVolumeHandlers } from '../handlers/volumes.js' import { registerStackHandlers } from '../handlers/stacks.js' import { registerDeployHandlers } from '../handlers/deploy.js' import { registerTerminalHandlers, cleanupTerminalOnClose } from '../handlers/terminal.js' import { registerLogsHandlers, cleanupLogsOnClose } from '../handlers/logs.js' import { registerDockerCliHandlers } from '../handlers/docker-cli.js' import { registerSystemHandlers } from '../handlers/system.js' import { registerSwarmHandlers } from '../handlers/swarm.js' import { registerPluginHandlers } from '../handlers/plugins.js' import { registerPeerHandlers } from '../handlers/peers.js' import { registerVaultHandlers } from '../handlers/vault.js' import { registerRegistryHandlers } from '../handlers/registry.js' import { registerBinaryStreamHandlers } from './binary-stream.js' import { registerSuggestionHandlers } from '../handlers/suggestions.js' import { registerTunnelHandlers } from '../handlers/tunnels.js' import { registerAlertHandlers } from '../handlers/alerts.js' import { clearPeerStatsInterest } from '../services/stats.js' /** * @param {import('./session.js').PeerSession} session */ export function registerAllHandlers(session) { registerHandshake(session) registerSystemHandlers(session) registerAlertHandlers(session) registerContainerHandlers(session) registerImageHandlers(session) registerNetworkHandlers(session) registerVolumeHandlers(session) registerStackHandlers(session) registerDeployHandlers(session) registerTerminalHandlers(session) registerLogsHandlers(session) registerDockerCliHandlers(session) registerSwarmHandlers(session) registerPluginHandlers(session) registerPeerHandlers(session) registerVaultHandlers(session) registerRegistryHandlers(session) registerBinaryStreamHandlers(session) registerSuggestionHandlers(session) registerTunnelHandlers(session) } /** * @param {import('./session.js').PeerSession} session */ export function cleanupSession(session) { cleanupTerminalOnClose(session) cleanupLogsOnClose(session) try { clearPeerStatsInterest(session.id) } catch { // ignore } for (const [key, value] of session.state.entries()) { if (key.startsWith('exec:') && value?.stream) { try { value.stream.end() } catch { // ignore } } } session.state.clear() }