async function applyConnectionChange({ cancelAndWait, isPrimary, scope, sendApplied, stopPool, teardownPrimary, teardownSsh }) { await cancelAndWait(scope) await teardownSsh(scope) if (!isPrimary) { stopPool(scope) return } await teardownPrimary() sendApplied() } function commitConnectionFailure(current, starting, commit) { if (current !== starting) { return false } commit() return true } async function resolveTerminalConnection(getTarget, ensureBackend) { let target = getTarget() if (target !== 'pending') { return target } await ensureBackend() target = getTarget() if (target === 'pending') { throw new Error('Remote connection is not ready yet. Try again in a moment.') } return target } export { applyConnectionChange, commitConnectionFailure, resolveTerminalConnection }