import { UserInfo } from '@bodhiapp/bodhi-js-core'; import { ApiRequest, ApiResponse, ExtRequest, ExtResponse, OperationErrorResponse } from '@bodhiapp/bodhi-browser-types'; import { BodhiErrorResponse } from '@bodhiapp/ts-client'; import { EXT2EXT_CLIENT_MESSAGE_TYPES } from './constants'; export type ExtClientApiRequest = ApiRequest & { authenticated?: boolean; }; /** * extension client request message */ export interface ExtClientRequestMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_REQUEST; requestId: string; request: ExtRequest; } /** * Response data types for each action */ export interface GetUserInfoResponseData { userInfo: UserInfo | null; } export interface IsLoggedInResponseData { isLoggedIn: boolean; } export interface DiscoverExtensionResponseData { extensionId: string; environment: string; } export interface GetExtensionIdResponseData { extension_id: string; } /** * extension client response message * Uses ExtResponse = T | ExtErrorResponse from bodhi-browser/types */ export interface ExtClientResponseMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_RESPONSE; requestId: string; response: ExtResponse; } /** * extension client broadcast message (no requestId, event-based) */ export interface ExtClientBroadcastMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_BROADCAST; event: string; } /** * extension client API request message for HTTP operations */ export interface ExtClientApiRequestMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_API_REQUEST; requestId: string; request: ExtClientApiRequest; } /** * Error structure for API errors (network failures, extension errors) */ export interface ExtClientApiError { message: string; type?: string; } /** * Success API response message (HTTP request completed) */ export interface ExtClientApiResponseSuccessMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_API_RESPONSE; requestId: string; response: ApiResponse; } /** * Error API response message (HTTP request couldn't complete) */ export interface ExtClientApiResponseErrorMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_API_RESPONSE; requestId: string; error: ExtClientApiError; } /** * API response message - discriminated union */ export type ExtClientApiResponseMessage = ExtClientApiResponseSuccessMessage | ExtClientApiResponseErrorMessage; /** * Type guard to check if API response is an error */ export declare function isExtClientApiError(msg: ExtClientApiResponseMessage): msg is ExtClientApiResponseErrorMessage; /** * Streaming request - extends ApiRequest with authentication flag * Flat structure (no nested request.request) */ export type ExtClientStreamRequest = ApiRequest & { authenticated?: boolean; }; /** * Streaming request message - same format as ApiRequestMessage */ export interface ExtClientStreamRequestMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_REQUEST; requestId: string; request: ExtClientStreamRequest; } /** * Streaming chunk message - same format as ApiStreamChunkMessage * Uses `response` field (not `chunk`) */ export interface ExtClientStreamChunkMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_CHUNK; requestId: string; response: ApiResponse; } /** * Streaming API error message - same format as ApiStreamApiErrorMessage */ export interface ExtClientStreamApiErrorMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_API_ERROR; requestId: string; response: ApiResponse; } /** * Streaming error message - same format as StreamErrorMessage from bodhi-browser-ext * Uses `error: OperationErrorResponse` (network/extension/timeout errors) */ export interface ExtClientStreamErrorMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_ERROR; requestId: string; error: OperationErrorResponse; } /** * Streaming done message (ext2ext specific - explicit completion signal) */ export interface ExtClientStreamDoneMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_DONE; requestId: string; } /** * Union type for all ext2ext streaming messages */ export type ExtClientStreamMessage = ExtClientStreamChunkMessage | ExtClientStreamApiErrorMessage | ExtClientStreamErrorMessage | ExtClientStreamDoneMessage; /** * Stream text request message */ export interface ExtClientStreamTextRequestMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_TEXT_REQUEST; requestId: string; request: ExtClientStreamRequest & { authenticated?: boolean; }; } /** * Stream text start message - response metadata (status + headers) * Sent once before any stream text chunk messages */ export interface ExtClientStreamTextStartMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_TEXT_START; requestId: string; status: number; headers: Record; } /** * Stream text chunk message - raw text from response body */ export interface ExtClientStreamTextChunkMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_TEXT_CHUNK; requestId: string; chunk: string; } /** * Stream text done message - stream completed */ export interface ExtClientStreamTextDoneMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_TEXT_DONE; requestId: string; } /** * Stream text error message - network/extension level error */ export interface ExtClientStreamTextErrorMessage { type: typeof EXT2EXT_CLIENT_MESSAGE_TYPES.EXT2EXT_CLIENT_STREAM_TEXT_ERROR; requestId: string; error: OperationErrorResponse; } /** * Union type for all ext2ext stream text messages (received by UI) */ export type ExtClientStreamTextMessage = ExtClientStreamTextStartMessage | ExtClientStreamTextChunkMessage | ExtClientStreamTextDoneMessage | ExtClientStreamTextErrorMessage;