import * as Core from 'cloudflare/core';
import { APIResource } from 'cloudflare/resource';
import * as PoliciesAPI from 'cloudflare/resources/zero-trust/access/applications/policies';
import * as AccessAPI from 'cloudflare/resources/zero-trust/access/access';
import { SinglePage } from 'cloudflare/pagination';
export declare class Policies extends APIResource {
    /**
     * Create a new Access policy for an application.
     */
    create(uuid: string, params: PolicyCreateParams, options?: Core.RequestOptions): Core.APIPromise<Policy>;
    /**
     * Update a configured Access policy.
     */
    update(uuid1: string, uuid: string, params: PolicyUpdateParams, options?: Core.RequestOptions): Core.APIPromise<Policy>;
    /**
     * Lists Access policies configured for an application.
     */
    list(uuid: string, params?: PolicyListParams, options?: Core.RequestOptions): Core.PagePromise<PoliciesSinglePage, Policy>;
    list(uuid: string, options?: Core.RequestOptions): Core.PagePromise<PoliciesSinglePage, Policy>;
    /**
     * Delete an Access policy.
     */
    delete(uuid1: string, uuid: string, params?: PolicyDeleteParams, options?: Core.RequestOptions): Core.APIPromise<PolicyDeleteResponse>;
    delete(uuid1: string, uuid: string, options?: Core.RequestOptions): Core.APIPromise<PolicyDeleteResponse>;
    /**
     * Fetches a single Access policy.
     */
    get(uuid1: string, uuid: string, params?: PolicyGetParams, options?: Core.RequestOptions): Core.APIPromise<Policy>;
    get(uuid1: string, uuid: string, options?: Core.RequestOptions): Core.APIPromise<Policy>;
}
export declare class PoliciesSinglePage extends SinglePage<Policy> {
}
/**
 * A group of email addresses that can approve a temporary authentication request.
 */
