diegosouzapw/OmniRoute · error · Error

Browser login is unavailable for managed lease connections

Error message

Browser login is unavailable for managed lease connections

What it means

Entry guard in startSession/harvestSession: isConnectionUnavailableToAuxiliaryActivity reported the connection as tied to a managed lease, so auxiliary browser-login activity is refused. Means the connection's lifecycle is controlled elsewhere (lease/cooldown management) and launching a VNC container or harvesting credentials against it now could race that machinery — a policy rejection, not a failure.

Solutions

  1. Wait until the managed lease releases the connection and retry browser login
  2. Use a different (non-managed) provider connection for browser login
  3. Do not force-start a session: bypassing the guard can corrupt lease state
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/lib/vncSession/service.ts:158 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25). Data as JSON: /api/errors/b35cd38a8562425b. Report an issue: GitHub.

Appendix: source

Thrown at src/lib/vncSession/service.ts:158

async function publishedPort(containerName: string, containerPort: number): Promise<number> {
  const result = await docker(["port", containerName, `${containerPort}/tcp`], {
    timeoutMs: 10_000,
  });
  if (result.code !== 0) {
    throw new Error(result.err.trim() || `Could not resolve published port ${containerPort}`);
  }

  for (const line of result.out.split(/\r?\n/)) {
    const match = line.trim().match(/:(\d+)$/);
    if (match) return Number(match[1]);
  }
  throw new Error(`Docker did not publish container port ${containerPort}`);
}

export async function startSession(connectionId: string): Promise<VncSession> {
  if (await isConnectionUnavailableToAuxiliaryActivity(connectionId))
    throw new Error("Browser login is unavailable for managed lease connections");

  await reconcileStaleContainers();

  const connection = await getProviderConnectionById(connectionId);
  if (!connection) throw new Error("Provider connection not found");
  const providerId = typeof connection.provider === "string" ? connection.provider : "";
  const provider = getVncProvider(providerId);
  if (!provider) {
    throw new Error(`Browser login is not supported for provider '${providerId || "unknown"}'`);
  }

  const existing = findActiveSessionForConnection(connectionId);
  if (existing) return existing;
  if (SESSIONS.size >= VNC_CONFIG.maxSessions) {
    throw new Error(`Maximum ${VNC_CONFIG.maxSessions} concurrent browser-login sessions reached`);
  }

  const sessionId = randomUUID();

View on GitHub (pinned to a179ffed5b)