/// <reference types="mongoose/types/aggregate" />
/// <reference types="mongoose/types/callback" />
/// <reference types="mongoose/types/collection" />
/// <reference types="mongoose/types/connection" />
/// <reference types="mongoose/types/cursor" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/expressions" />
/// <reference types="mongoose/types/helpers" />
/// <reference types="mongoose/types/middlewares" />
/// <reference types="mongoose/types/indexes" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/mongooseoptions" />
/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/populate" />
/// <reference types="mongoose/types/query" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/schematypes" />
/// <reference types="mongoose/types/session" />
/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/utility" />
/// <reference types="mongoose/types/validation" />
/// <reference types="mongoose/types/virtuals" />
/// <reference types="mongoose/types/inferschematype" />
import type { Types } from "mongoose";
import { Schema } from "mongoose";
import type { HiddenBodyKeys } from "../interfaces";
import type { DeployEnvironment } from "../interfaces/DeployEnvironment";
import type { GitProviderType } from "../interfaces/SystemTypes";
import type { IBase } from "./Base";
import type { IGitProvider } from "./GitProvider";
export interface AppGitInfo {
    /**
     * `REQUIRES`
     * ---
     * A SSH URI of the source code repository
     * @example git@bitbucket.org:digitopvn/example-repo.git
     */
    repoSSH: string;
    /**
     * OPTIONAL
     * ---
     * A SSH URI of the source code repository
     * @example https://bitbucket.org/digitopvn/example-repo
     */
    repoURL?: string;
    /**
     * OPTIONAL
     * ---
     * Git provider's type: `github`, `bitbucket`, `gitlab`
     */
    provider?: GitProviderType;
    /**
     * OPTIONAL
     * ---
     * Git provider's type: `github`, `bitbucket`, `gitlab`
     */
    providerID?: string | IGitProvider;
}
/**
 * An interface that extends IBase and describes the properties of an app.
 *
 * @interface IApp
 * @extends {IBase}
 */
export interface IApp extends IBase {
    /**
     * The name of the app.
     *
     * @type {string}
     * @memberof IApp
     */
    name?: string;
    /**
     * OPTIONAL: The image URI of this app on the Container Registry (without `TAG`).
     *
     * Combined from: `<registry-image-base-url>/<project-slug>/<app-name-slug>`
     *
     * **Don't** specify `tag` at the end! (e.g., `latest`, `beta`,...)
     *
     * @type {string}
     * @memberof IApp
     * @default <registry-image-base-url>/<project-slug>/<app-name-slug>
     * @example "asia.gcr.io/my-workspace/my-project/my-app"
     */
    image?: string;
    /**
     * The slug of the app.
     *
     * @type {string}
     * @memberof IApp
     */
    slug?: string;
    /**
     * The user who created the app.
     *
     * @type {string}
     * @memberof IApp
     */
    createdBy?: string;
    /**
     * The user who last updated the app.
     *
     * @type {string}
     * @memberof IApp
     */
    lastUpdatedBy?: string;
    /**
     * Git Provider of this app
     */
    gitProvider?: Types.ObjectId | IGitProvider | string;
    /**
     * The Git information of the app.
     *
     * @type {AppGitInfo}
     * @memberof IApp
     */
    git?: AppGitInfo;
    /**
     * The framework information of the app.
     *
     * @memberof IApp
     */
    framework?: {
        name?: string;
        slug?: string;
        version?: string;
        repoURL?: string;
        repoSSH?: string;
    };
    /**
     * The environment information of the app.
     *
     * @type {{ [key: string]: DeployEnvironment | string }}
     * @memberof IApp
     * @deprecated
     */
    environment?: {
        [key: string]: DeployEnvironment | string;
    };
    /**
     * The deploy environment information of the app.
     *
     * @type {{ [key: string]: DeployEnvironment }}
     * @memberof IApp
     */
    deployEnvironment?: {
        [key: string]: DeployEnvironment;
    };
    /**
     * The latest build of the app.
     *
     * @type {string}
     * @memberof IApp
     */
    latestBuild?: string;
    /**
     * The incremental integer of build for this app
     */
    buildNumber?: number;
    /**
     * The project slug of the app.
     *
     * @type {string}
     * @memberof IApp
     */
    projectSlug?: string;
    /**
     * Date when the application was archived (take down all deploy environments)
     */
    archivedAt?: Date;
}
export type AppDto = Omit<IApp, keyof HiddenBodyKeys>;
export declare const appSchema: Schema<IApp, import("mongoose").Model<IApp, any, any, any, import("mongoose").Document<unknown, any, IApp> & IApp & Required<{
    _id: string | Types.ObjectId;
}>, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IApp, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<IApp>> & import("mongoose").FlatRecord<IApp> & Required<{
    _id: string | Types.ObjectId;
}>>;
//# sourceMappingURL=App.d.ts.map