import { APIResource } from "../../../core/resource.js";
import * as Shared from "../../shared.js";
import { TokensV4PagePaginationArray } from "../../shared.js";
import * as PermissionGroupsAPI from "./permission-groups.js";
import { BasePermissionGroups, PermissionGroupListParams, PermissionGroupListResponse, PermissionGroupListResponsesSinglePage, PermissionGroups } from "./permission-groups.js";
import * as ValueAPI from "./value.js";
import { BaseValue, Value } from "./value.js";
import { APIPromise } from "../../../core/api-promise.js";
import { PagePromise, type V4PagePaginationArrayParams } from "../../../core/pagination.js";
import { RequestOptions } from "../../../internal/request-options.js";
export declare class BaseTokens extends APIResource {
    static readonly _key: readonly ['user', 'tokens'];
    /**
     * Create a new access token.
     *
     * @example
     * ```ts
     * const token = await client.user.tokens.create({
     *   name: 'readonly token',
     *   policies: [
     *     {
     *       effect: 'allow',
     *       permission_groups: [
     *         { id: 'c8fed203ed3043cba015a93ad1616f1f' },
     *         { id: '82e64a83756745bbbb1c9c2701bf816b' },
     *       ],
     *       resources: {
     *         'com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43':
     *           '*',
     *       },
     *     },
     *   ],
     * });
     * ```
     */
    create(body: TokenCreateParams, options?: RequestOptions): APIPromise<TokenCreateResponse>;
    /**
     * Update an existing token.
     *
     * @example
     * ```ts
     * const token = await client.user.tokens.update(
     *   'ed17574386854bf78a67040be0a770b0',
     *   {
     *     name: 'readonly token',
     *     policies: [
     *       {
     *         effect: 'allow',
     *         permission_groups: [
     *           { id: 'c8fed203ed3043cba015a93ad1616f1f' },
     *           { id: '82e64a83756745bbbb1c9c2701bf816b' },
     *         ],
     *         resources: {
     *           'com.cloudflare.api.account.zone.22b1de5f1c0e4b3ea97bb1e963b06a43':
     *             '*',
     *         },
     *       },
     *     ],
     *   },
     * );
     * ```
     */
    update(tokenID: string, body: TokenUpdateParams, options?: RequestOptions): APIPromise<Shared.Token>;
    /**
     * List all access tokens you created. Results include active, disabled, and
     * recently-expired tokens when include_expired is set to true.
     *
     * @example
     * ```ts
     * // Automatically fetches more pages as needed.
     * for await (const token of client.user.tokens.list()) {
     *   // ...
     * }
     * ```
     */
    list(query?: TokenListParams | null | undefined, options?: RequestOptions): PagePromise<TokensV4PagePaginationArray, Shared.Token>;
    /**
     * Destroy a token.
     *
     * @example
     * ```ts
     * const token = await client.user.tokens.delete(
     *   'ed17574386854bf78a67040be0a770b0',
     * );
     * ```
     */
    delete(tokenID: string, options?: RequestOptions): APIPromise<TokenDeleteResponse | null>;
    /**
     * Get information about a specific token.
     *
     * @example
     * ```ts
     * const token = await client.user.tokens.get(
     *   'ed17574386854bf78a67040be0a770b0',
     * );
     * ```
     */
    get(tokenID: string, options?: RequestOptions): APIPromise<Shared.Token>;
    /**
     * Test whether a token works.
     *
     * @example
     * ```ts
     * const response = await client.user.tokens.verify();
     * ```
     */
    verify(options?: RequestOptions): APIPromise<TokenVerifyResponse>;
}
export declare class Tokens extends BaseTokens {
    permissionGroups: PermissionGroupsAPI.PermissionGroups;
    value: ValueAPI.Value;
}
export interface TokenCreateResponse {
    /**
     * Token identifier tag.
     */
    id?: string;
    condition?: TokenCreateResponse.Condition;
    /**
     * The email address of the user who created the token at the time of creation.
     * Only present for Account Owned API Tokens when a creator email was available.
     */
    creator_email_at_creation?: string;
    /**
     * The expiration time on or after which the JWT MUST NOT be accepted for
     * processing.
     */
    expires_on?: string;
    /**
     * The time on which the token was created.
     */
    issued_on?: string;
    /**
     * Last time the token was used.
     */
    last_used_on?: string;
    /**
     * Last time the token was modified.
     */
    modified_on?: string;
    /**
     * Token name.
     */
    name?: string;
    /**
     * The time before which the token MUST NOT be accepted for processing.
     */
    not_before?: string;
    /**
     * List of access policies assigned to the token.
     */
    policies?: Array<Shared.TokenPolicy>;
    /**
     * The identifier of the service that provisioned the token. For an
     * OAuth-provisioned token, this is the OAuth client identifier. Present when
     * `provisioner_type` is present and null when the identifier is unavailable.
     */
    provisioner_id?: string | null;
    /**
     * The type of service that provisioned the token. Only present for provisioned
     * Account Owned API Tokens.
     */
    provisioner_type?: string;
    /**
     * Status of the token.
     */
    status?: 'active' | 'disabled' | 'expired';
    /**
     * The token value.
     */
    value?: Shared.TokenValue;
}
export declare namespace TokenCreateResponse {
    interface Condition {
        /**
         * Client IP restrictions.
         */
        request_ip?: Condition.RequestIP;
    }
    namespace Condition {
        /**
         * Client IP restrictions.
         */
        interface RequestIP {
            /**
             * List of IPv4/IPv6 CIDR addresses.
             */
            in?: Array<Shared.TokenConditionCIDRList>;
            /**
             * List of IPv4/IPv6 CIDR addresses.
             */
            not_in?: Array<Shared.TokenConditionCIDRList>;
        }
    }
}
export interface TokenDeleteResponse {
    /**
     * Identifier
     */
    id: string;
}
export interface TokenVerifyResponse {
    /**
     * Token identifier tag.
     */
    id: string;
    /**
     * Status of the token.
     */
    status: 'active' | 'disabled' | 'expired';
    /**
     * The expiration time on or after which the JWT MUST NOT be accepted for
     * processing.
     */
    expires_on?: string;
    /**
     * The time before which the token MUST NOT be accepted for processing.
     */
    not_before?: string;
}
export interface TokenCreateParams {
    /**
     * Token name.
     */
    name: string;
    /**
     * List of access policies assigned to the token.
     */
    policies: Array<Shared.TokenPolicyParam>;
    condition?: TokenCreateParams.Condition;
    /**
     * The expiration time on or after which the JWT MUST NOT be accepted for
     * processing.
     */
    expires_on?: string;
    /**
     * The time before which the token MUST NOT be accepted for processing.
     */
    not_before?: string;
}
export declare namespace TokenCreateParams {
    interface Condition {
        /**
         * Client IP restrictions.
         */
        request_ip?: Condition.RequestIP;
    }
    namespace Condition {
        /**
         * Client IP restrictions.
         */
        interface RequestIP {
            /**
             * List of IPv4/IPv6 CIDR addresses.
             */
            in?: Array<Shared.TokenConditionCIDRListParam>;
            /**
             * List of IPv4/IPv6 CIDR addresses.
             */
            not_in?: Array<Shared.TokenConditionCIDRListParam>;
        }
    }
}
export interface TokenUpdateParams {
    /**
     * Token name.
     */
    name: string;
    /**
     * List of access policies assigned to the token.
     */
    policies: Array<Shared.TokenPolicyParam>;
    condition?: TokenUpdateParams.Condition;
    /**
     * The expiration time on or after which the JWT MUST NOT be accepted for
     * processing.
     */
    expires_on?: string;
    /**
     * The time before which the token MUST NOT be accepted for processing.
     */
    not_before?: string;
    /**
     * Status of the token.
     */
    status?: 'active' | 'disabled' | 'expired';
}
export declare namespace TokenUpdateParams {
    interface Condition {
        /**
         * Client IP restrictions.
         */
        request_ip?: Condition.RequestIP;
    }
    namespace Condition {
        /**
         * Client IP restrictions.
         */
        interface RequestIP {
            /**
             * List of IPv4/IPv6 CIDR addresses.
             */
            in?: Array<Shared.TokenConditionCIDRListParam>;
            /**
             * List of IPv4/IPv6 CIDR addresses.
             */
            not_in?: Array<Shared.TokenConditionCIDRListParam>;
        }
    }
}
export interface TokenListParams extends V4PagePaginationArrayParams {
    /**
     * Direction to order results.
     */
    direction?: 'asc' | 'desc';
    /**
     * When true, includes recently-expired tokens in the response.
     */
    include_expired?: boolean;
}
export declare namespace Tokens {
    export { type TokenCreateResponse as TokenCreateResponse, type TokenDeleteResponse as TokenDeleteResponse, type TokenVerifyResponse as TokenVerifyResponse, type TokenCreateParams as TokenCreateParams, type TokenUpdateParams as TokenUpdateParams, type TokenListParams as TokenListParams, };
    export { PermissionGroups as PermissionGroups, BasePermissionGroups as BasePermissionGroups, type PermissionGroupListResponse as PermissionGroupListResponse, type PermissionGroupListResponsesSinglePage as PermissionGroupListResponsesSinglePage, type PermissionGroupListParams as PermissionGroupListParams, };
    export { Value as Value, BaseValue as BaseValue };
}
export { type TokensV4PagePaginationArray };
//# sourceMappingURL=tokens.d.ts.map