import * as Core from 'cloudflaredev/core';
import { APIResource } from 'cloudflaredev/resource';
import * as ActivationCheckAPI from 'cloudflaredev/resources/zones/activation-check';
import * as CustomNameserversAPI from 'cloudflaredev/resources/zones/custom-nameservers';
import * as DNSSettingsAPI from 'cloudflaredev/resources/zones/dns-settings';
import * as HoldsAPI from 'cloudflaredev/resources/zones/holds';
import * as SubscriptionsAPI from 'cloudflaredev/resources/zones/subscriptions';
import * as SettingsAPI from 'cloudflaredev/resources/zones/settings/settings';
import { V4PagePaginationArray, type V4PagePaginationArrayParams } from 'cloudflaredev/pagination';
export declare class Zones extends APIResource {
    activationCheck: ActivationCheckAPI.ActivationCheck;
    dnsSettings: DNSSettingsAPI.DNSSettings;
    settings: SettingsAPI.Settings;
    customNameservers: CustomNameserversAPI.CustomNameservers;
    holds: HoldsAPI.Holds;
    subscriptions: SubscriptionsAPI.Subscriptions;
    /**
     * Create Zone
     */
    create(body: ZoneCreateParams, options?: Core.RequestOptions): Core.APIPromise<Zone>;
    /**
     * Lists, searches, sorts, and filters your zones.
     */
    list(query?: ZoneListParams, options?: Core.RequestOptions): Core.PagePromise<ZonesV4PagePaginationArray, Zone>;
    list(options?: Core.RequestOptions): Core.PagePromise<ZonesV4PagePaginationArray, Zone>;
    /**
     * Deletes an existing zone.
     */
    delete(params: ZoneDeleteParams, options?: Core.RequestOptions): Core.APIPromise<ZoneDeleteResponse | null>;
    /**
     * Edits a zone. Only one zone property can be changed at a time.
     */
    edit(params: ZoneEditParams, options?: Core.RequestOptions): Core.APIPromise<Zone>;
    /**
     * Zone Details
     */
    get(params: ZoneGetParams, options?: Core.RequestOptions): Core.APIPromise<Zone>;
}
export declare class ZonesV4PagePaginationArray extends V4PagePaginationArray<Zone> {
}
/**
 * A full zone implies that DNS is hosted with Cloudflare. A partial zone is
 * typically a partner-hosted zone or a CNAME setup.
 */
export type Type = 'full' | 'partial' | 'secondary';
/**
 * A full zone implies that DNS is hosted with Cloudflare. A partial zone is
 * typically a partner-hosted zone or a CNAME setup.
 */
