import { IObjectMeta } from "@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta";
import { Model, ModelData } from "@kubernetes-models/base";
/**
 * AppProject provides a logical grouping of applications, providing controls for: \* where the apps may deploy to (cluster whitelist) \* what may be deployed (repository whitelist, resource whitelist/blacklist) \* who can access these applications (roles, OIDC group claims bindings) \* and what they can do (RBAC policies) \* automation access to these roles (JWT tokens)
 */
export interface IAppProject {
    /**
     * APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
     */
    "apiVersion": "argoproj.io/v1alpha1";
    /**
     * Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
     */
    "kind": "AppProject";
    "metadata": IObjectMeta;
    /**
     * AppProjectSpec is the specification of an AppProject
     */
    "spec": {
        /**
         * ClusterResourceBlacklist contains list of blacklisted cluster level resources
         */
        "clusterResourceBlacklist"?: Array<{
            "group": string;
            "kind": string;
        }>;
        /**
         * ClusterResourceWhitelist contains list of whitelisted cluster level resources
         */
        "clusterResourceWhitelist"?: Array<{
            "group": string;
            "kind": string;
        }>;
        /**
         * Description contains optional project description
         */
        "description"?: string;
        /**
         * Destinations contains list of destinations available for deployment
         */
        "destinations"?: Array<{
            /**
             * Name is an alternate way of specifying the target cluster by its symbolic name. This must be set if Server is not set.
             */
            "name"?: string;
            /**
             * Namespace specifies the target namespace for the application's resources. The namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace
             */
            "namespace"?: string;
            /**
             * Server specifies the URL of the target cluster's Kubernetes control plane API. This must be set if Name is not set.
             */
            "server"?: string;
        }>;
        /**
         * NamespaceResourceBlacklist contains list of blacklisted namespace level resources
         */
        "namespaceResourceBlacklist"?: Array<{
            "group": string;
            "kind": string;
        }>;
        /**
         * NamespaceResourceWhitelist contains list of whitelisted namespace level resources
         */
        "namespaceResourceWhitelist"?: Array<{
            "group": string;
            "kind": string;
        }>;
        /**
         * OrphanedResources specifies if controller should monitor orphaned resources of apps in this project
         */
        "orphanedResources"?: {
            /**
             * Ignore contains a list of resources that are to be excluded from orphaned resources monitoring
             */
            "ignore"?: Array<{
                "group"?: string;
                "kind"?: string;
                "name"?: string;
            }>;
            /**
             * Warn indicates if warning condition should be created for apps which have orphaned resources
             */
            "warn"?: boolean;
        };
        /**
         * PermitOnlyProjectScopedClusters determines whether destinations can only reference clusters which are project-scoped
         */
        "permitOnlyProjectScopedClusters"?: boolean;
        /**
         * Roles are user defined RBAC roles associated with this project
         */
        "roles"?: Array<{
            /**
             * Description is a description of the role
             */
            "description"?: string;
            /**
             * Groups are a list of OIDC group claims bound to this role
             */
            "groups"?: Array<string>;
            /**
             * JWTTokens are a list of generated JWT tokens bound to this role
             */
            "jwtTokens"?: Array<{
                "exp"?: number;
                "iat": number;
                "id"?: string;
            }>;
            /**
             * Name is a name for this role
             */
            "name": string;
            /**
             * Policies Stores a list of casbin formatted strings that define access policies for the role in the project
             */
            "policies"?: Array<string>;
        }>;
        /**
         * SignatureKeys contains a list of PGP key IDs that commits in Git must be signed with in order to be allowed for sync
         */
        "signatureKeys"?: Array<{
            /**
             * The ID of the key in hexadecimal notation
             */
            "keyID": string;
        }>;
        /**
         * SourceNamespaces defines the namespaces application resources are allowed to be created in
         */
        "sourceNamespaces"?: Array<string>;
        /**
         * SourceRepos contains list of repository URLs which can be used for deployment
         */
        "sourceRepos"?: Array<string>;
        /**
         * SyncWindows controls when syncs can be run for apps in this project
         */
        "syncWindows"?: Array<{
            /**
             * Applications contains a list of applications that the window will apply to
             */
            "applications"?: Array<string>;
            /**
             * Clusters contains a list of clusters that the window will apply to
             */
            "clusters"?: Array<string>;
            /**
             * Duration is the amount of time the sync window will be open
             */
            "duration"?: string;
            /**
             * Kind defines if the window allows or blocks syncs
             */
            "kind"?: string;
            /**
             * ManualSync enables manual syncs when they would otherwise be blocked
             */
            "manualSync"?: boolean;
            /**
             * Namespaces contains a list of namespaces that the window will apply to
             */
            "namespaces"?: Array<string>;
            /**
             * Schedule is the time the window will begin, specified in cron format
             */
            "schedule"?: string;
            /**
             * TimeZone of the sync that will be applied to the schedule
             */
            "timeZone"?: string;
        }>;
    };
    /**
     * AppProjectStatus contains status information for AppProject CRs
     */
    "status"?: {
        /**
         * JWTTokensByRole contains a list of JWT tokens issued for a given role
         */
        "jwtTokensByRole"?: {
            [key: string]: {
                "items"?: Array<{
                    "exp"?: number;
                    "iat": number;
                    "id"?: string;
                }>;
            };
        };
    };
}
/**
 * AppProject provides a logical grouping of applications, providing controls for: \* where the apps may deploy to (cluster whitelist) \* what may be deployed (repository whitelist, resource whitelist/blacklist) \* who can access these applications (roles, OIDC group claims bindings) \* and what they can do (RBAC policies) \* automation access to these roles (JWT tokens)
 */
export declare class AppProject extends Model<IAppProject> implements IAppProject {
    "apiVersion": IAppProject["apiVersion"];
    "kind": IAppProject["kind"];
    "metadata": IAppProject["metadata"];
    "spec": IAppProject["spec"];
    "status"?: IAppProject["status"];
    static apiVersion: IAppProject["apiVersion"];
    static kind: IAppProject["kind"];
    static is: import("@kubernetes-models/base").TypeMetaGuard<IAppProject>;
    constructor(data?: ModelData<IAppProject>);
}
