/**
 * Identifies an attribute with a name and a container.
 */
export interface AttributeDescriptor {
    /**
     * The name of the attribute.
     */
    attributeName: string;
    /**
     * The container the attribute resides in.
     */
    containerName: string;
}
/**
 * Stores a set of named profile attributes.
 */
export interface AttributesContainer {
    /**
     * The attributes stored by the container.
     */
    attributes: {
        [key: string]: ProfileAttribute;
    };
    /**
     * The name of the container.
     */
    containerName: string;
    /**
     * The maximum revision number of any attribute within the container.
     */
    revision: number;
}
export interface Avatar {
    isAutoGenerated: boolean;
    size: AvatarSize;
    timeStamp: Date;
    value: number[];
}
/**
 * Small = 34 x 34 pixels; Medium = 44 x 44 pixels; Large = 220 x 220 pixels
 */
export declare enum AvatarSize {
    Small = 0,
    Medium = 1,
    Large = 2
}
/**
 * A profile attribute which always has a value for each profile.
 */
export interface CoreProfileAttribute extends ProfileAttributeBase<any> {
}
export interface CreateProfileContext {
    ciData: {
        [key: string]: any;
    };
    contactWithOffers: boolean;
    countryName: string;
    displayName: string;
    emailAddress: string;
    hasAccount: boolean;
    language: string;
    phoneNumber: string;
    /**
     * The current state of the profile.
     */
    profileState: ProfileState;
}
export interface GeoRegion {
    regionCode: string;
}
/**
 * A user profile.
 */
export interface Profile {
    /**
     * The attributes of this profile.
     */
    applicationContainer: AttributesContainer;
    /**
     * The core attributes of this profile.
     */
    coreAttributes: {
        [key: string]: CoreProfileAttribute;
    };
    /**
     * The maximum revision number of any attribute.
     */
    coreRevision: number;
    /**
     * The unique identifier of the profile.
     */
    id: string;
    /**
     * The current state of the profile.
     */
    profileState: ProfileState;
    /**
     * The maximum revision number of any attribute.
     */
    revision: number;
    /**
     * The time at which this profile was last changed.
     */
    timeStamp: Date;
}
/**
 * A named object associated with a profile.
 */
export interface ProfileAttribute extends ProfileAttributeBase<string> {
}
export interface ProfileAttributeBase<T> {
    /**
     * The descriptor of the attribute.
     */
    descriptor: AttributeDescriptor;
    /**
     * The revision number of the attribute.
     */
    revision: number;
    /**
     * The time the attribute was last changed.
     */
    timeStamp: Date;
    /**
     * The value of the attribute.
     */
    value: T;
}
/**
 * Country/region information
 */
export interface ProfileRegion {
    /**
     * The two-letter code defined in ISO 3166 for the country/region.
     */
    code: string;
    /**
     * Localized country/region name
     */
    name: string;
}
/**
 * Container of country/region information
 */
export interface ProfileRegions {
    /**
     * List of country/region code with contact consent requirement type of notice
     */
    noticeContactConsentRequirementRegions: string[];
    /**
     * List of country/region code with contact consent requirement type of opt-out
     */
    optOutContactConsentRequirementRegions: string[];
    /**
     * List of country/regions
     */
    regions: ProfileRegion[];
}
/**
 * The state of a profile.
 */
export declare enum ProfileState {
    /**
     * The profile is in use.
     */
    Custom = 0,
    /**
     * The profile is in use, but can only be read.
     */
    CustomReadOnly = 1,
    /**
     * The profile may only be read.
     */
    ReadOnly = 2
}
