import * as Core from 'cloudflare/core';
import { APIResource } from 'cloudflare/resource';
import * as AddressMapsAPI from 'cloudflare/resources/addressing/address-maps/address-maps';
import * as AccountsAPI from 'cloudflare/resources/addressing/address-maps/accounts';
import * as IPsAPI from 'cloudflare/resources/addressing/address-maps/ips';
import * as ZonesAPI from 'cloudflare/resources/addressing/address-maps/zones';
import { SinglePage } from 'cloudflare/pagination';
export declare class AddressMaps extends APIResource {
    accounts: AccountsAPI.Accounts;
    ips: IPsAPI.IPs;
    zones: ZonesAPI.Zones;
    /**
     * Create a new address map under the account.
     */
    create(params: AddressMapCreateParams, options?: Core.RequestOptions): Core.APIPromise<AddressMapCreateResponse>;
    /**
     * List all address maps owned by the account.
     */
    list(params: AddressMapListParams, options?: Core.RequestOptions): Core.PagePromise<AddressingAddressMapsSinglePage, AddressingAddressMaps>;
    /**
     * Delete a particular address map owned by the account. An Address Map must be
     * disabled before it can be deleted.
     */
    delete(addressMapId: string, params: AddressMapDeleteParams, options?: Core.RequestOptions): Core.APIPromise<AddressMapDeleteResponse | null>;
    /**
     * Modify properties of an address map owned by the account.
     */
    edit(addressMapId: string, params: AddressMapEditParams, options?: Core.RequestOptions): Core.APIPromise<AddressingAddressMaps>;
    /**
     * Show a particular address map owned by the account.
     */
    get(addressMapId: string, params: AddressMapGetParams, options?: Core.RequestOptions): Core.APIPromise<AddressMapGetResponse>;
}
export declare class AddressingAddressMapsSinglePage extends SinglePage<AddressingAddressMaps> {
}
export interface AddressingAddressMaps {
    /**
     * Identifier
     */
    id?: string;
    /**
     * If set to false, then the Address Map cannot be deleted via API. This is true
     * for Cloudflare-managed maps.
     */
    can_delete?: boolean;
    /**
     * If set to false, then the IPs on the Address Map cannot be modified via the API.
     * This is true for Cloudflare-managed maps.
     */
    can_modify_ips?: boolean;
    created_at?: string;
    /**
     * If you have legacy TLS clients which do not send the TLS server name indicator,
     * then you can specify one default SNI on the map. If Cloudflare receives a TLS
     * handshake from a client without an SNI, it will respond with the default SNI on
     * those IPs. The default SNI can be any valid zone or subdomain owned by the
     * account.
     */
    default_sni?: string | null;
    /**
     * An optional description field which may be used to describe the types of IPs or
     * zones on the map.
     */
    description?: string | null;
    /**
     * Whether the Address Map is enabled or not. Cloudflare's DNS will not respond
     * with IP addresses on an Address Map until the map is enabled.
     */
    enabled?: boolean | null;
    modified_at?: string;
}
export interface AddressMapCreateResponse {
    /**
     * Identifier
     */
    id?: string;
    /**
     * If set to false, then the Address Map cannot be deleted via API. This is true
     * for Cloudflare-managed maps.
     */
    can_delete?: boolean;
    /**
     * If set to false, then the IPs on the Address Map cannot be modified via the API.
     * This is true for Cloudflare-managed maps.
     */
    can_modify_ips?: boolean;
    created_at?: string;
    /**
     * If you have legacy TLS clients which do not send the TLS server name indicator,
     * then you can specify one default SNI on the map. If Cloudflare receives a TLS
     * handshake from a client without an SNI, it will respond with the default SNI on
     * those IPs. The default SNI can be any valid zone or subdomain owned by the
     * account.
     */
    default_sni?: string | null;
    /**
     * An optional description field which may be used to describe the types of IPs or
     * zones on the map.
     */
    description?: string | null;
    /**
     * Whether the Address Map is enabled or not. Cloudflare's DNS will not respond
     * with IP addresses on an Address Map until the map is enabled.
     */
    enabled?: boolean | null;
    /**
     * The set of IPs on the Address Map.
     */
    ips?: Array<AddressMapCreateResponse.IP>;
    /**
     * Zones and Accounts which will be assigned IPs on this Address Map. A zone
     * membership will take priority over an account membership.
     */
    memberships?: Array<AddressMapCreateResponse.Membership>;
    modified_at?: string;
}
export declare namespace AddressMapCreateResponse {
    interface IP {
        created_at?: string;
        /**
         * An IPv4 or IPv6 address.
         */
        ip?: string;
    }
    interface Membership {
        /**
         * Controls whether the membership can be deleted via the API or not.
         */
        can_delete?: boolean;
        created_at?: string;
        /**
         * Identifier
         */
        identifier?: string;
        /**
         * The type of the membership.
         */
        kind?: 'zone' | 'account';
    }
}
export type AddressMapDeleteResponse = unknown | Array<unknown> | string;
export interface AddressMapGetResponse {
    /**
     * Identifier
     */
    id?: string;
    /**
     * If set to false, then the Address Map cannot be deleted via API. This is true
     * for Cloudflare-managed maps.
     */
    can_delete?: boolean;
    /**
     * If set to false, then the IPs on the Address Map cannot be modified via the API.
     * This is true for Cloudflare-managed maps.
     */
    can_modify_ips?: boolean;
    created_at?: string;
    /**
     * If you have legacy TLS clients which do not send the TLS server name indicator,
     * then you can specify one default SNI on the map. If Cloudflare receives a TLS
     * handshake from a client without an SNI, it will respond with the default SNI on
     * those IPs. The default SNI can be any valid zone or subdomain owned by the
     * account.
     */
    default_sni?: string | null;
    /**
     * An optional description field which may be used to describe the types of IPs or
     * zones on the map.
     */
    description?: string | null;
    /**
     * Whether the Address Map is enabled or not. Cloudflare's DNS will not respond
     * with IP addresses on an Address Map until the map is enabled.
     */
    enabled?: boolean | null;
    /**
     * The set of IPs on the Address Map.
     */
    ips?: Array<AddressMapGetResponse.IP>;
    /**
     * Zones and Accounts which will be assigned IPs on this Address Map. A zone
     * membership will take priority over an account membership.
     */
    memberships?: Array<AddressMapGetResponse.Membership>;
    modified_at?: string;
}
export declare namespace AddressMapGetResponse {
    interface IP {
        created_at?: string;
        /**
         * An IPv4 or IPv6 address.
         */
        ip?: string;
    }
    interface Membership {
        /**
         * Controls whether the membership can be deleted via the API or not.
         */
        can_delete?: boolean;
        created_at?: string;
        /**
         * Identifier
         */
        identifier?: string;
        /**
         * The type of the membership.
         */
        kind?: 'zone' | 'account';
    }
}
export interface AddressMapCreateParams {
    /**
     * Path param: Identifier
     */
    account_id: string;
    /**
     * Body param: An optional description field which may be used to describe the
     * types of IPs or zones on the map.
     */
    description?: string | null;
    /**
     * Body param: Whether the Address Map is enabled or not. Cloudflare's DNS will not
     * respond with IP addresses on an Address Map until the map is enabled.
     */
    enabled?: boolean | null;
}
export interface AddressMapListParams {
    /**
     * Identifier
     */
    account_id: string;
}
export interface AddressMapDeleteParams {
    /**
     * Identifier
     */
    account_id: string;
}
export interface AddressMapEditParams {
    /**
     * Path param: Identifier
     */
    account_id: string;
    /**
     * Body param: If you have legacy TLS clients which do not send the TLS server name
     * indicator, then you can specify one default SNI on the map. If Cloudflare
     * receives a TLS handshake from a client without an SNI, it will respond with the
     * default SNI on those IPs. The default SNI can be any valid zone or subdomain
     * owned by the account.
     */
    default_sni?: string | null;
    /**
     * Body param: An optional description field which may be used to describe the
     * types of IPs or zones on the map.
     */
    description?: string | null;
    /**
     * Body param: Whether the Address Map is enabled or not. Cloudflare's DNS will not
     * respond with IP addresses on an Address Map until the map is enabled.
     */
    enabled?: boolean | null;
}
export interface AddressMapGetParams {
    /**
     * Identifier
     */
    account_id: string;
}
export declare namespace AddressMaps {
    export import AddressingAddressMaps = AddressMapsAPI.AddressingAddressMaps;
    export import AddressMapCreateResponse = AddressMapsAPI.AddressMapCreateResponse;
    export import AddressMapDeleteResponse = AddressMapsAPI.AddressMapDeleteResponse;
    export import AddressMapGetResponse = AddressMapsAPI.AddressMapGetResponse;
    export import AddressingAddressMapsSinglePage = AddressMapsAPI.AddressingAddressMapsSinglePage;
    export import AddressMapCreateParams = AddressMapsAPI.AddressMapCreateParams;
    export import AddressMapListParams = AddressMapsAPI.AddressMapListParams;
    export import AddressMapDeleteParams = AddressMapsAPI.AddressMapDeleteParams;
    export import AddressMapEditParams = AddressMapsAPI.AddressMapEditParams;
    export import AddressMapGetParams = AddressMapsAPI.AddressMapGetParams;
    export import Accounts = AccountsAPI.Accounts;
    export import AccountUpdateResponse = AccountsAPI.AccountUpdateResponse;
    export import AccountDeleteResponse = AccountsAPI.AccountDeleteResponse;
    export import AccountUpdateParams = AccountsAPI.AccountUpdateParams;
    export import AccountDeleteParams = AccountsAPI.AccountDeleteParams;
    export import IPs = IPsAPI.IPs;
    export import IPUpdateResponse = IPsAPI.IPUpdateResponse;
    export import IPDeleteResponse = IPsAPI.IPDeleteResponse;
    export import IPUpdateParams = IPsAPI.IPUpdateParams;
    export import IPDeleteParams = IPsAPI.IPDeleteParams;
    export import Zones = ZonesAPI.Zones;
    export import ZoneUpdateResponse = ZonesAPI.ZoneUpdateResponse;
    export import ZoneDeleteResponse = ZonesAPI.ZoneDeleteResponse;
    export import ZoneUpdateParams = ZonesAPI.ZoneUpdateParams;
    export import ZoneDeleteParams = ZonesAPI.ZoneDeleteParams;
}
//# sourceMappingURL=address-maps.d.ts.map