import { RealmSkeleton } from '../api/RealmApi';
import { State } from '../shared/State';
import { ExportMetaData } from './OpsTypes';
export type Realm = {
    /**
     * Read all realms
     * @returns {Promise<RealmSkeleton[]>} a promise resolving to an array of realm objects
     */
    readRealms(): Promise<RealmSkeleton[]>;
    /**
     * Read realm
     * @param {string} realmId realm id
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     */
    readRealm(realmId: string): Promise<RealmSkeleton>;
    /**
     * Read realm by name
     * @param {string} realmName realm name
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     */
    readRealmByName(realmName: string): Promise<RealmSkeleton>;
    /**
     * Export all realms. The response can be saved to file as is.
     * @returns {Promise<RealmExportInterface>} Promise resolving to a RealmExportInterface object.
     */
    exportRealms(): Promise<RealmExportInterface>;
    /**
     * Create realm
     * @param {string} realmName realm name
     * @param {RealmSkeleton} realmData realm data
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     */
    createRealm(realmName: string, realmData?: RealmSkeleton): Promise<RealmSkeleton>;
    /**
     * Update realm
     * @param {string} realmId realm id
     * @param {RealmSkeleton} realmData realm data
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     */
    updateRealm(realmId: string, realmData: RealmSkeleton): Promise<RealmSkeleton>;
    /**
     * Import realms
     * @param {RealmExportInterface} importData realm import data
     * @param {string} realmId Optional realm id. If supplied, only the realm of that id is imported. Takes priority over realmName if both are provided.
     * @param {string} realmName Optional realm name. If supplied, only the realm of that name is imported.
     * @returns {Promise<RealmSkeleton[]>} the imported realms
     */
    importRealms(importData: RealmExportInterface, realmId?: string, realmName?: string): Promise<RealmSkeleton[]>;
    /**
     * Delete realm
     * @param {string} realmId realm id
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     */
    deleteRealm(realmId: string): Promise<RealmSkeleton>;
    /**
     * Delete realm by name
     * @param {string} realmName realm name
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     */
    deleteRealmByName(realmName: string): Promise<RealmSkeleton>;
    /**
     * Add custom DNS domain name (realm DNS alias)
     * @param {string} realmName realm name
     * @param {string} domain domain name
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     */
    addCustomDomain(realmName: string, domain: string): Promise<RealmSkeleton>;
    /**
     * Remove custom DNS domain name (realm DNS alias)
     * @param {string} realmName realm name
     * @param {string} domain domain name
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     */
    removeCustomDomain(realmName: string, domain: string): Promise<RealmSkeleton>;
    /**
     * Get all realms
     * @returns {Promise<RealmSkeleton[]>} a promise resolving to an array of realm objects
     * @deprecated since v2.0.0 use {@link Realm.readRealms | readRealms} instead
     * ```javascript
     * readRealms(): Promise<RealmSkeleton[]>
     * ```
     * @group Deprecated
     */
    getRealms(): Promise<RealmSkeleton[]>;
    /**
     * Get realm by name
     * @param {string} realmName realm name
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     * @deprecated since v2.0.0 use {@link Realm.readRealmByName | readRealmByName} instead
     * ```javascript
     * readRealmByName(realmName: string): Promise<RealmSkeleton>
     * ```
     * @group Deprecated
     */
    getRealmByName(realmName: string): Promise<RealmSkeleton>;
    /**
     * Update realm
     * @param {string} realmId realm id
     * @param {RealmSkeleton} realmData realm data
     * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
     * @deprecated since v2.0.0 use {@link Realm.updateRealm | updateRealm} or {@link Realm.createRealm | createRealm} instead
     * ```javascript
     * updateRealm(realmId: string, realmData: RealmSkeleton): Promise<RealmSkeleton>
     * createRealm(realmName: string, realmData: RealmSkeleton): Promise<RealmSkeleton>
     * ```
     * @group Deprecated
     */
    putRealm(realmId: string, realmData: RealmSkeleton): Promise<RealmSkeleton>;
};
declare const _default: (state: State) => Realm;
export default _default;
export interface RealmExportInterface {
    meta?: ExportMetaData;
    realm: Record<string, RealmSkeleton>;
}
/**
 * Create an empty realm export template
 * @returns {RealmExportInterface} an empty realm export template
 */
