import type { PygmalionEndpoints } from './paths.js'; import type { ComponentBranchesRequest, InspectImpactRequest, MirrorRefreshRequest, PreviewCatalogRequest, PygmalionDesignSessionStatus, PygmalionDevMirrorStatus, PygmalionSourceRefs, QaCaptureEnvelope, SessionApplyVisualRequest, SessionApplyVisualResponse, SessionCheckRequest, SessionOpenRequest, SessionPreviewVisualRequest, SessionPreviewVisualResponse, SessionRevertVisualRequest, SessionRevertVisualResponse, SessionRestoreVisualRequest, SessionHistoryResponse, PygmalionHistoryResult, SourceUsageRequest } from './types.js'; import type { InspectImpactResult } from '../editor/host.js'; import type { InspectQaCaptureRequest } from '../editor/visualQa.js'; import type { PreviewArtifactTransportRequest } from '../editor/previewBootstrap.js'; import type { ComponentBranch } from '../editor/screenDimensions.js'; import type { CompositionSourceUsage } from '../editor/storyboardComposition.js'; export interface TransportCallOptions { signal?: AbortSignal; } /** The subset of RequestInit a transport sends; a real `fetch` accepts it as is. */ export interface TransportRequestInit { method: 'GET' | 'POST'; headers: Record; body?: string; cache?: 'no-store'; credentials?: 'same-origin'; signal?: AbortSignal; } /** The subset of Response a transport reads; a real Response satisfies it, and so does a test fake. */ export interface TransportResponse { readonly ok: boolean; readonly status?: number; readonly statusText?: string; json(): Promise; } export type TransportFetch = (input: string, init: TransportRequestInit) => Promise; export interface EditorTransport { /** The paths this transport talks on, after overrides. */ readonly endpoints: PygmalionEndpoints; /** Turns a server-relative path (a QA PNG, an artifact asset) into a URL the document can load. */ resolveUrl(path: string): string; readonly mirror: { status(options?: TransportCallOptions): Promise; refresh(request?: MirrorRefreshRequest, options?: TransportCallOptions): Promise; refs(options?: TransportCallOptions): Promise; }; readonly session: { open(request: SessionOpenRequest, options?: TransportCallOptions): Promise; check(request: SessionCheckRequest, options?: TransportCallOptions): Promise; previewVisual(request: SessionPreviewVisualRequest, options?: TransportCallOptions): Promise; applyVisual(request: SessionApplyVisualRequest, options?: TransportCallOptions): Promise; revertVisual(request: SessionRevertVisualRequest, options?: TransportCallOptions): Promise; redoVisual(request: SessionRevertVisualRequest, options?: TransportCallOptions): Promise; restoreVisual(request: SessionRestoreVisualRequest, options?: TransportCallOptions): Promise; history(request: SessionCheckRequest, options?: TransportCallOptions): Promise; }; readonly inspect: { impact(request: InspectImpactRequest, options?: TransportCallOptions): Promise; }; readonly qa: { capture(request: InspectQaCaptureRequest, options?: TransportCallOptions): Promise; }; readonly preview: { /** * Probes or captures preview artifacts. Answers with the bundle, the * unwrapped `{ok, artifact}` bundle, or a frame resolution envelope, as * the server does; previewBootstrap.ts validates whichever arrives. */ artifact(request: PreviewArtifactTransportRequest): Promise; /** The raw `progress` value; previewCaptureProgress.ts normalizes it. */ progress(options?: TransportCallOptions): Promise; /** The unvalidated catalog (unwrapped from `{catalog}`); revisionCatalog.ts validates it. */ catalog(request: PreviewCatalogRequest, options?: TransportCallOptions): Promise; }; readonly storyboard: { /** The raw manifest; storyboardDiscovery.ts validates it. */ environment(options?: TransportCallOptions & { sourceRevision?: string; }): Promise; sourceUsage(request: SourceUsageRequest, options?: TransportCallOptions): Promise>; componentBranches(request: ComponentBranchesRequest, options?: TransportCallOptions): Promise; }; }