import IdentitiesInterfaces = require("../interfaces/IdentitiesInterfaces");
import VSSInterfaces = require("../interfaces/common/VSSInterfaces");
export interface CategorizedWebApiTeams {
    /**
     * Teams that the user is a member of.
     */
    myTeams?: WebApiTeam[];
    /**
     * Teams that the user can read but is not member of.
     */
    otherReadableTeams?: WebApiTeam[];
}
export declare enum ConnectedServiceKind {
    /**
     * Custom or unknown service
     */
    Custom = 0,
    /**
     * Azure Subscription
     */
    AzureSubscription = 1,
    /**
     * Chef Connection
     */
    Chef = 2,
    /**
     * Generic Connection
     */
    Generic = 3
}
export interface IdentityData {
    identityIds?: string[];
}
export interface Process extends ProcessReference {
    _links?: any;
    description?: string;
    id?: string;
    isDefault?: boolean;
    type?: ProcessType;
}
/**
 * Type of process customization on a collection.
 */
export declare enum ProcessCustomizationType {
    /**
     * Process customization can't be computed.
     */
    Unknown = -1,
    /**
     * Customization based on project-scoped xml customization
     */
    Xml = 0,
    /**
     * Customization based on process inheritance
     */
    Inherited = 1
}
export interface ProcessReference {
    name?: string;
    url?: string;
}
export declare enum ProcessType {
    System = 0,
    Custom = 1,
    Inherited = 2
}
/**
 * Contains the image data for project avatar.
 */
export interface ProjectAvatar {
    /**
     * The avatar image represented as a byte array.
     */
    image?: number[];
}
export declare enum ProjectChangeType {
    Modified = 0,
    Deleted = 1,
    Added = 2
}
/**
 * Contains information describing a project.
 */
export interface ProjectInfo {
    /**
     * The abbreviated name of the project.
     */
    abbreviation?: string;
    /**
     * The description of the project.
     */
    description?: string;
    /**
     * The id of the project.
     */
    id?: string;
    /**
     * The time that this project was last updated.
     */
    lastUpdateTime?: Date;
    /**
     * The name of the project.
     */
    name?: string;
    /**
     * A set of name-value pairs storing additional property data related to the project.
     */
    properties?: ProjectProperty[];
    /**
     * The current revision of the project.
     */
    revision?: number;
    /**
     * The current state of the project.
     */
    state?: any;
    /**
     * A Uri that can be used to refer to this project.
     */
    uri?: string;
    /**
     * The version number of the project.
     */
    version?: number;
    /**
     * Indicates whom the project is visible to.
     */
    visibility?: ProjectVisibility;
}
export interface ProjectMessage {
    project?: ProjectInfo;
    projectChangeType?: ProjectChangeType;
    shouldInvalidateSystemStore?: boolean;
}
export interface ProjectProperties {
    /**
     * The team project Id
     */
    projectId?: string;
    /**
     * The collection of team project properties
     */
    properties?: ProjectProperty[];
}
/**
 * A named value associated with a project.
 */
export interface ProjectProperty {
    /**
     * The name of the property.
     */
    name?: string;
    /**
     * The value of the property.
     */
    value?: any;
}
export declare enum ProjectVisibility {
    Unchanged = -1,
    /**
     * The project is only visible to users with explicit access.
     */
    Private = 0,
    /**
     * Enterprise level project visibility
     */
    Organization = 1,
    /**
     * The project is visible to all.
     */
    Public = 2,
    SystemPrivate = 3
}
export interface Proxy {
    authorization?: ProxyAuthorization;
    /**
     * This is a description string
     */
    description?: string;
    /**
     * The friendly name of the server
     */
    friendlyName?: string;
    globalDefault?: boolean;
    /**
     * This is a string representation of the site that the proxy server is located in (e.g. "NA-WA-RED")
     */
    site?: string;
    siteDefault?: boolean;
    /**
     * The URL of the proxy server
     */
    url?: string;
}
export interface ProxyAuthorization {
    /**
     * Gets or sets the endpoint used to obtain access tokens from the configured token service.
     */
    authorizationUrl?: string;
    /**
     * Gets or sets the client identifier for this proxy.
     */
    clientId?: string;
    /**
     * Gets or sets the user identity to authorize for on-prem.
     */
    identity?: IdentitiesInterfaces.IdentityDescriptor;
    /**
     * Gets or sets the public key used to verify the identity of this proxy. Only specify on hosted.
     */
    publicKey?: VSSInterfaces.PublicKey;
}
export declare enum SourceControlTypes {
    Tfvc = 1,
    Git = 2
}
/**
 * The Team Context for an operation.
 */
