(ns ird.domains
"Domain availability search, utilities, and the classified .ro web
directory. `check` and `example` work anonymously (higher rate limits with
an API key)."
(:require
[ird.transport :as transport]))
(defn check
"GET /domains/check — Check domain availability. Anonymous allowed.
Returns the parsed response map."
[client domain]
(transport/request client :get "/domains/check" {:query {:domain domain}}))
(defn info
"GET /domains/info — Domain information utilities.
Optional QUERY keys include :fields.
Returns the parsed response map."
([client domain] (info client domain nil))
([client domain query]
(transport/request client :get "/domains/info"
{:query (assoc query :domain domain)})))
(defn preflight
"GET /domains/preflight — Route a domain to the right inbound operation.
Returns the parsed response map."
[client domain]
(transport/request client :get "/domains/preflight" {:query {:domain domain}}))
(defn dns-snapshot
"GET /domains/dns-snapshot — Faithful copy of a domain's live DNS.
Optional QUERY keys include :subdomains, :names.
Returns the parsed response map."
([client domain] (dns-snapshot client domain nil))
([client domain query]
(transport/request client :get "/domains/dns-snapshot"
{:query (assoc query :domain domain)})))
(defn search
"GET /domains/search — Suggest available domain names.
Optional QUERY keys include :count.
Returns the parsed response map."
([client q] (search client q nil))
([client q query]
(transport/request client :get "/domains/search"
{:query (assoc query :q q)})))
(defn search-descriptions
"POST /domains/search — Suggest available domain names (long descriptions).
BODY is a plain map with :q and optional :count.
Returns the parsed response map."
[client body]
(transport/request client :post "/domains/search" {:body body}))
(defn example
"GET /domains/example — Example .ro domain. Anonymous allowed.
Returns the parsed response map."
[client]
(transport/request client :get "/domains/example"))
(defn directory
"GET /domains/directory — Browse the .ro web directory.
Optional QUERY keys include :category, :tag, :bias, :sentiment, :language,
:ad_network, :tracker, :tag_manager, :cookie_consent, :q, :limit, :cursor,
:offset, :include_total.
Returns the parsed response map."
([client] (directory client nil))
([client query]
(transport/request client :get "/domains/directory" {:query query})))
(defn directory-all
"List all directory entries under :entries by following cursor pagination.
QUERY may include filters; :cursor is managed automatically."
([client] (directory-all client nil))
([client query]
(transport/paginate client :get "/domains/directory" :entries query)))
(defn directory-entry
"GET /domains/directory/{domain} — Directory entry for a domain.
Returns the parsed response map."
[client domain]
(transport/request client :get (str "/domains/directory/" domain)))