export default User;
export type BuObject = import("../../types/mcdev.d.js").BuObject;
export type CodeExtract = import("../../types/mcdev.d.js").CodeExtract;
export type CodeExtractItem = import("../../types/mcdev.d.js").CodeExtractItem;
export type MetadataTypeItem = import("../../types/mcdev.d.js").MetadataTypeItem;
export type MetadataTypeItemDiff = import("../../types/mcdev.d.js").MetadataTypeItemDiff;
export type MetadataTypeItemObj = import("../../types/mcdev.d.js").MetadataTypeItemObj;
export type MetadataTypeMap = import("../../types/mcdev.d.js").MetadataTypeMap;
export type MetadataTypeMapObj = import("../../types/mcdev.d.js").MetadataTypeMapObj;
export type SoapRequestParams = import("../../types/mcdev.d.js").SoapRequestParams;
export type TemplateMap = import("../../types/mcdev.d.js").TemplateMap;
export type UserDocument = import("../../types/mcdev.d.js").UserDocument;
export type UserDocumentDocument = import("../../types/mcdev.d.js").UserDocumentDocument;
export type UserDocumentDiff = import("../../types/mcdev.d.js").UserDocumentDiff;
export type UserDocumentMap = import("../../types/mcdev.d.js").UserDocumentMap;
export type AccountUserConfiguration = import("../../types/mcdev.d.js").AccountUserConfiguration;
/**
 * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
 * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract
 * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
 * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
 * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
 * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
 * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
 * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
 * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
 * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
 */
/**
 * @typedef {import('../../types/mcdev.d.js').UserDocument} UserDocument
 * @typedef {import('../../types/mcdev.d.js').UserDocumentDocument} UserDocumentDocument
 * @typedef {import('../../types/mcdev.d.js').UserDocumentDiff} UserDocumentDiff
 * @typedef {import('../../types/mcdev.d.js').UserDocumentMap} UserDocumentMap
 * @typedef {import('../../types/mcdev.d.js').AccountUserConfiguration} AccountUserConfiguration
 */
/**
 * MetadataType
 *
 * @augments MetadataType
 */
