import { type IdObjectSkeletonInterface } from '../api/ApiTypes';
import { CircleOfTrustSkeleton } from '../api/CirclesOfTrustApi';
import { type OAuth2ClientSkeleton } from '../api/OAuth2ClientApi';
import { Saml2ProviderSkeleton } from '../api/Saml2Api';
import { type ScriptSkeleton } from '../api/ScriptApi';
import { State } from '../shared/State';
import { ConnectorSkeleton } from './ConnectorOps';
import { MappingSkeleton } from './MappingOps';
import { type ExportMetaData } from './OpsTypes';
export type Application = {
    /**
     * Create an empty application export template
     * @returns {ApplicationExportInterface} an empty application export template
     */
    createApplicationExportTemplate(): ApplicationExportInterface;
    /**
     * Get application managed object type
     * @returns {String} application managed object type in this realm
     */
    getRealmManagedApplication(): string;
    /**
     * Create application
     * @param {string} applicationId application id/name
     * @param {ApplicationSkeleton} applicationData application data
     * @returns {Promise<ApplicationSkeleton>} a promise that resolves to an application object
     */
    createApplication(applicationId: string, applicationData: ApplicationSkeleton): Promise<ApplicationSkeleton>;
    /**
     * Read application
     * @param {string} applicationId application uuid
     * @returns {Promise<ApplicationSkeleton>} a promise that resolves to an application object
     */
    readApplication(applicationId: string): Promise<ApplicationSkeleton>;
    /**
     * Read application by name
     * @param {string} applicationName application name
     * @returns {Promise<ApplicationSkeleton>} a promise that resolves to an application object
     */
    readApplicationByName(applicationName: string): Promise<ApplicationSkeleton>;
    /**
     * Read all applications. Results are sorted aphabetically.
     * @returns {Promise<ApplicationSkeleton[]>} a promise that resolves to an array of application objects
     */
    readApplications(): Promise<ApplicationSkeleton[]>;
    /**
     * Update application
     * @param {string} applicationId application uuid
     * @param {ApplicationSkeleton} applicationData application data
     * @returns {Promise<ApplicationSkeleton>} a promise that resolves to an application object
     */
    updateApplication(applicationId: string, applicationData: ApplicationSkeleton): Promise<ApplicationSkeleton>;
    /**
     * Delete application
     * @param {string} applicationId application uuid
     * @param {boolean} deep deep delete (remove dependencies)
     * @returns {Promise<ApplicationSkeleton>} a promise that resolves to an application object
     */
    deleteApplication(applicationId: string, deep?: boolean): Promise<ApplicationSkeleton>;
    /**
     * Delete application by name
     * @param {string} applicationName application name
     * @param {boolean} deep deep delete (remove dependencies)
     * @returns {Promise<ApplicationSkeleton>} a promise that resolves to an application object
     */
    deleteApplicationByName(applicationName: string, deep?: boolean): Promise<ApplicationSkeleton>;
    /**
     * Delete all applications
     * @param {boolean} deep deep delete (remove dependencies)
     * @returns {Promise<ApplicationSkeleton[]>} a promise that resolves to an array of application objects
     */
    deleteApplications(deep?: boolean): Promise<ApplicationSkeleton[]>;
    /**
     * Query applications
     * @param filter CREST search filter
     * @param fields array of fields to return
     */
    queryApplications(filter: string, fields?: string[]): Promise<ApplicationSkeleton[]>;
    /**
     * Export application. The response can be saved to file as is.
     * @param {string} applicationId application uuid
     * @param {ApplicationExportOptions} options export options
     * @returns {Promise<ApplicationExportInterface} Promise resolving to an ApplicationExportInterface object.
     */
    exportApplication(applicationId: string, options: ApplicationExportOptions): Promise<ApplicationExportInterface>;
    /**
     * Export application by name. The response can be saved to file as is.
     * @param {string} applicationName application name
     * @param {ApplicationExportOptions} options export options
     * @returns {Promise<ApplicationExportInterface} Promise resolving to an ApplicationExportInterface object.
     */
    exportApplicationByName(applicationName: string, options: ApplicationExportOptions): Promise<ApplicationExportInterface>;
    /**
     * Export all applications. The response can be saved to file as is.
     * @returns {Promise<ApplicationExportInterface>} Promise resolving to an ApplicationExportInterface object.
     */
    exportApplications(options?: ApplicationExportOptions): Promise<ApplicationExportInterface>;
    /**
     * Import application. The import data is usually read from an application export file.
     * @param {string} applicationId application uuid
     * @param {ApplicationExportInterface} importData application import data.
     * @returns {Promise<ApplicationSkeleton>} Promise resolving to an application object.
     */
    importApplication(applicationId: string, importData: ApplicationExportInterface, options: ApplicationImportOptions): Promise<ApplicationSkeleton>;
    /**
     * Import application by name. The import data is usually read from an application export file.
     * @param {string} applicationName application name
     * @param {ApplicationExportInterface} importData application import data.
     * @returns {Promise<ApplicationSkeleton>} Promise resolving to an application object.
     */
    importApplicationByName(applicationName: string, importData: ApplicationExportInterface, options: ApplicationImportOptions): Promise<ApplicationSkeleton>;
    /**
     * Import first application. The import data is usually read from an application export file.
     * @param {ApplicationExportInterface} importData application import data.
     */
    importFirstApplication(importData: ApplicationExportInterface, options: ApplicationImportOptions): Promise<ApplicationSkeleton[]>;
    /**
     * Import applications. The import data is usually read from an application export file.
     * @param {ApplicationExportInterface} importData application import data.
     */
    importApplications(importData: ApplicationExportInterface, options: ApplicationImportOptions): Promise<ApplicationSkeleton[]>;
};
declare const _default: (state: State) => Application;
export default _default;
export type ApplicationSkeleton = IdObjectSkeletonInterface & {
    authoritative: boolean;
    connectorId: string;
    description: string;
    icon: string;
    mappingNames: string[];
    members: any;
    name: string;
    owners: any;
    roles: any;
    ssoEntities: {
        idpLocation: string;
        idpPrivateId: string;
        spLocation: string;
        spPrivate: string;
    };
    templateName: string;
    templateVersion: string;
    uiConfig: object;
    url: string;
};
/**
 * Export format for applications
 */
