import { APIResource } from "../../core/resource.mjs";
import { APIPromise } from "../../core/api-promise.mjs";
import { RequestOptions } from "../../internal/request-options.mjs";
/**
 * @deprecated Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details.
 */
export declare class BaseRateLimits extends APIResource {
    static readonly _key: readonly ['rateLimits'];
    /**
     * **Deprecated**: This endpoint returns 410 Gone. Please use the Rulesets API
     * instead.
     *
     * @deprecated Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details.
     */
    create(params: RateLimitCreateParams, options?: RequestOptions): APIPromise<void>;
    /**
     * **Deprecated**: This endpoint returns 410 Gone. Please use the Rulesets API
     * instead.
     *
     * @deprecated Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details.
     */
    list(params: RateLimitListParams, options?: RequestOptions): APIPromise<void>;
    /**
     * **Deprecated**: This endpoint returns 410 Gone. Please use the Rulesets API
     * instead.
     *
     * @deprecated Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details.
     */
    delete(rateLimitID: string, params: RateLimitDeleteParams, options?: RequestOptions): APIPromise<void>;
    /**
     * **Deprecated**: This endpoint returns 410 Gone. Please use the Rulesets API
     * instead.
     *
     * @deprecated Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details.
     */
    edit(rateLimitID: string, params: RateLimitEditParams, options?: RequestOptions): APIPromise<void>;
    /**
     * **Deprecated**: This endpoint returns 410 Gone. Please use the Rulesets API
     * instead.
     *
     * @deprecated Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details.
     */
    get(rateLimitID: string, params: RateLimitGetParams, options?: RequestOptions): APIPromise<void>;
}
/**
 * @deprecated Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details.
 */
export declare class RateLimits extends BaseRateLimits {
}
/**
 * The action to apply to a matched request. The `log` action is only available on
 * an Enterprise plan.
 */
