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) { snapshot = []; return { _tag: "Success", bootstraps: snapshot }; } try { snapshot = bridge .getLocalEnvironmentBootstraps() .filter((entry) => entry.id !== PRIMARY_LOCAL_ENVIRONMENT_ID); 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(); }