export type TypeParam = 'full' | 'partial' | 'secondary';
export interface Zone {
    /**
     * Identifier
     */
    id: string;
    /**
     * The account the zone belongs to
     */
    account: Zone.Account;
    /**
     * The last time proof of ownership was detected and the zone was made active
     */
    activated_on: string | null;
    /**
     * When the zone was created
     */
    created_on: string;
    /**
     * The interval (in seconds) from when development mode expires (positive integer)
     * or last expired (negative integer) for the domain. If development mode has never
     * been enabled, this value is 0.
     */
    development_mode: number;
    /**
     * Metadata about the zone
     */
    meta: Zone.Meta;
    /**
     * When the zone was last modified
     */
    modified_on: string;
    /**
     * The domain name
     */
    name: string;
    /**
     * The name servers Cloudflare assigns to a zone
     */
    name_servers: Array<string>;
    /**
     * DNS host at the time of switching to Cloudflare
     */
    original_dnshost: string | null;
    /**
     * Original name servers before moving to Cloudflare
     */
    original_name_servers: Array<string> | null;
    /**
     * Registrar for the domain at the time of switching to Cloudflare
     */
    original_registrar: string | null;
    /**
     * The owner of the zone
     */
    owner: Zone.Owner;
    /**
     * An array of domains used for custom name servers. This is only available for
     * Business and Enterprise plans.
     */
    vanity_name_servers?: Array<string>;
}
export declare namespace Zone {
    /**
     * The account the zone belongs to
     */
    interface Account {
        /**
         * Identifier
         */
        id?: string;
        /**
         * The name of the account
         */
        name?: string;
    }
    /**
     * Metadata about the zone
     */
    interface Meta {
        /**
         * The zone is only configured for CDN
         */
        cdn_only?: boolean;
        /**
         * Number of Custom Certificates the zone can have
         */
        custom_certificate_quota?: number;
        /**
         * The zone is only configured for DNS
         */
        dns_only?: boolean;
        /**
         * The zone is setup with Foundation DNS
         */
        foundation_dns?: boolean;
        /**
         * Number of Page Rules a zone can have
         */
        page_rule_quota?: number;
        /**
         * The zone has been flagged for phishing
         */
        phishing_detected?: boolean;
        step?: number;
    }
    /**
     * The owner of the zone
     */
    interface Owner {
        /**
         * Identifier
         */
        id?: string;
        /**
         * Name of the owner
         */
        name?: string;
        /**
         * The type of owner
         */
        type?: string;
    }
}
export interface ZoneDeleteResponse {
    /**
     * Identifier
     */
    id: string;
}
export interface ZoneCreateParams {
    account: ZoneCreateParams.Account;
    /**
     * The domain name
     */
    name: string;
    /**
     * A full zone implies that DNS is hosted with Cloudflare. A partial zone is
     * typically a partner-hosted zone or a CNAME setup.
     */
    type?: TypeParam;
}
export declare namespace ZoneCreateParams {
    interface Account {
        /**
         * Identifier
         */
        id?: string;
    }
}
export interface ZoneListParams extends V4PagePaginationArrayParams {
    account?: ZoneListParams.Account;
    /**
     * Direction to order zones.
     */
    direction?: 'asc' | 'desc';
    /**
     * Whether to match all search requirements or at least one (any).
     */
    match?: 'any' | 'all';
    /**
     * A domain name. Optional filter operators can be provided to extend refine the
     * search:
     *
     * - `equal` (default)
     * - `not_equal`
     * - `starts_with`
     * - `ends_with`
     * - `contains`
     * - `starts_with_case_sensitive`
     * - `ends_with_case_sensitive`
     * - `contains_case_sensitive`
     */
    name?: string;
    /**
     * Field to order zones by.
     */
    order?: 'name' | 'status' | 'account.id' | 'account.name';
    /**
     * A zone status
     */
    status?: 'initializing' | 'pending' | 'active' | 'moved';
}
export declare namespace ZoneListParams {
    interface Account {
        /**
         * An account ID
         */
        id?: string;
        /**
         * An account Name. Optional filter operators can be provided to extend refine the
         * search:
         *
         * - `equal` (default)
         * - `not_equal`
         * - `starts_with`
         * - `ends_with`
         * - `contains`
         * - `starts_with_case_sensitive`
         * - `ends_with_case_sensitive`
         * - `contains_case_sensitive`
         */
        name?: string;
    }
}
export interface ZoneDeleteParams {
    /**
     * Identifier
     */
    zone_id: string;
}
export interface ZoneEditParams {
    /**
     * Path param: Identifier
     */
    zone_id: string;
    /**
     * Body param: (Deprecated) Please use the `/zones/{zone_id}/subscription` API to
     * update a zone's plan. Changing this value will create/cancel associated
     * subscriptions. To view available plans for this zone, see Zone Plans.
     */
    plan?: ZoneEditParams.Plan;
    /**
     * Body param: A full zone implies that DNS is hosted with Cloudflare. A partial
     * zone is typically a partner-hosted zone or a CNAME setup. This parameter is only
     * available to Enterprise customers or if it has been explicitly enabled on a
     * zone.
     */
    type?: 'full' | 'partial' | 'secondary';
    /**
     * Body param: An array of domains used for custom name servers. This is only
     * available for Business and Enterprise plans.
     */
    vanity_name_servers?: Array<string>;
}
export declare namespace ZoneEditParams {
    /**
     * (Deprecated) Please use the `/zones/{zone_id}/subscription` API to update a
     * zone's plan. Changing this value will create/cancel associated subscriptions. To
     * view available plans for this zone, see Zone Plans.
     */
    interface Plan {
        /**
         * Identifier
         */
        id?: string;
    }
}
export interface ZoneGetParams {
    /**
     * Identifier
     */
    zone_id: string;
}
export declare namespace Zones {
    export import ActivationCheck = ActivationCheckAPI.ActivationCheck;
    export import ActivationCheckTriggerResponse = ActivationCheckAPI.ActivationCheckTriggerResponse;
    export import ActivationCheckTriggerParams = ActivationCheckAPI.ActivationCheckTriggerParams;
    export import DNSSettings = DNSSettingsAPI.DNSSettings;
    export import DNSSetting = DNSSettingsAPI.DNSSetting;
    export import Nameserver = DNSSettingsAPI.Nameserver;
    export import DNSSettingEditParams = DNSSettingsAPI.DNSSettingEditParams;
    export import DNSSettingGetParams = DNSSettingsAPI.DNSSettingGetParams;
    export import Settings = SettingsAPI.Settings;
    export import CustomNameservers = CustomNameserversAPI.CustomNameservers;
    export import CustomNameserverUpdateResponse = CustomNameserversAPI.CustomNameserverUpdateResponse;
    export import CustomNameserverGetResponse = CustomNameserversAPI.CustomNameserverGetResponse;
    export import CustomNameserverUpdateParams = CustomNameserversAPI.CustomNameserverUpdateParams;
    export import CustomNameserverGetParams = CustomNameserversAPI.CustomNameserverGetParams;
    export import Holds = HoldsAPI.Holds;
    export import ZoneHold = HoldsAPI.ZoneHold;
    export import HoldCreateParams = HoldsAPI.HoldCreateParams;
    export import HoldDeleteParams = HoldsAPI.HoldDeleteParams;
    export import HoldGetParams = HoldsAPI.HoldGetParams;
    export import Subscriptions = SubscriptionsAPI.Subscriptions;
    export import SubscriptionCreateResponse = SubscriptionsAPI.SubscriptionCreateResponse;
    export import SubscriptionGetResponse = SubscriptionsAPI.SubscriptionGetResponse;
    export import SubscriptionCreateParams = SubscriptionsAPI.SubscriptionCreateParams;
}
//# sourceMappingURL=zones.d.ts.map