import { ExecutionResult, GraphQLSchema } from 'graphql';
import { LaboratoryPermission, LaboratoryPermissions } from '../components/laboratory/context';
import { LaboratoryCollectionsActions, LaboratoryCollectionsState } from './collections';
import { LaboratoryEnv, LaboratoryEnvActions, LaboratoryEnvState } from './env';
import { LaboratoryPluginsActions, LaboratoryPluginsState } from './plugins';
import { LaboratoryPreflightActions, LaboratoryPreflightState } from './preflight';
import { LaboratorySettingsActions, LaboratorySettingsState } from './settings';
import { LaboratoryTabsActions, LaboratoryTabsState } from './tabs';
export interface LaboratoryOperation {
    id: string;
    name: string;
    query: string;
    variables: string;
    headers: string;
    extensions: string;
}
export interface LaboratoryOperationsState {
    operations: LaboratoryOperation[];
    activeOperation: LaboratoryOperation | null;
}
export interface LaboratoryOperationsActions {
    setActiveOperation: (operationId: string) => void;
    addOperation: (operation: Omit<LaboratoryOperation, 'id'> & {
        id?: string;
    }) => LaboratoryOperation;
    setOperations: (operations: LaboratoryOperation[]) => void;
    updateActiveOperation: (operation: Partial<Omit<LaboratoryOperation, 'id'>>) => void;
    deleteOperation: (operationId: string) => void;
    addPathToActiveOperation: (path: string, operationName?: string | null) => void;
    deletePathFromActiveOperation: (path: string, operationName?: string | null) => void;
    addArgToActiveOperation: (path: string, argName: string, schema: GraphQLSchema, operationName?: string | null) => void;
    deleteArgFromActiveOperation: (path: string, argName: string, operationName?: string | null) => void;
    runActiveOperation: (endpoint: string, options?: {
        env?: LaboratoryEnv;
        headers?: Record<string, string>;
        operationName?: string;
        onResponse?: (response: string) => void;
    }) => Promise<ExecutionResult | null>;
    stopActiveOperation: (() => void) | null;
    isActiveOperationLoading: boolean;
    isOperationLoading: (operationId: string) => boolean;
    isOperationSubscription: (operation: LaboratoryOperation) => boolean;
    isActiveOperationSubscription: boolean;
}
export interface LaboratoryOperationsCallbacks {
    onOperationCreate?: (operation: LaboratoryOperation) => void;
    onOperationUpdate?: (operation: LaboratoryOperation) => void;
    onOperationDelete?: (operation: LaboratoryOperation) => void;
}
export declare const useOperations: (props: {
    checkPermissions: (permission: `${keyof LaboratoryPermissions & string}:${keyof LaboratoryPermission & string}`) => boolean;
    defaultOperations?: LaboratoryOperation[];
    defaultActiveOperationId?: string;
    onOperationsChange?: (operations: LaboratoryOperation[]) => void;
    onActiveOperationIdChange?: (operationId: string) => void;
    collectionsApi?: LaboratoryCollectionsState & LaboratoryCollectionsActions;
    tabsApi?: LaboratoryTabsState & LaboratoryTabsActions;
    envApi?: LaboratoryEnvState & LaboratoryEnvActions;
    preflightApi?: LaboratoryPreflightState & LaboratoryPreflightActions;
    settingsApi?: LaboratorySettingsState & LaboratorySettingsActions;
    pluginsApi?: LaboratoryPluginsState & LaboratoryPluginsActions;
} & LaboratoryOperationsCallbacks) => LaboratoryOperationsState & LaboratoryOperationsActions;