declare class User extends MetadataType {
    static userBUassignments: any;
    static userIdBuMap: any;
    /**
     * Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
     *
     * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
     * @param {void | string[]} _ unused parameter
     * @param {void | string[]} [__] unused parameter
     * @param {string} [key] customer key of single item to retrieve
     * @returns {Promise.<MetadataTypeMapObj>} Promise of metadata
     */
    static retrieve(retrieveDir: string, _: void | string[], __?: void | string[], key?: string): Promise<MetadataTypeMapObj>;
    /**
     * Retrieves import definition metadata for caching
     *
     * @returns {Promise.<MetadataTypeMapObj>} Promise
     */
    static retrieveForCache(): Promise<MetadataTypeMapObj>;
    /**
     * Create a single item.
     *
     * @param {MetadataTypeItem} metadata single metadata entry
     * @returns {Promise} Promise
     */
    static create(metadata: MetadataTypeItem): Promise<any>;
    /**
     * Updates a single item.
     *
     * @param {MetadataTypeItem} metadata single metadata entry
     * @returns {Promise} Promise
     */
    static update(metadata: MetadataTypeItem): Promise<any>;
    /**
     * prepares a item for deployment
     *
     * @param {UserDocument} metadata of a single item
     * @returns {Promise.<UserDocument>} metadata object
     */
    static preDeployTasks(metadata: UserDocument): Promise<UserDocument>;
    /**
     * helper for {@link MetadataType.upsert}
     *
     * @param {MetadataTypeMap} metadata list of metadata
     * @param {string} metadataKey key of item we are looking at
     * @param {boolean} hasError error flag from previous code
     * @param {UserDocumentDiff[]} metadataToUpdate list of items to update
     * @param {UserDocument[]} metadataToCreate list of items to create
     * @returns {Promise.<'create'|'update'|'skip'>} action to take
     */
    static createOrUpdate(metadata: MetadataTypeMap, metadataKey: string, hasError: boolean, metadataToUpdate: UserDocumentDiff[], metadataToCreate: UserDocument[]): Promise<"create" | "update" | "skip">;
    /**
     * helper for {@link createOrUpdate}
     *
     * @private
     * @param {MetadataTypeItem} metadata single metadata itme
     * @param {UserDocumentDiff} [updateItem] item to update
     * @param {UserDocument} [createItem] item to create
     */
    private static _prepareBuAssignments;
    /**
     * Gets executed after deployment of metadata type
     *
     * @param {UserDocumentMap} upsertResults metadata mapped by their keyField
     * @returns {Promise.<void>} promise
     */
    static postDeployTasks(upsertResults: UserDocumentMap): Promise<void>;
    /**
     * create/update business unit assignments. helper for {@link postDeployTasks}
     *
     * @private
     * @param {UserDocumentMap} upsertResults metadata mapped by their keyField
     * @returns {Promise.<void>} -
     */
    private static _handleBuAssignments;
    /**
     * helper for {@link User.createOrUpdate}
     *
     * @private
     * @param {UserDocument} metadata single created user
     * @returns {void}
     */
    private static _setPasswordForNewUser;
    /**
     * helper for {@link User.createOrUpdate}
     * It searches for roles that were removed from the user and unassigns them; it also prints a summary of added/removed roles
     * Adding roles works automatically for roles listed on the user
     *
     * @private
     * @param {UserDocumentDiff} item updated user with before and after state
     * @returns {void}
     */
    private static _prepareRoleAssignments;
    /**
     * helper for {@link User._prepareRoleAssignments}
     *
     * @param {string} roleId role.ObjectID
     * @param {string} roleName role.Name
     * @param {number} userId user.AccountUserID
     * @param {boolean} assignmentOnly if true, only assignment configuration will be returned
     * @param {boolean} [isRoleRemovale] if true, role will be removed from user; otherwise added
     * @returns {object} format needed by API
     */
    static _getRoleObjectForDeploy(roleId: string, roleName: string, userId: number, assignmentOnly: boolean, isRoleRemovale?: boolean): object;
    /**
     * Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
     *
     * @returns {Promise.<MetadataTypeMapObj>} Promise of metadata
     */
    static retrieveChangelog(): Promise<MetadataTypeMapObj>;
    /**
     * Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
     *
     * @private
     * @param {string} [retrieveDir] Directory where retrieved metadata directory will be saved
     * @param {string} [key] customer key of single item to retrieve
     * @returns {Promise.<MetadataTypeMapObj>} Promise of metadata
     */
    private static _retrieve;
    /**
     * Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata
     *
     * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
     * @param {SoapRequestParams} [requestParams] required for the specific request (filter for example)
     * @param {string} [singleRetrieve] key of single item to filter by
     * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true
     * @returns {Promise.<MetadataTypeMapObj>} Promise of item map
     */
    static retrieveSOAP(retrieveDir: string, requestParams?: SoapRequestParams, singleRetrieve?: string, additionalFields?: string[]): Promise<MetadataTypeMapObj>;
    /**
     * helper for {@link retrieveSOAP} and {@link upsert}; populates userIdBuMap
     *
     * @param {MetadataTypeItem[]} [metadataList] -
     * @returns {Promise.<void>} -
     */
    static cacheBusinessUnitAssignments(metadataList?: MetadataTypeItem[]): Promise<void>;
    /**
     * helper for {@link User.retrieveSOAP}
     *
     * @private
     * @param {SoapRequestParams} requestParams required for the specific request (filter for example)
     * @param {string} soapType e.g. AccountUser
     * @param {string[]} fields list of fields to retrieve
     * @param {object} resultsBulk actual return value of this method
     * @returns {Promise.<boolean>} success flag
     */
    private static _retrieveSOAP_installedPackage;
    /**
     *
     * @param {string} dateStr first date
     * @param {string} interval defaults to 'days'
     * @returns {string} time difference
     */
    static "__#private@#timeSinceDate"(dateStr: string, interval?: string): string;
    /**
     * helper to print bu names
     *
     * @private
     * @param {number} id bu id
     * @returns {string} "bu name (bu id)""
     */
    private static _getBuName;
    /**
     * helper that gets BU names from config
     *
     * @private
     */
    private static _getBuNames;
    /**
     * helper for {@link User.createOrUpdate} to generate a random initial password for new users
     * note: possible minimum length values in SFMC are 6, 8, 10, 15 chars. Therefore we should default here to 15 chars.
     *
     * @private
     * @param {number} [length] length of password; defaults to 15
     * @returns {string} random password
     */
    private static _generatePassword;
    /**
     * Creates markdown documentation of all roles
     *
     * @param {UserDocumentMap} [metadata] user list
     * @returns {Promise.<void>} -
     */
    static document(metadata?: UserDocumentMap): Promise<void>;
    /**
     *
     * @private
     * @param {object[]} users list of users and installed package
     * @param {'Installed Package'|'User'|'Inactivated User'} type choose what sub type to print
     * @param {Array[]} columnsToPrint helper array
     * @returns {string} markdown
     */
    private static _generateDocMd;
    /**
     * manages post retrieve steps
     *
     * @param {UserDocument} metadata a single item
     * @returns {MetadataTypeItem | void} a single item
     */
    static postRetrieveTasks(metadata: UserDocument): MetadataTypeItem | void;
}
declare namespace User {
    let buIdName: {};
    let definition: {
        bodyIteratorField: string;
        dependencies: string[];
        dependencyGraph: {};
        folderType: any;
        hasExtended: boolean;
        idField: string;
        keepId: boolean;
        keyIsFixed: boolean;
        keyField: string;
        nameField: string;
        createdDateField: string;
        createdNameField: any;
        lastmodDateField: string;
        lastmodNameField: string;
        maxKeyLength: number;
        type: string;
        soapType: string;
        typeDescription: string;
        typeName: string;
        typeRetrieveByDefault: boolean;
        typeCdpByDefault: boolean;
        documentInOneFile: boolean;
        stringifyFieldsBeforeTemplate: string[];
        fields: {
            AccountUserID: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            ActiveFlag: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            AssociatedBusinessUnits: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            BusinessUnit: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            ChallengeAnswer: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            ChallengePhrase: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'Client.ID': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'Client.ModifiedBy': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'Client.PartnerClientKey': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            CorrelationID: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            CreatedDate: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            CustomerKey: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            DefaultApplication: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            DefaultBusinessUnit: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            DefaultBusinessUnitObject: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            Delete: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            Email: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            ID: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            IsAPIUser: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            IsLocked: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'LanguageLocale.LocaleCode': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            LastSuccessfulLogin: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'Locale.LocaleCode': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'Locale.ObjectID': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'Locale.PartnerKey': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            ModifiedDate: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            MustChangePassword: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            Name: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            NotificationEmailAddress: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            ObjectID: {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: any;
            };
            ObjectState: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            Owner: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            PartnerKey: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            PartnerProperties: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            Password: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            Roles: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'Roles.Role': {
                skipValidation: boolean;
            };
            'Roles.Role[].Client': {
                skipValidation: boolean;
            };
            SsoIdentities: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'SsoIdentities.SsoIdentity': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'SsoIdentities.SsoIdentity[].IsActive': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'SsoIdentities.SsoIdentity[].FederatedID': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'TimeZone.ID': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'TimeZone.Name': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'TimeZone.ObjectID': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'TimeZone.PartnerKey': {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            Unlock: {
                skipValidation: boolean;
                isCreateable: boolean;
                isUpdateable: boolean;
                template: boolean;
            };
            UserID: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            UserPermissions: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions.PartnerKey': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions.ID': {
                skipValidation: boolean;
            };
            'UserPermissions.ObjectID': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions.Name': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions.Value': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions.Description': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions.Delete': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions[].PartnerKey': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions[].ID': {
                skipValidation: boolean;
            };
            'UserPermissions[].ObjectID': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions[].Name': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions[].Value': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions[].Description': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            'UserPermissions[].Delete': {
                isCreateable: any;
                isUpdateable: any;
                retrieving: boolean;
                template: boolean;
            };
            c__type: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieve: any;
                template: boolean;
            };
            c__AssociatedBusinessUnits: {
                skipValidation: boolean;
            };
            c__RoleNamesGlobal: {
                skipValidation: boolean;
            };
            c__LocaleCode: {
                skipValidation: boolean;
            };
            c__TimeZoneName: {
                skipValidation: boolean;
            };
            c__AccountUserID: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieve: any;
                template: boolean;
            };
            c__IsLocked_readOnly: {
                isCreateable: boolean;
                isUpdateable: boolean;
                retrieve: any;
                template: boolean;
            };
        };
    };
}
import MetadataType from './MetadataType.js';
//# sourceMappingURL=User.d.ts.map