/**
  Juju InstanceMutater version 3.
  This facade is available on:
    Controller-machine-agent
    Machine-agent

  NOTE: This file was generated using the Juju schema
  from Juju 3.3 at the git SHA 65fa4c1ee5.
  Do not manually edit this file.
*/
import { ConnectionInfo, Transport } from "../../client.js";
import { Facade } from "../../types.js";
export interface CharmLXDProfile {
    config: Record<string, string>;
    description: string;
    devices: Record<string, Record<string, string>>;
}
export interface CharmProfilingInfoResult {
    "current-profiles": string[];
    error: Error;
    "instance-id": string;
    "model-name": string;
    "profile-changes": ProfileInfoResult[];
}
export interface ContainerTypeResult {
    "container-type": string;
    error: Error;
}
export interface Entities {
    entities: Entity[];
}
export interface Entity {
    tag: string;
}
export interface EntityStatusArgs {
    data: AdditionalProperties;
    info: string;
    status: string;
    tag: string;
}
export interface Error {
    code: string;
    info?: AdditionalProperties;
    message: string;
}
export interface ErrorResult {
    error?: Error;
}
export interface ErrorResults {
    results: ErrorResult[];
}
export interface LifeResult {
    error?: Error;
    life: string;
}
export interface LifeResults {
    results: LifeResult[];
}
export interface NotifyWatchResult {
    NotifyWatcherId: string;
    error?: Error;
}
export interface NotifyWatchResults {
    results: NotifyWatchResult[];
}
export interface ProfileInfoResult {
    "application-name"?: string;
    error?: Error;
    profile?: CharmLXDProfile;
    revision?: number;
}
export interface SetProfileArg {
    entity: Entity;
    profiles: string[];
}
export interface SetProfileArgs {
    args: SetProfileArg[];
}
export interface SetStatus {
    entities: EntityStatusArgs[];
}
export interface StringsWatchResult {
    changes?: string[];
    error?: Error;
    "watcher-id": string;
}
export interface AdditionalProperties {
    [key: string]: any;
}
/**

*/
declare class InstanceMutaterV3 implements Facade {
    static NAME: string;
    static VERSION: number;
    NAME: string;
    VERSION: number;
    _transport: Transport;
    _info: ConnectionInfo;
    constructor(transport: Transport, info: ConnectionInfo);
    /**
      CharmProfilingInfo returns info to update lxd profiles on the machine. If
      the machine is not provisioned, no profile change info will be returned,
      nor will an error.
    */
    charmProfilingInfo(params: Entity): Promise<CharmProfilingInfoResult>;
    /**
      ContainerType returns the container type of a machine.
    */
    containerType(params: Entity): Promise<ContainerTypeResult>;
    /**
      Life returns the life status of every supplied entity, where available.
    */
    life(params: Entities): Promise<LifeResults>;
    /**
      SetCharmProfiles records the given slice of charm profile names.
    */
    setCharmProfiles(params: SetProfileArgs): Promise<ErrorResults>;
    /**
      SetModificationStatus updates the instance whilst changes are occurring. This
      is different from SetStatus and SetInstanceStatus, by the fact this holds
      information about the ongoing changes that are happening to instances.
      Consider LXD Profile updates that can modify a instance, but may not cause
      the instance to be placed into a error state. This modification status
      serves the purpose of highlighting that to the operator.
      Only machine tags are accepted.
    */
    setModificationStatus(params: SetStatus): Promise<ErrorResults>;
    /**
      WatchContainers starts a watcher to track Containers on a given
      machine.
    */
    watchContainers(params: Entity): Promise<StringsWatchResult>;
    /**
      WatchLXDProfileVerificationNeeded starts a watcher to track Applications with
      LXD Profiles.
    */
    watchLXDProfileVerificationNeeded(params: Entities): Promise<NotifyWatchResults>;
    /**
      WatchMachines starts a watcher to track machines.
      WatchMachines does not consume the initial event of the watch response, as
      that returns the initial set of machines that are currently available.
    */
    watchMachines(params: any): Promise<StringsWatchResult>;
    /**
      WatchModelMachines starts a watcher to track machines, but not containers.
      WatchModelMachines does not consume the initial event of the watch response, as
      that returns the initial set of machines that are currently available.
    */
    watchModelMachines(params: any): Promise<StringsWatchResult>;
}
export default InstanceMutaterV3;
