import { z, ZodType } from 'zod';
import { LoggerService } from './LoggerService';
import { BackstageCredentials } from './AuthService';
/**
 * @public
 */
export type ActionsRegistryActionContext<TInputSchema extends ZodType> = {
    input: z.infer<TInputSchema>;
    logger: LoggerService;
    credentials: BackstageCredentials;
};
/**
 * @public
 */
export type ActionsRegistryActionOptions<TInputSchema extends ZodType, TOutputSchema extends ZodType> = {
    name: string;
    title: string;
    description: string;
    schema: {
        input: (zod: typeof z) => TInputSchema;
        output: (zod: typeof z) => TOutputSchema;
    };
    action: (context: ActionsRegistryActionContext<TInputSchema>) => Promise<z.infer<TOutputSchema> extends void ? void : {
        output: z.infer<TOutputSchema>;
    }>;
};
/**
 * @public
 */
export interface ActionsRegistryService {
    register<TInputSchema extends ZodType, TOutputSchema extends ZodType>(options: ActionsRegistryActionOptions<TInputSchema, TOutputSchema>): void;
}
