import type { ConnectionTarget } from "@t3tools/client-runtime/connection"; import { PRIMARY_LOCAL_ENVIRONMENT_ID, type DesktopBridge, type DesktopEnvironmentBootstrap, } from "@t3tools/contracts"; /** * Desktop-local secondary backends (e.g. a parallel WSL backend) are registered * by the connection platform source as bearer connections whose id carries this * prefix. It is the renderer's single signal that an environment is a * host-managed local backend rather than a user-saved remote, SSH, or relay * environment. * * Keep this the one source of truth: the producer (`connection/platform.ts`) * mints ids via {@link desktopLocalConnectionId} and every consumer classifies * via {@link isDesktopLocalConnectionTarget}, so the convention can never drift * between the two. */ export const DESKTOP_LOCAL_CONNECTION_ID_PREFIX = "local:"; export function desktopLocalConnectionId(backendId: string): string { return `${DESKTOP_LOCAL_CONNECTION_ID_PREFIX}${backendId}`; } export function isDesktopLocalConnectionTarget( target: ConnectionTarget, ): target is Extract { return ( target._tag === "BearerConnectionTarget" && target.connectionId.startsWith(DESKTOP_LOCAL_CONNECTION_ID_PREFIX) ); } export function desktopLocalBackendId(target: ConnectionTarget): string | null { return isDesktopLocalConnectionTarget(target) ? target.connectionId.slice(DESKTOP_LOCAL_CONNECTION_ID_PREFIX.length) : null; } export type DesktopSecondaryBootstrapsRead = | { readonly _tag: "Success"; readonly bootstraps: ReadonlyArray; } | { readonly _tag: "Failure"; readonly cause: unknown; }; export interface DesktopSecondaryBootstrapsReader { readonly readResult: () => DesktopSecondaryBootstrapsRead; readonly readSnapshot: () => ReadonlyArray; } /** * Build a topology reader whose snapshot advances only after successful bridge * reads. A successful empty read is authoritative; a thrown read preserves the * previous snapshot so UI consumers cannot temporarily disagree with the * platform's retained registrations. */ export function createDesktopSecondaryBootstrapsReader( resolveBridge: () => Pick | undefined, ): DesktopSecondaryBootstrapsReader { let snapshot: ReadonlyArray = []; const readResult = (): DesktopSecondaryBootstrapsRead => { const bridge = resolveBridge(); if (bridge === undefined) { if (snapshot.length > 0) snapshot = []; return { _tag: "Success", bootstraps: snapshot }; } try { const next = bridge .getLocalEnvironmentBootstraps() .filter((entry) => entry.id !== PRIMARY_LOCAL_ENVIRONMENT_ID); if ( next.length !== snapshot.length || next.some((entry, index) => { const previous = snapshot[index]; return ( previous === undefined || entry.id !== previous.id || entry.label !== previous.label || entry.runningDistro !== previous.runningDistro || entry.httpBaseUrl !== previous.httpBaseUrl || entry.wsBaseUrl !== previous.wsBaseUrl || entry.bootstrapToken !== previous.bootstrapToken ); }) ) { snapshot = next; } return { _tag: "Success", bootstraps: snapshot }; } catch (cause) { return { _tag: "Failure", cause }; } }; return { readResult, readSnapshot: () => { const result = readResult(); return result._tag === "Success" ? result.bootstraps : snapshot; }, }; } const desktopSecondaryBootstrapsReader = createDesktopSecondaryBootstrapsReader( () => window.desktopBridge, ); /** Read the topology while preserving failures for platform cache policy. */ export function readDesktopSecondaryBootstrapsResult(): DesktopSecondaryBootstrapsRead { return desktopSecondaryBootstrapsReader.readResult(); } /** Read the latest successful topology snapshot for renderer consumers. */ export function readDesktopSecondaryBootstraps(): ReadonlyArray { return desktopSecondaryBootstrapsReader.readSnapshot(); }