import { type Dependencies, type ServiceInitializer, type ProviderInitializer } from 'knifecycle';
import { type JsonValue } from 'type-fest';
import { type BaseJSONSchema, type ArrayJSONSchema, type BooleanJSONSchema, type NullJSONSchema, type NumericJSONSchema, type TextJSONSchema, type ValueOnlyJSONSchema } from 'ya-json-schema-types';
import { type OpenAPIReference } from 'ya-open-api-types';
import { type WhookEnvironmentsConfig } from '../libs/environments.js';
export declare const DEFAULT_COMMAND_CONFIG: WhookCommandConfig;
export type WhookBaseCommandConfig = {
    environments?: WhookEnvironmentsConfig;
    promptArgs?: boolean;
    targetHandler?: string;
};
export type WhookCommandSchema = NullJSONSchema | (BaseJSONSchema & (ValueOnlyJSONSchema<'null' | 'boolean' | 'number' | 'integer' | 'string'> | TextJSONSchema | NumericJSONSchema | BooleanJSONSchema | ArrayJSONSchema<'null' | 'boolean' | 'number' | 'integer' | 'string'>));
export interface WhookCommandArgumentDefinition<T extends JsonValue | undefined | unknown = unknown> {
    name: string;
    description: string;
    required?: boolean;
    schema: WhookCommandSchema | OpenAPIReference<WhookCommandSchema>;
    example?: T;
}
export interface WhookCommandConfig extends WhookBaseCommandConfig {
}
export type WhookCommandDefinition = {
    name: string;
    description: string;
    example: string;
    arguments: WhookCommandArgumentDefinition[];
    config?: WhookCommandConfig;
};
export type WhookArgsTypes = string | boolean | number;
export type WhookCommandArgs<T extends Record<string, WhookArgsTypes> = Record<string, WhookArgsTypes>> = {
    namedArguments: T;
    rest: string[];
    command: string;
};
export type WhookCommandHandler<T extends Record<string, WhookArgsTypes> = Record<string, WhookArgsTypes>, D extends WhookCommandDefinition = WhookCommandDefinition> = (args: WhookCommandArgs<T>, definition?: D) => Promise<void>;
export type WhookCommandInitializer<T extends Record<string, WhookArgsTypes>, D extends Dependencies = Record<string, WhookArgsTypes>> = ServiceInitializer<D, WhookCommandHandler<T>> | ProviderInitializer<D, WhookCommandHandler<T>>;
export interface WhookCommandModule<T extends Record<string, WhookArgsTypes> = Record<string, WhookArgsTypes>> {
    default: WhookCommandInitializer<T>;
    definition: WhookCommandDefinition;
    [name: `${string}Schema`]: WhookCommandArgumentDefinition<unknown>;
}
export type WhookCommandHandlerWrapper<T extends Record<string, WhookArgsTypes>> = (handler: WhookCommandHandler<T>) => Promise<WhookCommandHandler<T>>;
