import type { EnvironmentApi, PreviewSessionSnapshot, ScopedThreadRef } from "@t3tools/contracts"; import type { PreviewStateStoreState } from "~/previewStateStore"; interface OpenPreviewSessionInput { previewApi: Pick; threadRef: ScopedThreadRef; url: string; applyServerSnapshot: PreviewStateStoreState["applyServerSnapshot"]; rememberUrl: PreviewStateStoreState["rememberUrl"]; } export async function openPreviewSession( input: OpenPreviewSessionInput, ): Promise { const snapshot = await input.previewApi.open({ threadId: input.threadRef.threadId, url: input.url, }); input.applyServerSnapshot(input.threadRef, snapshot); input.rememberUrl( input.threadRef, snapshot.navStatus._tag === "Idle" ? input.url : snapshot.navStatus.url, ); return snapshot; }