import type { RawHeaders } from "@mercuryworkshop/proxy-transports"; import type { CONTROLLERFRAME } from "./symbols"; import type { Frame } from "."; export type BodyType = | string | ArrayBuffer | Blob | ReadableStream>; export type TransferRequest = { rawUrl: string; rawReferrer: string | null; destination: RequestDestination; mode: RequestMode; referrer: string; method: string; body: BodyType | null; cache: RequestCache; forceCrossOriginIsolated: boolean; initialHeaders: RawHeaders; rawClientUrl?: string; clientId?: string; }; export type TransferResponse = { body: BodyType; headers: RawHeaders; status: number; statusText: string; }; export type SerializedCookieSyncEntry = { url: string; cookie: string; }; export type Controllerbound = { ready: []; request: [TransferRequest, TransferResponse]; initRemoteTransport: [MessagePort]; }; export type SWbound = { sendSetCookie: [ { cookies: SerializedCookieSyncEntry[]; options?: CookieSyncOptions; }, ]; }; export type TransportToController = { request: [ { remote: string; method: string; body: BodyInit | null; headers: RawHeaders; // signal: AbortSignal | undefined }, TransferrableResponse, ]; sendSetCookie: [ { cookies: SerializedCookieSyncEntry[]; options?: CookieSyncOptions; }, ]; connect: [ { url: string; protocols: string[]; requestHeaders: RawHeaders; port: MessagePort; }, ( | { result: "success"; protocol: string; extensions: string; } | { result: "failure"; error: string; } ), ]; }; export type ControllerToTransport = { ready: []; }; export type WebSocketData = string | ArrayBuffer | Blob; export type WebSocketMessage = | { type: "data"; data: WebSocketData; } | { type: "close"; code: number; reason: string; }; export type FrameInitHooks = { pre: { context: { window: Window; client: ScramjetClient; isTopLevel: boolean; }; props: {}; }; post: { context: { window: Window; client: ScramjetClient; isTopLevel: boolean; }; props: {}; }; }; export type FrameErrorHooks = { request: { context: { rawrequest: TransferRequest; }; props: { setResponse?: TransferResponse; suppressError?: boolean; }; }; }; declare global { interface HTMLIFrameElement { [CONTROLLERFRAME]: Frame; } }