import type { Transaction } from "../../transactions/index.js";
import type { PassportObject, PermissionObject, WithPermissionObject, CallEnv, ContactObject, ContactAddress } from "../common.js";
import type { CallResult } from "./base.js";
import { CallBase } from "./base.js";
import type { GuardSubmissionToFill } from "./guard.js";
import type { ReceivedObjectsOrRecently } from "../query/received.js";
export declare const MAX_IM_COUNT = 200;
export interface ImParam {
    at: string;
    description?: string;
}
export interface CallContact_Data {
    object: WithPermissionObject;
    my_status?: string;
    description?: string;
    location?: string;
    ims?: {
        op: "add" | "set";
        im: ImParam[];
    } | {
        op: "remove";
        im: string[];
    } | {
        op: "clear";
    };
    owner_receive?: ReceivedObjectsOrRecently;
}
export declare class CallContact extends CallBase {
    data: CallContact_Data;
    object_address: string | undefined;
    permission_address: string | undefined;
    new_permission_description: string | undefined;
    constructor(data: CallContact_Data);
    protected prepare(env: CallEnv): Promise<void>;
    call(env: CallEnv): Promise<CallResult>;
    operate(env: CallEnv, tx: Transaction, passport?: PassportObject, submission?: GuardSubmissionToFill[]): Promise<void>;
}
export declare function create(tx: Transaction, contact: ContactObject): ContactAddress;
export declare function change_status(tx: Transaction, contact: ContactObject, status: string): ContactAddress;
export declare function newContact(tx: Transaction, permission: PermissionObject, description: string, passport?: PassportObject): ContactObject;
export declare function description_set(tx: Transaction, contact: ContactObject, permission: PermissionObject, description: string, passport?: PassportObject): void;
export declare function location_set(tx: Transaction, contact: ContactObject, permission: PermissionObject, location: string, passport?: PassportObject): void;
export declare function im_add(tx: Transaction, contact: ContactObject, permission: PermissionObject, im: string, description?: string | null, passport?: PassportObject): void;
export declare function im_remove(tx: Transaction, contact: ContactObject, permission: PermissionObject, im: string[], passport?: PassportObject): void;
export declare function im_clear(tx: Transaction, contact: ContactObject, permission: PermissionObject, passport?: PassportObject): void;
