import type { Transaction, TransactionObjectArgument } from "../../transactions/index.js";
import type { RepositoryObject, TxString, ObjectResult, PassportObject, PermissionObject, RewardObject, CallEnv, WithPermissionObject, SupportedValue, RepositoryAddress } from "../common.js";
import type { AccountOrMark_Address } from "../local/index.js";
import type { CallResult } from "./base.js";
import { CallBase } from "./base.js";
import type { GuardSubmissionToFill } from "./guard.js";
import type { PolicyRule } from "../query/object.js";
import type { ReceivedObjectsOrRecently } from "../query/received.js";
export declare const MAX_POLICY_DESCRIPTION_LEN = 500;
export declare const MAX_POLICY_COUNT = 50;
export declare const MAX_POLICY_GUARD_COUNT = 10;
export declare const MAX_DATA_SIZE = 40960;
export declare const MAX_ID_COUNT_ONCE = 100;
export declare const MAX_REWARD_COUNT = 20;
export interface KeyData {
    id: AccountOrMark_Address | number | bigint | string;
    data: SupportedValue;
}
export interface RepDataItem {
    data: KeyData[];
    write_guard?: string;
}
export interface SignerOrClockBase {
    name: string;
    write_guard?: string;
}
export interface SignerOrClock extends SignerOrClockBase {
    data: SupportedValue;
}
export interface DataRemoveItem {
    id: (AccountOrMark_Address | number | bigint | string)[];
    write_guard?: string;
}
export type RemoveParam = {
    write_guard?: string;
} | {
    items: DataRemoveItem[];
};
export interface CallRepository_Data {
    object: WithPermissionObject;
    description?: string;
    policies?: {
        op: "add" | "set";
        policy: PolicyRule[];
    } | {
        op: "remove";
        policy: string[];
    } | {
        op: "clear";
    };
    data_add?: SignerOrClock | {
        name: string;
        items: RepDataItem[];
    };
    data_remove?: SignerOrClockBase | {
        name: string;
        items: DataRemoveItem[];
    };
    rewards?: {
        op: "add" | "set";
        objects: string[];
    } | {
        op: "remove";
        objects: string[];
    } | {
        op: "clear";
    };
    owner_receive?: ReceivedObjectsOrRecently;
    um?: string | null;
}
export declare class CallRepository extends CallBase {
    data: CallRepository_Data;
    object_address: string | undefined;
    permission_address: string | undefined;
    new_permission_description: string | undefined;
    constructor(data: CallRepository_Data);
    protected prepare(env: CallEnv): Promise<void>;
    call(env: CallEnv): Promise<CallResult>;
    operate(env: CallEnv, tx: Transaction, passport?: PassportObject, submission?: GuardSubmissionToFill[]): Promise<void>;
}
export type RepositoryPolicyGuardObject = TransactionObjectArgument;
export type RepositoryPolicyRuleObject = TransactionObjectArgument;
export declare function create(tx: Transaction, repository: RepositoryObject): RepositoryAddress;
export declare function policy(tx: Transaction, param: PolicyRule): RepositoryPolicyRuleObject;
export declare function data_id_from(tx: Transaction, repository: RepositoryObject, policy: PolicyRule, data: SignerOrClock, passport?: PassportObject): Promise<void>;
export declare function um_set(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, um: string | null, passport?: PassportObject): void;
export declare function data(tx: Transaction, repository: RepositoryObject, policy: PolicyRule, data: RepDataItem[], passport?: PassportObject): Promise<void>;
export declare function newRepository(tx: Transaction, permission: PermissionObject, description: TxString, passport?: PassportObject): ObjectResult;
export declare function description_set(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, description: TxString, passport?: PassportObject): void;
export declare function policy_add(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, policies: PolicyRule[], passport?: PassportObject): void;
export declare function policy_set(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, policies: PolicyRule[], passport?: PassportObject): void;
export declare function policy_remove(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, policies: string[], passport?: PassportObject): void;
export declare function policy_clear(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, passport?: PassportObject): void;
export declare function reward_add(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, reward: RewardObject, reward_type: string, passport?: PassportObject): void;
export declare function reward_remove(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, rewards: string[], passport?: PassportObject): void;
export declare function reward_clear(tx: Transaction, repository: RepositoryObject, permission: PermissionObject, passport?: PassportObject): void;
export declare function data_remove(tx: Transaction, repository: RepositoryObject, policy: PolicyRule, param: RemoveParam, passport?: PassportObject): Promise<void>;