export interface ApplicationExportInterface {
    /**
     * Metadata
     */
    meta?: ExportMetaData;
    /**
     * Managed applications
     */
    managedApplication: Record<string, ApplicationSkeleton>;
    /**
     * Scripts
     */
    script?: Record<string, ScriptSkeleton>;
    /**
     * OAuth2 clients
     */
    application?: Record<string, OAuth2ClientSkeleton>;
    /**
     * Saml providers, circles of trust, and metadata
     */
    saml?: {
        hosted?: Record<string, Saml2ProviderSkeleton>;
        remote?: Record<string, Saml2ProviderSkeleton>;
        metadata?: Record<string, string[]>;
        cot?: Record<string, CircleOfTrustSkeleton>;
    };
    /**
     * connectors
     */
    connector?: Record<string, ConnectorSkeleton>;
    /**
     * mappings
     */
    mapping?: Record<string, MappingSkeleton>;
}
/**
 * Application export options
 */
export type ApplicationExportOptions = {
    /**
     * Include any dependencies (scripts, oauth2 clients, saml providers, circles of trust, etc).
     */
    deps: boolean;
    /**
     * Use string arrays to store multi-line text in scripts.
     */
    useStringArrays: boolean;
};
/**
 * Application export options
 */
export type ApplicationImportOptions = {
    /**
     * Import any dependencies (scripts).
     */
    deps: boolean;
};
export declare function createApplicationExportTemplate({ state, }: {
    state: State;
}): ApplicationExportInterface;
export declare function getRealmManagedApplication({ state }: {
    state: State;
}): string;
export declare function createApplication({ applicationId, applicationData, state, }: {
    applicationId: string;
    applicationData: ApplicationSkeleton;
    state: State;
}): Promise<ApplicationSkeleton>;
export declare function readApplication({ applicationId, fields, state, }: {
    applicationId: string;
    fields?: string[];
    state: State;
}): Promise<ApplicationSkeleton>;
export declare function readApplicationByName({ applicationName, fields, state, }: {
    applicationName: string;
    fields?: string[];
    state: State;
}): Promise<ApplicationSkeleton>;
export declare function readApplications({ fields, state, }: {
    fields?: string[];
    state: State;
}): Promise<ApplicationSkeleton[]>;
export declare function updateApplication({ applicationId, applicationData, state, }: {
    applicationId: string;
    applicationData: IdObjectSkeletonInterface;
    state: State;
}): Promise<ApplicationSkeleton>;
export declare function deleteApplication({ applicationId, options, state, }: {
    applicationId: string;
    options?: {
        deep: boolean;
    };
    state: State;
}): Promise<ApplicationSkeleton>;
export declare function deleteApplicationByName({ applicationName, options, state, }: {
    applicationName: string;
    options?: {
        deep: boolean;
    };
    state: State;
}): Promise<ApplicationSkeleton>;
export declare function deleteApplications({ options, state, }: {
    options?: {
        deep: boolean;
    };
    state: State;
}): Promise<ApplicationSkeleton[]>;
export declare function queryApplications({ filter, fields, state, }: {
    filter: string;
    fields?: string[];
    state: State;
}): Promise<ApplicationSkeleton[]>;
export declare function exportApplication({ applicationId, options, state, }: {
    applicationId: string;
    options: ApplicationExportOptions;
    state: State;
}): Promise<ApplicationExportInterface>;
export declare function exportApplicationByName({ applicationName, options, state, }: {
    applicationName: string;
    options: ApplicationExportOptions;
    state: State;
}): Promise<ApplicationExportInterface>;
export declare function exportApplications({ options, state, }: {
    options: ApplicationExportOptions;
    state: State;
}): Promise<ApplicationExportInterface>;
/**
 * Import application
 * @param {string} clientId client id
 * @param {ApplicationExportInterface} importData import data
 * @param {ApplicationImportOptions} options import options
 * @returns {Promise<ApplicationSkeleton>} a promise resolving to an oauth2 client
 */
