import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
import { type CallContext, type CallOptions } from "nice-grpc-common";
import { User } from "../../../common/protocol/user";
import { TypedMessage } from "../../../common/serial/typed_message";
import { InboundHandlerConfig, OutboundHandlerConfig } from "../../../core/config";
export declare const protobufPackage = "xray.app.proxyman.command";
export interface AddUserOperation {
    $type: "xray.app.proxyman.command.AddUserOperation";
    user: User | undefined;
}
export interface RemoveUserOperation {
    $type: "xray.app.proxyman.command.RemoveUserOperation";
    email: string;
}
export interface AddInboundRequest {
    $type: "xray.app.proxyman.command.AddInboundRequest";
    inbound: InboundHandlerConfig | undefined;
}
export interface AddInboundResponse {
    $type: "xray.app.proxyman.command.AddInboundResponse";
}
export interface RemoveInboundRequest {
    $type: "xray.app.proxyman.command.RemoveInboundRequest";
    tag: string;
}
export interface RemoveInboundResponse {
    $type: "xray.app.proxyman.command.RemoveInboundResponse";
}
export interface AlterInboundRequest {
    $type: "xray.app.proxyman.command.AlterInboundRequest";
    tag: string;
    operation: TypedMessage | undefined;
}
export interface AlterInboundResponse {
    $type: "xray.app.proxyman.command.AlterInboundResponse";
}
export interface GetInboundUserRequest {
    $type: "xray.app.proxyman.command.GetInboundUserRequest";
    tag: string;
    email: string;
}
export interface GetInboundUserResponse {
    $type: "xray.app.proxyman.command.GetInboundUserResponse";
    users: User[];
}
export interface GetInboundUsersCountResponse {
    $type: "xray.app.proxyman.command.GetInboundUsersCountResponse";
    count: number;
}
export interface AddOutboundRequest {
    $type: "xray.app.proxyman.command.AddOutboundRequest";
    outbound: OutboundHandlerConfig | undefined;
}
export interface AddOutboundResponse {
    $type: "xray.app.proxyman.command.AddOutboundResponse";
}
export interface RemoveOutboundRequest {
    $type: "xray.app.proxyman.command.RemoveOutboundRequest";
    tag: string;
}
export interface RemoveOutboundResponse {
    $type: "xray.app.proxyman.command.RemoveOutboundResponse";
}
export interface AlterOutboundRequest {
    $type: "xray.app.proxyman.command.AlterOutboundRequest";
    tag: string;
    operation: TypedMessage | undefined;
}
export interface AlterOutboundResponse {
    $type: "xray.app.proxyman.command.AlterOutboundResponse";
}
export interface Config {
    $type: "xray.app.proxyman.command.Config";
}
export declare const AddUserOperation: MessageFns<AddUserOperation, "xray.app.proxyman.command.AddUserOperation">;
export declare const RemoveUserOperation: MessageFns<RemoveUserOperation, "xray.app.proxyman.command.RemoveUserOperation">;
export declare const AddInboundRequest: MessageFns<AddInboundRequest, "xray.app.proxyman.command.AddInboundRequest">;
export declare const AddInboundResponse: MessageFns<AddInboundResponse, "xray.app.proxyman.command.AddInboundResponse">;
export declare const RemoveInboundRequest: MessageFns<RemoveInboundRequest, "xray.app.proxyman.command.RemoveInboundRequest">;
export declare const RemoveInboundResponse: MessageFns<RemoveInboundResponse, "xray.app.proxyman.command.RemoveInboundResponse">;
export declare const AlterInboundRequest: MessageFns<AlterInboundRequest, "xray.app.proxyman.command.AlterInboundRequest">;
export declare const AlterInboundResponse: MessageFns<AlterInboundResponse, "xray.app.proxyman.command.AlterInboundResponse">;
export declare const GetInboundUserRequest: MessageFns<GetInboundUserRequest, "xray.app.proxyman.command.GetInboundUserRequest">;
export declare const GetInboundUserResponse: MessageFns<GetInboundUserResponse, "xray.app.proxyman.command.GetInboundUserResponse">;
export declare const GetInboundUsersCountResponse: MessageFns<GetInboundUsersCountResponse, "xray.app.proxyman.command.GetInboundUsersCountResponse">;
export declare const AddOutboundRequest: MessageFns<AddOutboundRequest, "xray.app.proxyman.command.AddOutboundRequest">;
export declare const AddOutboundResponse: MessageFns<AddOutboundResponse, "xray.app.proxyman.command.AddOutboundResponse">;
export declare const RemoveOutboundRequest: MessageFns<RemoveOutboundRequest, "xray.app.proxyman.command.RemoveOutboundRequest">;
export declare const RemoveOutboundResponse: MessageFns<RemoveOutboundResponse, "xray.app.proxyman.command.RemoveOutboundResponse">;
export declare const AlterOutboundRequest: MessageFns<AlterOutboundRequest, "xray.app.proxyman.command.AlterOutboundRequest">;
export declare const AlterOutboundResponse: MessageFns<AlterOutboundResponse, "xray.app.proxyman.command.AlterOutboundResponse">;
export declare const Config: MessageFns<Config, "xray.app.proxyman.command.Config">;
export type HandlerServiceDefinition = typeof HandlerServiceDefinition;
export declare const HandlerServiceDefinition: {
    readonly name: "HandlerService";
    readonly fullName: "xray.app.proxyman.command.HandlerService";
    readonly methods: {
        readonly addInbound: {
            readonly name: "AddInbound";
            readonly requestType: MessageFns<AddInboundRequest, "xray.app.proxyman.command.AddInboundRequest">;
            readonly requestStream: false;
            readonly responseType: MessageFns<AddInboundResponse, "xray.app.proxyman.command.AddInboundResponse">;
            readonly responseStream: false;
            readonly options: {};
        };
        readonly removeInbound: {
            readonly name: "RemoveInbound";
            readonly requestType: MessageFns<RemoveInboundRequest, "xray.app.proxyman.command.RemoveInboundRequest">;
            readonly requestStream: false;
            readonly responseType: MessageFns<RemoveInboundResponse, "xray.app.proxyman.command.RemoveInboundResponse">;
            readonly responseStream: false;
            readonly options: {};
        };
        readonly alterInbound: {
            readonly name: "AlterInbound";
            readonly requestType: MessageFns<AlterInboundRequest, "xray.app.proxyman.command.AlterInboundRequest">;
            readonly requestStream: false;
            readonly responseType: MessageFns<AlterInboundResponse, "xray.app.proxyman.command.AlterInboundResponse">;
            readonly responseStream: false;
            readonly options: {};
        };
        readonly getInboundUsers: {
            readonly name: "GetInboundUsers";
            readonly requestType: MessageFns<GetInboundUserRequest, "xray.app.proxyman.command.GetInboundUserRequest">;
            readonly requestStream: false;
            readonly responseType: MessageFns<GetInboundUserResponse, "xray.app.proxyman.command.GetInboundUserResponse">;
            readonly responseStream: false;
            readonly options: {};
        };
        readonly getInboundUsersCount: {
            readonly name: "GetInboundUsersCount";
            readonly requestType: MessageFns<GetInboundUserRequest, "xray.app.proxyman.command.GetInboundUserRequest">;
            readonly requestStream: false;
            readonly responseType: MessageFns<GetInboundUsersCountResponse, "xray.app.proxyman.command.GetInboundUsersCountResponse">;
            readonly responseStream: false;
            readonly options: {};
        };
        readonly addOutbound: {
            readonly name: "AddOutbound";
            readonly requestType: MessageFns<AddOutboundRequest, "xray.app.proxyman.command.AddOutboundRequest">;
            readonly requestStream: false;
            readonly responseType: MessageFns<AddOutboundResponse, "xray.app.proxyman.command.AddOutboundResponse">;
            readonly responseStream: false;
            readonly options: {};
        };
        readonly removeOutbound: {
            readonly name: "RemoveOutbound";
            readonly requestType: MessageFns<RemoveOutboundRequest, "xray.app.proxyman.command.RemoveOutboundRequest">;
            readonly requestStream: false;
            readonly responseType: MessageFns<RemoveOutboundResponse, "xray.app.proxyman.command.RemoveOutboundResponse">;
            readonly responseStream: false;
            readonly options: {};
        };
        readonly alterOutbound: {
            readonly name: "AlterOutbound";
            readonly requestType: MessageFns<AlterOutboundRequest, "xray.app.proxyman.command.AlterOutboundRequest">;
            readonly requestStream: false;
            readonly responseType: MessageFns<AlterOutboundResponse, "xray.app.proxyman.command.AlterOutboundResponse">;
            readonly responseStream: false;
            readonly options: {};
        };
    };
};
export interface HandlerServiceImplementation<CallContextExt = {}> {
    addInbound(request: AddInboundRequest, context: CallContext & CallContextExt): Promise<DeepPartial<AddInboundResponse>>;
    removeInbound(request: RemoveInboundRequest, context: CallContext & CallContextExt): Promise<DeepPartial<RemoveInboundResponse>>;
    alterInbound(request: AlterInboundRequest, context: CallContext & CallContextExt): Promise<DeepPartial<AlterInboundResponse>>;
    getInboundUsers(request: GetInboundUserRequest, context: CallContext & CallContextExt): Promise<DeepPartial<GetInboundUserResponse>>;
    getInboundUsersCount(request: GetInboundUserRequest, context: CallContext & CallContextExt): Promise<DeepPartial<GetInboundUsersCountResponse>>;
    addOutbound(request: AddOutboundRequest, context: CallContext & CallContextExt): Promise<DeepPartial<AddOutboundResponse>>;
    removeOutbound(request: RemoveOutboundRequest, context: CallContext & CallContextExt): Promise<DeepPartial<RemoveOutboundResponse>>;
    alterOutbound(request: AlterOutboundRequest, context: CallContext & CallContextExt): Promise<DeepPartial<AlterOutboundResponse>>;
}
export interface HandlerServiceClient<CallOptionsExt = {}> {
    addInbound(request: DeepPartial<AddInboundRequest>, options?: CallOptions & CallOptionsExt): Promise<AddInboundResponse>;
    removeInbound(request: DeepPartial<RemoveInboundRequest>, options?: CallOptions & CallOptionsExt): Promise<RemoveInboundResponse>;
    alterInbound(request: DeepPartial<AlterInboundRequest>, options?: CallOptions & CallOptionsExt): Promise<AlterInboundResponse>;
    getInboundUsers(request: DeepPartial<GetInboundUserRequest>, options?: CallOptions & CallOptionsExt): Promise<GetInboundUserResponse>;
    getInboundUsersCount(request: DeepPartial<GetInboundUserRequest>, options?: CallOptions & CallOptionsExt): Promise<GetInboundUsersCountResponse>;
    addOutbound(request: DeepPartial<AddOutboundRequest>, options?: CallOptions & CallOptionsExt): Promise<AddOutboundResponse>;
    removeOutbound(request: DeepPartial<RemoveOutboundRequest>, options?: CallOptions & CallOptionsExt): Promise<RemoveOutboundResponse>;
    alterOutbound(request: DeepPartial<AlterOutboundRequest>, options?: CallOptions & CallOptionsExt): Promise<AlterOutboundResponse>;
}
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
    [K in Exclude<keyof T, "$type">]?: DeepPartial<T[K]>;
} : Partial<T>;
export interface MessageFns<T, V extends string> {
    readonly $type: V;
    encode(message: T, writer?: BinaryWriter): BinaryWriter;
    decode(input: BinaryReader | Uint8Array, length?: number): T;
    fromJSON(object: any): T;
    toJSON(message: T): unknown;
    create(base?: DeepPartial<T>): T;
    fromPartial(object: DeepPartial<T>): T;
}
export {};
//# sourceMappingURL=command.d.ts.map