export interface ApprovalGroup {
    /**
     * The number of approvals needed to obtain access.
     */
    approvals_needed: number;
    /**
     * A list of emails that can approve the access request.
     */
    email_addresses?: Array<string>;
    /**
     * The UUID of an re-usable email list.
     */
    email_list_uuid?: string;
}
export interface Policy {
    /**
     * UUID
     */
    id?: string;
    /**
     * Administrators who can approve a temporary authentication request.
     */
    approval_groups?: Array<ApprovalGroup>;
    /**
     * Requires the user to request access from an administrator at the start of each
     * session.
     */
    approval_required?: boolean;
    created_at?: string;
    /**
     * The action Access will take if a user matches this policy.
     */
    decision?: 'allow' | 'deny' | 'non_identity' | 'bypass';
    /**
     * Rules evaluated with a NOT logical operator. To match the policy, a user cannot
     * meet any of the Exclude rules.
     */
    exclude?: Array<AccessAPI.AccessRule>;
    /**
     * Rules evaluated with an OR logical operator. A user needs to meet only one of
     * the Include rules.
     */
    include?: Array<AccessAPI.AccessRule>;
    /**
     * Require this application to be served in an isolated browser for users matching
     * this policy. 'Client Web Isolation' must be on for the account in order to use
     * this feature.
     */
    isolation_required?: boolean;
    /**
     * The name of the Access policy.
     */
    name?: string;
    /**
     * The order of execution for this policy. Must be unique for each policy.
     */
    precedence?: number;
    /**
     * A custom message that will appear on the purpose justification screen.
     */
    purpose_justification_prompt?: string;
    /**
     * Require users to enter a justification when they log in to the application.
     */
    purpose_justification_required?: boolean;
    /**
     * Rules evaluated with an AND logical operator. To match the policy, a user must
     * meet all of the Require rules.
     */
    require?: Array<AccessAPI.AccessRule>;
    /**
     * The amount of time that tokens issued for the application will be valid. Must be
     * in the format `300ms` or `2h45m`. Valid time units are: ns, us (or µs), ms, s,
     * m, h.
     */
    session_duration?: string;
    updated_at?: string;
}
export interface PolicyDeleteResponse {
    /**
     * UUID
     */
    id?: string;
}
export interface PolicyCreateParams {
    /**
     * Body param: The action Access will take if a user matches this policy.
     */
    decision: 'allow' | 'deny' | 'non_identity' | 'bypass';
    /**
     * Body param: Rules evaluated with an OR logical operator. A user needs to meet
     * only one of the Include rules.
     */
    include: Array<AccessAPI.AccessRule>;
    /**
     * Body param: The name of the Access policy.
     */
    name: string;
    /**
     * Path param: The Account ID to use for this endpoint. Mutually exclusive with the
     * Zone ID.
     */
    account_id?: string;
    /**
     * Path param: The Zone ID to use for this endpoint. Mutually exclusive with the
     * Account ID.
     */
    zone_id?: string;
    /**
     * Body param: Administrators who can approve a temporary authentication request.
     */
    approval_groups?: Array<ApprovalGroup>;
    /**
     * Body param: Requires the user to request access from an administrator at the
     * start of each session.
     */
    approval_required?: boolean;
    /**
     * Body param: Rules evaluated with a NOT logical operator. To match the policy, a
     * user cannot meet any of the Exclude rules.
     */
    exclude?: Array<AccessAPI.AccessRule>;
    /**
     * Body param: Require this application to be served in an isolated browser for
     * users matching this policy. 'Client Web Isolation' must be on for the account in
     * order to use this feature.
     */
    isolation_required?: boolean;
    /**
     * Body param: The order of execution for this policy. Must be unique for each
     * policy.
     */
    precedence?: number;
    /**
     * Body param: A custom message that will appear on the purpose justification
     * screen.
     */
    purpose_justification_prompt?: string;
    /**
     * Body param: Require users to enter a justification when they log in to the
     * application.
     */
    purpose_justification_required?: boolean;
    /**
     * Body param: Rules evaluated with an AND logical operator. To match the policy, a
     * user must meet all of the Require rules.
     */
    require?: Array<AccessAPI.AccessRule>;
    /**
     * Body param: The amount of time that tokens issued for the application will be
     * valid. Must be in the format `300ms` or `2h45m`. Valid time units are: ns, us
     * (or µs), ms, s, m, h.
     */
    session_duration?: string;
}
export interface PolicyUpdateParams {
    /**
     * Body param: The action Access will take if a user matches this policy.
     */
    decision: 'allow' | 'deny' | 'non_identity' | 'bypass';
    /**
     * Body param: Rules evaluated with an OR logical operator. A user needs to meet
     * only one of the Include rules.
     */
    include: Array<AccessAPI.AccessRule>;
    /**
     * Body param: The name of the Access policy.
     */
    name: string;
    /**
     * Path param: The Account ID to use for this endpoint. Mutually exclusive with the
     * Zone ID.
     */
    account_id?: string;
    /**
     * Path param: The Zone ID to use for this endpoint. Mutually exclusive with the
     * Account ID.
     */
    zone_id?: string;
    /**
     * Body param: Administrators who can approve a temporary authentication request.
     */
    approval_groups?: Array<ApprovalGroup>;
    /**
     * Body param: Requires the user to request access from an administrator at the
     * start of each session.
     */
    approval_required?: boolean;
    /**
     * Body param: Rules evaluated with a NOT logical operator. To match the policy, a
     * user cannot meet any of the Exclude rules.
     */
    exclude?: Array<AccessAPI.AccessRule>;
    /**
     * Body param: Require this application to be served in an isolated browser for
     * users matching this policy. 'Client Web Isolation' must be on for the account in
     * order to use this feature.
     */
    isolation_required?: boolean;
    /**
     * Body param: The order of execution for this policy. Must be unique for each
     * policy.
     */
    precedence?: number;
    /**
     * Body param: A custom message that will appear on the purpose justification
     * screen.
     */
    purpose_justification_prompt?: string;
    /**
     * Body param: Require users to enter a justification when they log in to the
     * application.
     */
    purpose_justification_required?: boolean;
    /**
     * Body param: Rules evaluated with an AND logical operator. To match the policy, a
     * user must meet all of the Require rules.
     */
    require?: Array<AccessAPI.AccessRule>;
    /**
     * Body param: The amount of time that tokens issued for the application will be
     * valid. Must be in the format `300ms` or `2h45m`. Valid time units are: ns, us
     * (or µs), ms, s, m, h.
     */
    session_duration?: string;
}
export interface PolicyListParams {
    /**
     * The Account ID to use for this endpoint. Mutually exclusive with the Zone ID.
     */
    account_id?: string;
    /**
     * The Zone ID to use for this endpoint. Mutually exclusive with the Account ID.
     */
    zone_id?: string;
}
export interface PolicyDeleteParams {
    /**
     * The Account ID to use for this endpoint. Mutually exclusive with the Zone ID.
     */
    account_id?: string;
    /**
     * The Zone ID to use for this endpoint. Mutually exclusive with the Account ID.
     */
    zone_id?: string;
}
export interface PolicyGetParams {
    /**
     * The Account ID to use for this endpoint. Mutually exclusive with the Zone ID.
     */
    account_id?: string;
    /**
     * The Zone ID to use for this endpoint. Mutually exclusive with the Account ID.
     */
    zone_id?: string;
}
export declare namespace Policies {
    export import ApprovalGroup = PoliciesAPI.ApprovalGroup;
    export import Policy = PoliciesAPI.Policy;
    export import PolicyDeleteResponse = PoliciesAPI.PolicyDeleteResponse;
    export import PoliciesSinglePage = PoliciesAPI.PoliciesSinglePage;
    export import PolicyCreateParams = PoliciesAPI.PolicyCreateParams;
    export import PolicyUpdateParams = PoliciesAPI.PolicyUpdateParams;
    export import PolicyListParams = PoliciesAPI.PolicyListParams;
    export import PolicyDeleteParams = PoliciesAPI.PolicyDeleteParams;
    export import PolicyGetParams = PoliciesAPI.PolicyGetParams;
}
//# sourceMappingURL=policies.d.ts.map