export declare function importApplication({ applicationId, importData, options, state, }: {
    applicationId: string;
    importData: ApplicationExportInterface;
    options?: ApplicationImportOptions;
    state: State;
}): Promise<ApplicationSkeleton>;
/**
 * Import application
 * @param {string} clientId client id
 * @param {ApplicationExportInterface} importData import data
 * @param {ApplicationImportOptions} options import options
 * @returns {Promise<ApplicationSkeleton>} a promise resolving to an oauth2 client
 */
export declare function importApplicationByName({ applicationName: applicationName, importData, options, state, }: {
    applicationName: string;
    importData: ApplicationExportInterface;
    options?: ApplicationImportOptions;
    state: State;
}): Promise<ApplicationSkeleton>;
/**
 * Import first application
 * @param {ApplicationExportInterface} importData import data
 * @param {ApplicationImportOptions} options import options
 * @returns {Promise<ApplicationSkeleton[]>} a promise resolving to an array of oauth2 clients
 */
export declare function importFirstApplication({ importData, options, state, }: {
    importData: ApplicationExportInterface;
    options?: ApplicationImportOptions;
    state: State;
}): Promise<ApplicationSkeleton>;
/**
 * Import applications
 * @param {ApplicationExportInterface} importData import data
 * @param {ApplicationImportOptions} options import options
 * @returns {Promise<ApplicationSkeleton[]>} a promise resolving to an array of oauth2 clients
 */
export declare function importApplications({ importData, options, state, }: {
    importData: ApplicationExportInterface;
    options?: ApplicationImportOptions;
    state: State;
}): Promise<ApplicationSkeleton[]>;
//# sourceMappingURL=ApplicationOps.d.ts.map