import type { IControllerBrowserVideoOffer, IControllerBrowserVideoDescription, IControllerBrowserVideoStatistics, IControllerBrowserViewState, IControllerBrowserViewport, TControllerBrowserViewOperation } from './interfaces.js'; export declare const controllerBrowserTransportProtocol: "agl-browser-v28"; export declare const controllerBrowserTransportEventContentType: "application/vnd.agl.browser-events.v28"; export declare const controllerBrowserTransportOperationContentType: "application/vnd.agl.browser-operations.v28"; export declare const controllerBrowserTransportMaximumJsonBytes: number; export declare const controllerBrowserTransportPairOpenTimeoutMs = 9000; export declare const controllerBrowserTransportRecoveryGraceMs = 45000; export declare const controllerBrowserTransportMaximumRecoveryAttempts = 6; export declare const controllerBrowserTransportMaximumPendingOperations = 64; export declare const controllerBrowserTransportMaximumQueuedOperationBytes: number; /** Bounded reliable signaling and control delivery. */ export declare const controllerBrowserTransportMaximumPendingEvents = 16; export declare const controllerBrowserTransportMaximumPendingEventBytes: number; /** * Fatal error codes the controller sends on the event stream before it aborts * a view it closes itself, so the client can tell an intentional close from a * transport fault instead of spending its recovery budget on one. * `resource_changed` means the resource authority changed while it stays * available, so the client reopens from its * refreshed resource list; `view_closed` is an intentional close, such as the * resource being stopped, and raises nothing; `view_failed` is a close the * client cannot recover from and reports. The close code is always passed * explicitly, never inferred from the reason. */ export declare const controllerBrowserViewResourceChangedErrorCode: "resource_changed"; export declare const controllerBrowserViewClosedErrorCode: "view_closed"; export declare const controllerBrowserViewFailedErrorCode: "view_failed"; export type TControllerBrowserViewCloseCode = typeof controllerBrowserViewResourceChangedErrorCode | typeof controllerBrowserViewClosedErrorCode | typeof controllerBrowserViewFailedErrorCode; /** * Whether a fatal error code announces a close the controller made itself. * The transport hands a fatal packet to the event listener before it fails * the client, so the listener uses this to leave every announced close to the * failure handler that decides what each one means. */ export declare const isControllerBrowserViewCloseCode: (codeArg: string) => codeArg is TControllerBrowserViewCloseCode; /** * Budget for the client's reopen cycle after a `resource_changed` close. The * cycle drives itself -- a reopened view can produce the next close -- so a * resource that revokes every view it hands out would otherwise close and * reopen at network speed forever. Attempts outside the window are free, so * an occasional reopen in a healthy session never spends the budget down. */ export declare const controllerBrowserViewMaximumReopenAttempts = 3; export declare const controllerBrowserViewReopenWindowMs = 30000; interface IControllerBrowserTransportPacketBase { protocol: typeof controllerBrowserTransportProtocol; streamGeneration: number; } export interface IControllerBrowserOperationPacket extends IControllerBrowserTransportPacketBase { type: 'operation'; operationId: number; operation: TControllerBrowserViewOperation; } export interface IControllerBrowserCancelPacket extends IControllerBrowserTransportPacketBase { type: 'cancel'; operationId: number; } export type TControllerBrowserClientPacket = IControllerBrowserOperationPacket | IControllerBrowserCancelPacket; export interface IControllerBrowserViewportResult { viewport: IControllerBrowserViewport; viewportRevision: number; } export type TControllerBrowserOperationResult = { status: 'succeeded'; state?: IControllerBrowserViewState; viewportResult?: IControllerBrowserViewportResult; videoOffer?: IControllerBrowserVideoOffer; videoStatistics?: IControllerBrowserVideoStatistics; } | { status: 'failed'; error: { code: string; message: string; }; } | { status: 'cancelled'; } | { status: 'superseded'; }; export interface IControllerBrowserStatePacket extends IControllerBrowserTransportPacketBase { type: 'state'; state: IControllerBrowserViewState; } export interface IControllerBrowserErrorPacket extends IControllerBrowserTransportPacketBase { type: 'error'; error: { code: string; message: string; fatal: boolean; tabId?: string; }; } export interface IControllerBrowserOperationResultPacket extends IControllerBrowserTransportPacketBase { type: 'operationResult'; operationId: number; result: TControllerBrowserOperationResult; } export type TControllerBrowserServerPacket = IControllerBrowserStatePacket | IControllerBrowserErrorPacket | IControllerBrowserOperationResultPacket; export declare class ControllerBrowserTransportProtocolError extends Error { constructor(messageArg: string, optionsArg?: ErrorOptions); } /** Validate the video-only signaling envelope before it crosses a trust boundary. */ export declare const assertControllerBrowserVideoDescription: (valueArg: unknown, typeArg: "offer" | "answer") => IControllerBrowserVideoDescription; export declare const encodeControllerBrowserTransportPacket: (packetArg: TControllerBrowserClientPacket | TControllerBrowserServerPacket) => Uint8Array; export declare const decodeControllerBrowserTransportPacket: (bytesArg: Uint8Array) => unknown; export {};