export interface TeamContext {
    /**
     * The team project Id or name.  Ignored if ProjectId is set.
     */
    project?: string;
    /**
     * The Team Project ID.  Required if Project is not set.
     */
    projectId?: string;
    /**
     * The Team Id or name.  Ignored if TeamId is set.
     */
    team?: string;
    /**
     * The Team Id
     */
    teamId?: string;
}
/**
 * Represents a Team Project object.
 */
export interface TeamProject extends TeamProjectReference {
    /**
     * The links to other objects related to this object.
     */
    _links?: any;
    /**
     * Set of capabilities this project has (such as process template & version control).
     */
    capabilities?: {
        [key: string]: {
            [key: string]: string;
        };
    };
    /**
     * The shallow ref to the default team.
     */
    defaultTeam?: WebApiTeamRef;
}
/**
 * Data contract for a TeamProjectCollection.
 */
export interface TeamProjectCollection extends TeamProjectCollectionReference {
    /**
     * The links to other objects related to this object.
     */
    _links?: any;
    /**
     * Project collection description.
     */
    description?: string;
    /**
     * Process customization type on this collection. It can be Xml or Inherited.
     */
    processCustomizationType?: ProcessCustomizationType;
    /**
     * Project collection state.
     */
    state?: string;
}
/**
 * Reference object for a TeamProjectCollection.
 */
export interface TeamProjectCollectionReference {
    /**
     * Collection avatar Url.
     */
    avatarUrl?: string;
    /**
     * Collection Id.
     */
    id?: string;
    /**
     * Collection Name.
     */
    name?: string;
    /**
     * Collection REST Url.
     */
    url?: string;
}
/**
 * Represents a shallow reference to a TeamProject.
 */
export interface TeamProjectReference {
    /**
     * Project abbreviation.
     */
    abbreviation?: string;
    /**
     * Url to default team identity image.
     */
    defaultTeamImageUrl?: string;
    /**
     * The project's description (if any).
     */
    description?: string;
    /**
     * Project identifier.
     */
    id?: string;
    /**
     * Project last update time.
     */
    lastUpdateTime?: Date;
    /**
     * Project name.
     */
    name?: string;
    /**
     * Project revision.
     */
    revision?: number;
    /**
     * Project state.
     */
    state?: any;
    /**
     * Url to the full version of the object.
     */
    url?: string;
    /**
     * Project visibility.
     */
    visibility?: ProjectVisibility;
}
/**
 * A data transfer object that stores the metadata associated with the creation of temporary data.
 */
export interface TemporaryDataCreatedDTO extends TemporaryDataDTO {
    /**
     * Temporary data expiration date.
     */
    expirationDate?: Date;
    /**
     * Temporary data id.
     */
    id?: string;
    /**
     * Rest url for the temporary data.
     */
    url?: string;
}
/**
 * A data transfer object that stores the metadata associated with the temporary data.
 */
export interface TemporaryDataDTO {
    /**
     * Temporary data expire in seconds
     */
    expirationSeconds?: number;
    /**
     * Temporary data origin
     */
    origin?: string;
    /**
     * Temporary data.
     */
    value?: any;
}
/**
 * Updateable properties for a WebApiTeam.
 */