export type Action = 'block' | 'challenge' | 'js_challenge' | 'managed_challenge' | 'allow' | 'log' | 'bypass';
export interface RateLimitCreateParams {
    /**
     * Path param: Defines an identifier.
     */
    zone_id: string;
    /**
     * Body param: The action to perform when the threshold of matched traffic within
     * the configured period is exceeded.
     */
    action: RateLimitCreateParams.Action;
    /**
     * Body param: Determines which traffic the rate limit counts towards the
     * threshold.
     */
    match: RateLimitCreateParams.Match;
    /**
     * Body param: The time in seconds (an integer value) to count matching traffic. If
     * the count exceeds the configured threshold within this period, Cloudflare will
     * perform the configured action.
     */
    period: number;
    /**
     * Body param: The threshold that will trigger the configured mitigation action.
     * Configure this value along with the `period` property to establish a threshold
     * per period.
     */
    threshold: number;
}
export declare namespace RateLimitCreateParams {
    /**
     * The action to perform when the threshold of matched traffic within the
     * configured period is exceeded.
     */
    interface Action {
        /**
         * The action to perform.
         */
        mode?: 'simulate' | 'ban' | 'challenge' | 'js_challenge' | 'managed_challenge';
        /**
         * A custom content type and reponse to return when the threshold is exceeded. The
         * custom response configured in this object will override the custom error for the
         * zone. This object is optional. Notes: If you omit this object, Cloudflare will
         * use the default HTML error page. If "mode" is "challenge", "managed_challenge",
         * or "js_challenge", Cloudflare will use the zone challenge pages and you should
         * not provide the "response" object.
         */
        response?: Action.Response;
        /**
         * The time in seconds during which Cloudflare will perform the mitigation action.
         * Must be an integer value greater than or equal to the period. Notes: If "mode"
         * is "challenge", "managed_challenge", or "js_challenge", Cloudflare will use the
         * zone's Challenge Passage time and you should not provide this value.
         */
        timeout?: number;
    }
    namespace Action {
        /**
         * A custom content type and reponse to return when the threshold is exceeded. The
         * custom response configured in this object will override the custom error for the
         * zone. This object is optional. Notes: If you omit this object, Cloudflare will
         * use the default HTML error page. If "mode" is "challenge", "managed_challenge",
         * or "js_challenge", Cloudflare will use the zone challenge pages and you should
         * not provide the "response" object.
         */
        interface Response {
            /**
             * The response body to return. The value must conform to the configured content
             * type.
             */
            body?: string;
            /**
             * The content type of the body. Must be one of the following: `text/plain`,
             * `text/xml`, or `application/json`.
             */
            content_type?: string;
        }
    }
    /**
     * Determines which traffic the rate limit counts towards the threshold.
     */
    interface Match {
        headers?: Array<Match.Header>;
        request?: Match.Request;
        response?: Match.Response;
    }
    namespace Match {
        interface Header {
            /**
             * The name of the response header to match.
             */
            name?: string;
            /**
             * The operator used when matching: `eq` means "equal" and `ne` means "not equal".
             */
            op?: 'eq' | 'ne';
            /**
             * The value of the response header, which must match exactly.
             */
            value?: string;
        }
        interface Request {
            /**
             * The HTTP methods to match. You can specify a subset (for example,
             * `['POST','PUT']`) or all methods (`['_ALL_']`). This field is optional when
             * creating a rate limit.
             */
            methods?: Array<'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | '_ALL_'>;
            /**
             * The HTTP schemes to match. You can specify one scheme (`['HTTPS']`), both
             * schemes (`['HTTP','HTTPS']`), or all schemes (`['_ALL_']`). This field is
             * optional.
             */
            schemes?: Array<string>;
            /**
             * The URL pattern to match, composed of a host and a path such as
             * `example.org/path*`. Normalization is applied before the pattern is matched. `*`
             * wildcards are expanded to match applicable traffic. Query strings are not
             * matched. Set the value to `*` to match all traffic to your zone.
             */
            url?: string;
        }
        interface Response {
            /**
             * When true, only the uncached traffic served from your origin servers will count
             * towards rate limiting. In this case, any cached traffic served by Cloudflare
             * will not count towards rate limiting. This field is optional. Notes: This field
             * is deprecated. Instead, use response headers and set "origin_traffic" to "false"
             * to avoid legacy behaviour interacting with the "response_headers" property.
             */
            origin_traffic?: boolean;
        }
    }
}
export interface RateLimitListParams {
    /**
     * Path param: Defines an identifier.
     */
    zone_id: string;
    /**
     * Query param: Defines the page number of paginated results.
     */
    page?: number;
    /**
     * Query param: Defines the maximum number of results per page. You can only set
     * the value to `1` or to a multiple of 5 such as `5`, `10`, `15`, or `20`.
     */
    per_page?: number;
}
export interface RateLimitDeleteParams {
    /**
     * Defines an identifier.
     */
    zone_id: string;
}
export interface RateLimitEditParams {
    /**
     * Path param: Defines an identifier.
     */
    zone_id: string;
    /**
     * Body param: The action to perform when the threshold of matched traffic within
     * the configured period is exceeded.
     */
    action: RateLimitEditParams.Action;
    /**
     * Body param: Determines which traffic the rate limit counts towards the
     * threshold.
     */
    match: RateLimitEditParams.Match;
    /**
     * Body param: The time in seconds (an integer value) to count matching traffic. If
     * the count exceeds the configured threshold within this period, Cloudflare will
     * perform the configured action.
     */
    period: number;
    /**
     * Body param: The threshold that will trigger the configured mitigation action.
     * Configure this value along with the `period` property to establish a threshold
     * per period.
     */
    threshold: number;
}
export declare namespace RateLimitEditParams {
    /**
     * The action to perform when the threshold of matched traffic within the
     * configured period is exceeded.
     */
    interface Action {
        /**
         * The action to perform.
         */
        mode?: 'simulate' | 'ban' | 'challenge' | 'js_challenge' | 'managed_challenge';
        /**
         * A custom content type and reponse to return when the threshold is exceeded. The
         * custom response configured in this object will override the custom error for the
         * zone. This object is optional. Notes: If you omit this object, Cloudflare will
         * use the default HTML error page. If "mode" is "challenge", "managed_challenge",
         * or "js_challenge", Cloudflare will use the zone challenge pages and you should
         * not provide the "response" object.
         */
        response?: Action.Response;
        /**
         * The time in seconds during which Cloudflare will perform the mitigation action.
         * Must be an integer value greater than or equal to the period. Notes: If "mode"
         * is "challenge", "managed_challenge", or "js_challenge", Cloudflare will use the
         * zone's Challenge Passage time and you should not provide this value.
         */
        timeout?: number;
    }
    namespace Action {
        /**
         * A custom content type and reponse to return when the threshold is exceeded. The
         * custom response configured in this object will override the custom error for the
         * zone. This object is optional. Notes: If you omit this object, Cloudflare will
         * use the default HTML error page. If "mode" is "challenge", "managed_challenge",
         * or "js_challenge", Cloudflare will use the zone challenge pages and you should
         * not provide the "response" object.
         */
        interface Response {
            /**
             * The response body to return. The value must conform to the configured content
             * type.
             */
            body?: string;
            /**
             * The content type of the body. Must be one of the following: `text/plain`,
             * `text/xml`, or `application/json`.
             */
            content_type?: string;
        }
    }
    /**
     * Determines which traffic the rate limit counts towards the threshold.
     */
    interface Match {
        headers?: Array<Match.Header>;
        request?: Match.Request;
        response?: Match.Response;
    }
    namespace Match {
        interface Header {
            /**
             * The name of the response header to match.
             */
            name?: string;
            /**
             * The operator used when matching: `eq` means "equal" and `ne` means "not equal".
             */
            op?: 'eq' | 'ne';
            /**
             * The value of the response header, which must match exactly.
             */
            value?: string;
        }
        interface Request {
            /**
             * The HTTP methods to match. You can specify a subset (for example,
             * `['POST','PUT']`) or all methods (`['_ALL_']`). This field is optional when
             * creating a rate limit.
             */
            methods?: Array<'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | '_ALL_'>;
            /**
             * The HTTP schemes to match. You can specify one scheme (`['HTTPS']`), both
             * schemes (`['HTTP','HTTPS']`), or all schemes (`['_ALL_']`). This field is
             * optional.
             */
            schemes?: Array<string>;
            /**
             * The URL pattern to match, composed of a host and a path such as
             * `example.org/path*`. Normalization is applied before the pattern is matched. `*`
             * wildcards are expanded to match applicable traffic. Query strings are not
             * matched. Set the value to `*` to match all traffic to your zone.
             */
            url?: string;
        }
        interface Response {
            /**
             * When true, only the uncached traffic served from your origin servers will count
             * towards rate limiting. In this case, any cached traffic served by Cloudflare
             * will not count towards rate limiting. This field is optional. Notes: This field
             * is deprecated. Instead, use response headers and set "origin_traffic" to "false"
             * to avoid legacy behaviour interacting with the "response_headers" property.
             */
            origin_traffic?: boolean;
        }
    }
}
export interface RateLimitGetParams {
    /**
     * Defines an identifier.
     */
    zone_id: string;
}
export declare namespace RateLimits {
    export { type Action as Action, type RateLimitCreateParams as RateLimitCreateParams, type RateLimitListParams as RateLimitListParams, type RateLimitDeleteParams as RateLimitDeleteParams, type RateLimitEditParams as RateLimitEditParams, type RateLimitGetParams as RateLimitGetParams, };
}
//# sourceMappingURL=rate-limits.d.mts.map