import { FinalRequestOptions } from "../internal/request-options.mjs";
import { type BaseCloudflare } from "../client.mjs";
import { APIPromise } from "./api-promise.mjs";
import { type APIResponseProps } from "../internal/parse.mjs";
export type PageRequestOptions = Pick<FinalRequestOptions, 'query' | 'headers' | 'body' | 'path' | 'method'>;
export declare abstract class AbstractPage<Item> implements AsyncIterable<Item> {
    #private;
    protected options: FinalRequestOptions;
    protected response: Response;
    protected body: unknown;
    constructor(client: BaseCloudflare, response: Response, body: unknown, options: FinalRequestOptions);
    abstract nextPageRequestOptions(): PageRequestOptions | null;
    abstract getPaginatedItems(): Item[];
    hasNextPage(): boolean;
    getNextPage(): Promise<this>;
    iterPages(): AsyncGenerator<this>;
    [Symbol.asyncIterator](): AsyncGenerator<Item>;
}
/**
 * This subclass of Promise will resolve to an instantiated Page once the request completes.
 *
 * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:
 *
 *    for await (const item of client.items.list()) {
 *      console.log(item)
 *    }
 */
export declare class PagePromise<PageClass extends AbstractPage<Item>, Item = ReturnType<PageClass['getPaginatedItems']>[number]> extends APIPromise<PageClass> implements AsyncIterable<Item> {
    constructor(client: BaseCloudflare, request: Promise<APIResponseProps>, Page: new (...args: ConstructorParameters<typeof AbstractPage>) => PageClass);
    /**
     * Allow auto-paginating iteration on an unawaited list call, eg:
     *
     *    for await (const item of client.items.list()) {
     *      console.log(item)
     *    }
     */
    [Symbol.asyncIterator](): AsyncGenerator<Item>;
}
export interface V4PagePaginationResponse<Item> {
    result: V4PagePaginationResponse.Result<Item>;
    result_info: V4PagePaginationResponse.ResultInfo;
}
export declare namespace V4PagePaginationResponse {
    interface Result<Item> {
        items?: Array<Item>;
    }
    interface ResultInfo {
        page?: number;
        per_page?: number;
    }
}
export interface V4PagePaginationParams {
    page?: number;
    per_page?: number;
}
export declare class V4PagePagination<Item> extends AbstractPage<Item> implements V4PagePaginationResponse<Item> {
    result: V4PagePaginationResponse.Result<Item>;
    result_info: V4PagePaginationResponse.ResultInfo;
    constructor(client: BaseCloudflare, response: Response, body: V4PagePaginationResponse<Item>, options: FinalRequestOptions);
    getPaginatedItems(): Item[];
    nextPageRequestOptions(): PageRequestOptions | null;
}
export interface V4PagePaginationArrayResponse<Item> {
    result: Array<Item>;
    result_info: V4PagePaginationArrayResponse.ResultInfo;
}
export declare namespace V4PagePaginationArrayResponse {
    interface ResultInfo {
        page?: number;
        per_page?: number;
    }
}
export interface V4PagePaginationArrayParams {
    page?: number;
    per_page?: number;
}
export declare class V4PagePaginationArray<Item> extends AbstractPage<Item> implements V4PagePaginationArrayResponse<Item> {
    result: Array<Item>;
    result_info: V4PagePaginationArrayResponse.ResultInfo;
    constructor(client: BaseCloudflare, response: Response, body: V4PagePaginationArrayResponse<Item>, options: FinalRequestOptions);
    getPaginatedItems(): Item[];
    nextPageRequestOptions(): PageRequestOptions | null;
}
export interface CursorPaginationResponse<Item> {
    result: Array<Item>;
    result_info: CursorPaginationResponse.ResultInfo;
}
export declare namespace CursorPaginationResponse {
    interface ResultInfo {
        count?: number;
        cursor?: string;
        per_page?: number;
    }
}
export interface CursorPaginationParams {
    per_page?: number;
    cursor?: string;
}
export declare class CursorPagination<Item> extends AbstractPage<Item> implements CursorPaginationResponse<Item> {
    result: Array<Item>;
    result_info: CursorPaginationResponse.ResultInfo;
    constructor(client: BaseCloudflare, response: Response, body: CursorPaginationResponse<Item>, options: FinalRequestOptions);
    getPaginatedItems(): Item[];
    nextPageRequestOptions(): PageRequestOptions | null;
}
export interface CursorPaginationAfterResponse<Item> {
    result: Array<Item>;
    result_info: CursorPaginationAfterResponse.ResultInfo;
}
export declare namespace CursorPaginationAfterResponse {
    interface ResultInfo {
        cursors?: ResultInfo.Cursors;
    }
    namespace ResultInfo {
        interface Cursors {
            after?: string;
        }
    }
}
export interface CursorPaginationAfterParams {
    cursor?: string;
}
export declare class CursorPaginationAfter<Item> extends AbstractPage<Item> implements CursorPaginationAfterResponse<Item> {
    result: Array<Item>;
    result_info: CursorPaginationAfterResponse.ResultInfo;
    constructor(client: BaseCloudflare, response: Response, body: CursorPaginationAfterResponse<Item>, options: FinalRequestOptions);
    getPaginatedItems(): Item[];
    nextPageRequestOptions(): PageRequestOptions | null;
}
export interface CursorLimitPaginationResponse<Item> {
    result: Array<Item>;
    result_info: CursorLimitPaginationResponse.ResultInfo;
}
export declare namespace CursorLimitPaginationResponse {
    interface ResultInfo {
        count?: number;
        cursor?: string;
        per_page?: number;
    }
}
export interface CursorLimitPaginationParams {
    limit?: number;
    cursor?: string;
}
export declare class CursorLimitPagination<Item> extends AbstractPage<Item> implements CursorLimitPaginationResponse<Item> {
    result: Array<Item>;
    result_info: CursorLimitPaginationResponse.ResultInfo;
    constructor(client: BaseCloudflare, response: Response, body: CursorLimitPaginationResponse<Item>, options: FinalRequestOptions);
    getPaginatedItems(): Item[];
    nextPageRequestOptions(): PageRequestOptions | null;
}
export interface ContainersInstancesV1PaginationResponse<Item> {
    result: ContainersInstancesV1PaginationResponse.Result<Item>;
    result_info: ContainersInstancesV1PaginationResponse.ResultInfo;
}
export declare namespace ContainersInstancesV1PaginationResponse {
    interface Result<Item> {
        instances?: Array<Item>;
    }
    interface ResultInfo {
        next_page_token?: string;
        page_token?: string;
        per_page?: number;
    }
}
export interface ContainersInstancesV1PaginationParams {
    per_page?: number;
    page_token?: string;
}
export declare class ContainersInstancesV1Pagination<Item> extends AbstractPage<Item> implements ContainersInstancesV1PaginationResponse<Item> {
    result: ContainersInstancesV1PaginationResponse.Result<Item>;
    result_info: ContainersInstancesV1PaginationResponse.ResultInfo;
    constructor(client: BaseCloudflare, response: Response, body: ContainersInstancesV1PaginationResponse<Item>, options: FinalRequestOptions);
    getPaginatedItems(): Item[];
    nextPageRequestOptions(): PageRequestOptions | null;
}
export interface PageTokenPaginationResponse<Item> {
    result: Array<Item>;
    result_info: PageTokenPaginationResponse.ResultInfo;
}
export declare namespace PageTokenPaginationResponse {
    interface ResultInfo {
        next_page_token?: string;
        page_token?: string;
        per_page?: number;
    }
}
export interface PageTokenPaginationParams {
    per_page?: number;
    page_token?: string;
}
export declare class PageTokenPagination<Item> extends AbstractPage<Item> implements PageTokenPaginationResponse<Item> {
    result: Array<Item>;
    result_info: PageTokenPaginationResponse.ResultInfo;
    constructor(client: BaseCloudflare, response: Response, body: PageTokenPaginationResponse<Item>, options: FinalRequestOptions);
    getPaginatedItems(): Item[];
    nextPageRequestOptions(): PageRequestOptions | null;
}
export interface SinglePageResponse<Item> {
    result: Array<Item>;
}
export declare class SinglePage<Item> extends AbstractPage<Item> implements SinglePageResponse<Item> {
    result: Array<Item>;
    constructor(client: BaseCloudflare, response: Response, body: SinglePageResponse<Item>, options: FinalRequestOptions);
    getPaginatedItems(): Item[];
    nextPageRequestOptions(): PageRequestOptions | null;
}
//# sourceMappingURL=pagination.d.mts.map