export interface UpdateTeam {
    /**
     * New description for the team.
     */
    description?: string;
    /**
     * New name for the team.
     */
    name?: string;
}
export interface WebApiConnectedService extends WebApiConnectedServiceRef {
    /**
     * The user who did the OAuth authentication to created this service
     */
    authenticatedBy?: VSSInterfaces.IdentityRef;
    /**
     * Extra description on the service.
     */
    description?: string;
    /**
     * Friendly Name of service connection
     */
    friendlyName?: string;
    /**
     * Id/Name of the connection service. For Ex: Subscription Id for Azure Connection
     */
    id?: string;
    /**
     * The kind of service.
     */
    kind?: string;
    /**
     * The project associated with this service
     */
    project?: TeamProjectReference;
    /**
     * Optional uri to connect directly to the service such as https://windows.azure.com
     */
    serviceUri?: string;
}
export interface WebApiConnectedServiceDetails extends WebApiConnectedServiceRef {
    /**
     * Meta data for service connection
     */
    connectedServiceMetaData?: WebApiConnectedService;
    /**
     * Credential info
     */
    credentialsXml?: string;
    /**
     * Optional uri to connect directly to the service such as https://windows.azure.com
     */
    endPoint?: string;
}
export interface WebApiConnectedServiceRef {
    id?: string;
    url?: string;
}
/**
 * The representation of data needed to create a tag definition which is sent across the wire.
 */
export interface WebApiCreateTagRequestData {
    /**
     * Name of the tag definition that will be created.
     */
    name: string;
}
export interface WebApiProject extends TeamProjectReference {
    /**
     * Set of capabilities this project has
     */
    capabilities?: {
        [key: string]: {
            [key: string]: string;
        };
    };
    /**
     * Reference to collection which contains this project
     */
    collection?: WebApiProjectCollectionRef;
    /**
     * Default team for this project
     */
    defaultTeam?: WebApiTeamRef;
}
export interface WebApiProjectCollection extends WebApiProjectCollectionRef {
    /**
     * Project collection description
     */
    description?: string;
    /**
     * Project collection state
     */
    state?: string;
}
export interface WebApiProjectCollectionRef {
    /**
     * Collection Tfs Url (Host Url)
     */
    collectionUrl?: string;
    /**
     * Collection Guid
     */
    id?: string;
    /**
     * Collection Name
     */
    name?: string;
    /**
     * Collection REST Url
     */
    url?: string;
}
/**
 * The representation of a tag definition which is sent across the wire.
 */
export interface WebApiTagDefinition {
    /**
     * Whether or not the tag definition is active.
     */
    active?: boolean;
    /**
     * ID of the tag definition.
     */
    id?: string;
    /**
     * The name of the tag definition.
     */
    name?: string;
    /**
     * Resource URL for the Tag Definition.
     */
    url?: string;
}
export interface WebApiTeam extends WebApiTeamRef {
    /**
     * Team description
     */
    description?: string;
    /**
     * Team identity.
     */
    identity?: IdentitiesInterfaces.Identity;
    /**
     * Identity REST API Url to this team
     */
    identityUrl?: string;
    projectId?: string;
    projectName?: string;
}
export interface WebApiTeamRef {
    /**
     * Team (Identity) Guid. A Team Foundation ID.
     */
    id?: string;
    /**
     * Team name
     */
    name?: string;
    /**
     * Team REST API Url
     */
    url?: string;
}
export declare var TypeInfo: {
    ConnectedServiceKind: {
        enumValues: {
            custom: number;
            azureSubscription: number;
            chef: number;
            generic: number;
        };
    };
    Process: any;
    ProcessCustomizationType: {
        enumValues: {
            unknown: number;
            xml: number;
            inherited: number;
        };
    };
    ProcessType: {
        enumValues: {
            system: number;
            custom: number;
            inherited: number;
        };
    };
    ProjectChangeType: {
        enumValues: {
            modified: number;
            deleted: number;
            added: number;
        };
    };
    ProjectInfo: any;
    ProjectMessage: any;
    ProjectVisibility: {
        enumValues: {
            private: number;
            organization: number;
            public: number;
        };
    };
    SourceControlTypes: {
        enumValues: {
            tfvc: number;
            git: number;
        };
    };
    TeamProject: any;
    TeamProjectCollection: any;
    TeamProjectReference: any;
    TemporaryDataCreatedDTO: any;
    WebApiConnectedService: any;
    WebApiConnectedServiceDetails: any;
    WebApiProject: any;
};