export declare function createRealmExportTemplate({ state, }: {
    state: State;
}): RealmExportInterface;
/**
 * Get all realms
 * @returns {Promise} a promise that resolves to an object containing an array of realm objects
 */
export declare function getRealms({ state }: {
    state: State;
}): Promise<RealmSkeleton[]>;
/**
 * Export all realms. The response can be saved to file as is.
 * @returns {Promise<RealmExportInterface>} Promise resolving to a RealmExportInterface object.
 */
export declare function exportRealms({ state, }: {
    state: State;
}): Promise<RealmExportInterface>;
/**
 * Create realm
 * @param {string} realmName realm name
 * @param {RealmSkeleton} realmData realm data
 * @returns {Promise<RealmSkeleton>} a promise resolving to a realm object
 */
export declare function createRealm({ realmName, realmData, state, }: {
    realmName: string;
    realmData?: RealmSkeleton;
    state: State;
}): Promise<RealmSkeleton>;
/**
 * Update realm
 * @param {string} realmId realm id
 * @param {RealmSkeleton} realmData realm config object
 * @returns {Promise<RealmSkeleton>} a promise that resolves to a realm object
 */
export declare function updateRealm({ realmId, realmData, state, }: {
    realmId: string;
    realmData: RealmSkeleton;
    state: State;
}): Promise<RealmSkeleton>;
/**
 * Import realms
 * @param {string} realmId Optional realm id. If supplied, only the realm of that id is imported. Takes priority over realmName if both are provided.
 * @param {string} realmName Optional realm name. If supplied, only the realm of that name is imported.
 * @param {RealmExportInterface} importData realm import data
 * @returns {Promise<RealmSkeleton[]>} the imported realms
 */
export declare function importRealms({ realmId, realmName, importData, state, }: {
    realmId?: string;
    realmName?: string;
    importData: RealmExportInterface;
    state: State;
}): Promise<RealmSkeleton[]>;
/**
 * Get realm
 * @param {String} realmId realm id
 * @returns {Promise<RealmSkeleton>} a promise that resolves to a realm object
 */
export declare function getRealm({ realmId, state, }: {
    realmId: string;
    state: State;
}): Promise<RealmSkeleton>;
/**
 * Get realm by name
 * @param {string} realmName realm name
 * @returns {Promise<RealmSkeleton>} a promise that resolves to a realm object
 */
export declare function getRealmByName({ realmName, state, }: {
    realmName: string;
    state: State;
}): Promise<RealmSkeleton>;
/**
 * Delete realm
 * @param {string} realmId realm id
 * @returns {Promise<RealmSkeleton>} a promise that resolves to an object containing a realm object
 */
export declare function deleteRealm({ realmId, state, }: {
    realmId: string;
    state: State;
}): Promise<RealmSkeleton>;
/**
 * Delete realm by name
 * @param {string} realmName realm name
 * @returns {Promise<RealmSkeleton>} a promise that resolves to a realm object
 */
export declare function deleteRealmByName({ realmName, state, }: {
    realmName: string;
    state: State;
}): Promise<RealmSkeleton>;
/**
 * Add custom DNS domain name (realm DNS alias)
 * @param {string} realm realm name
 * @param {string} domain domain name
 * @returns {Promise<RealmSkeleton>} a promise that resolves to a realm object
 */
export declare function addCustomDomain({ realmName, domain, state, }: {
    realmName: string;
    domain: string;
    state: State;
}): Promise<RealmSkeleton>;
/**
 * Remove custom DNS domain name (realm DNS alias)
 * @param {String} realm realm name
 * @param {String} domain domain name
 * @returns {Promise<RealmSkeleton>} a promise that resolves to a realm object
 */
export declare function removeCustomDomain({ realmName, domain, state, }: {
    realmName: string;
    domain: string;
    state: State;
}): Promise<RealmSkeleton>;
//# sourceMappingURL=RealmOps.d.ts.map