@hasna/domains
Version:
Domain portfolio, registrar, marketplace, and DNS management for AI agents — CLI + MCP + HTTP API + SDK, shared account API and PostgreSQL
383 lines • 13.6 kB
TypeScript
export interface Error {
"error": string;
"reason"?: string;
}
export interface HealthResponse {
"status": string;
"version": string;
"latencyMs"?: number;
}
export interface ReadyResponse {
"status": string;
"version": string;
"pendingMigrations"?: Array<string>;
}
export interface VersionResponse {
"status": string;
"version": string;
}
export interface DeleteResult {
"id": string;
"deleted": boolean;
}
export interface AvailabilityInput {
"name": string;
}
export interface AvailabilityQuote {
"name": string;
"available": boolean;
"price_usd"?: number;
"registration_price_usd"?: number;
"renewal_price_usd"?: number;
"currency"?: string;
"is_premium"?: boolean;
}
export interface DomainProvisioningRequest {
"name": string;
"max_price_usd": number;
"years": number;
"auto_renew": boolean;
"registrar"?: "route53";
"dns_provider"?: "cloudflare";
"target"?: "shortlinks" | "website_origin";
"worker_name"?: string | null;
"origin_hostname"?: string | null;
"origin_tls_mode"?: "strict" | "full" | null;
}
export interface DomainAdoptionRequest {
"name": string;
"dns_provider"?: "cloudflare";
"target": "shortlinks" | "website_origin";
"worker_name"?: string | null;
"origin_hostname"?: string | null;
"origin_tls_mode"?: "strict" | "full" | null;
}
export interface DomainProvisioningProviderState {
"route53_account_ref"?: string;
"route53_account_binding_sha256"?: string;
"quoted_price_usd"?: number;
"currency"?: string;
"registration_operation_id"?: string;
"nameserver_operation_id"?: string;
"cloudflare_zone_id"?: string;
"cloudflare_nameservers"?: Array<string>;
"route53_zone_ids_before_registration"?: Array<string>;
"route53_hosted_zone_id"?: string;
"route53_hosted_zone_cleaned"?: boolean;
"worker_domain_bound"?: boolean;
"website_origin_configured"?: boolean;
"origin_tls_mode_configured"?: "strict" | "full" | "origin_pull";
"origin_tls_mode_checked_at"?: string;
"web_records"?: Array<ProvisionedWebRecord>;
"target_checked_at"?: string;
"last_provider_status"?: string;
"registration_submitted_at"?: string;
"nameservers_submitted_at"?: string;
"delegation_dns_preserved_count"?: number;
"delegation_dns_preserved_sha256"?: string;
"delegation_dns_preserved_at"?: string;
}
export interface DomainProvisioningJob {
"id": string;
"domain_id": string;
"name": string;
"idempotency_key": string;
"request_hash": string;
"status": "requested" | "quoted" | "registration_submitting" | "registration_submitted" | "registered" | "zone_ready" | "nameservers_submitted" | "delegated" | "worker_bound" | "ready" | "manual_review" | "failed";
"max_price_usd": number;
"years": number;
"auto_renew": boolean;
"acquisition_mode": "purchase" | "adopt";
"registrar": "route53" | "brandsight";
"dns_provider": string;
"target": string;
"worker_name": string | null;
"origin_hostname": string | null;
"origin_tls_mode": "strict" | "full" | null;
"provider_state": DomainProvisioningProviderState;
"result": DomainProvisioningResult | null;
"attempts": number;
"error"?: string | null;
"lease_until"?: string | null;
"created_at": string;
"updated_at": string;
}
export interface ProvisionedWebRecord {
"type": "CNAME";
"name": string;
"value": string;
"proxied": true;
"ttl": number;
}
export interface DomainProvisioningResult {
"zone_ref": string;
"nameservers": Array<string>;
"web_records": Array<ProvisionedWebRecord>;
"origin_tls_mode": "strict" | "full" | null;
"checked_at": string;
}
export interface HostedDnsRecord {
"type": "TXT" | "CNAME" | "MX";
"name": string;
"value": string;
"ttl": number;
"priority"?: number | null;
}
export interface ReconciliationDnsRecord {
"type": "TXT" | "CNAME" | "MX";
"name": string;
"value": string;
"ttl": number | 1;
"priority"?: number | null;
}
export interface EffectiveHostedDnsRecord {
"type": "TXT" | "CNAME" | "MX";
"name": string;
"value": string;
"ttl": number | 1;
"priority"?: number | null;
"semantic_value"?: string;
}
export interface DomainDnsRecordState {
"hash_scheme": "domains-dns-group-v1";
"domain_name": string;
"provisioning_job_id": string;
"zone_id": string;
"record_name": string;
"record_type": "TXT" | "CNAME" | "MX";
"records_sha256": string;
"records": Array<{
"id": string;
"type": string;
"name": string;
"value": string;
"ttl": number;
"priority": number | null;
"proxied": boolean | null;
}>;
}
export interface DomainDnsReconciliationRequest {
"records": Array<ReconciliationDnsRecord>;
"expected_current_records_sha256"?: string;
}
export interface DomainDnsReconciliation {
"id": string;
"provisioning_job_id": string;
"domain_name": string;
"idempotency_key": string;
"request_hash": string;
"status": "requested" | "applying" | "ready" | "manual_review";
"records": Array<ReconciliationDnsRecord>;
"result": {
"records": Array<EffectiveHostedDnsRecord>;
"checked_at": string;
} | null;
"error": string | null;
"lease_until": string | null;
"created_at": string;
"updated_at": string;
}
export interface Domain {
"id": string;
"name": string;
"registrar"?: string | null;
"status": string;
"registered_at"?: string | null;
"expires_at"?: string | null;
"auto_renew": boolean;
"is_premium": boolean;
"premium_price"?: number | null;
"standard_price"?: number | null;
"purchase_price"?: number | null;
"purchase_date"?: string | null;
"nameservers"?: Array<string>;
"whois"?: Record<string, unknown>;
"ssl_expires_at"?: string | null;
"ssl_issuer"?: string | null;
"notes"?: string | null;
"metadata"?: Record<string, unknown>;
"created_at": string;
"updated_at": string;
}
export interface DomainList {
"domains": Array<Domain>;
"count": number;
}
export interface CreateDomainInput {
"name": string;
"registrar"?: string;
"status"?: string;
"registered_at"?: string;
"expires_at"?: string;
"auto_renew"?: boolean;
"is_premium"?: boolean;
"premium_price"?: number;
"standard_price"?: number;
"purchase_price"?: number;
"purchase_date"?: string;
"nameservers"?: Array<string>;
"whois"?: Record<string, unknown>;
"ssl_expires_at"?: string;
"ssl_issuer"?: string;
"notes"?: string;
"metadata"?: Record<string, unknown>;
}
export interface UpdateDomainInput {
"name"?: string;
"registrar"?: string | null;
"status"?: string;
"registered_at"?: string | null;
"expires_at"?: string | null;
"auto_renew"?: boolean;
"is_premium"?: boolean;
"premium_price"?: number | null;
"standard_price"?: number | null;
"purchase_price"?: number | null;
"purchase_date"?: string | null;
"nameservers"?: Array<string>;
"whois"?: Record<string, unknown>;
"ssl_expires_at"?: string | null;
"ssl_issuer"?: string | null;
"notes"?: string | null;
"metadata"?: Record<string, unknown>;
}
export interface DnsRecord {
"id": string;
"domain_id": string;
"type": string;
"name": string;
"value": string;
"ttl": number;
"priority"?: number | null;
"created_at": string;
}
export interface DnsRecordList {
"records": Array<DnsRecord>;
"count": number;
}
export interface CreateDnsRecordInput {
"type": "A" | "AAAA" | "CNAME" | "MX" | "TXT" | "NS" | "SRV";
"name": string;
"value": string;
"ttl"?: number;
"priority"?: number;
}
export interface DomainOffer {
"id": string;
"domain_id": string;
"our_offer"?: number | null;
"their_ask"?: number | null;
"status": string;
"notes"?: string | null;
"created_at": string;
}
export interface OfferList {
"offers": Array<DomainOffer>;
"count": number;
}
export interface CreateOfferInput {
"our_offer"?: number;
"their_ask"?: number;
"status"?: string;
"notes"?: string;
}
export interface DomainStats {
"total": number;
"active"?: number;
"expired"?: number;
"transferring"?: number;
"redemption"?: number;
"auto_renew_enabled"?: number;
"expiring_30_days"?: number;
"ssl_expiring_30_days"?: number;
}
export interface DomainsClientOptions {
/** Base URL, e.g. process.env.APP_API_URL. */
baseUrl: string;
/** API key, e.g. process.env.APP_API_KEY. Sent as the 'x-api-key' header. */
apiKey?: string;
/** Custom fetch (defaults to global fetch). */
fetch?: typeof fetch;
/** Extra headers merged into every request. */
headers?: Record<string, string>;
}
export declare class ApiError extends Error {
readonly status: number;
readonly body: unknown;
constructor(status: number, message: string, body: unknown);
}
export declare class DomainsClient {
private readonly baseUrl;
private readonly apiKey;
private readonly fetchImpl;
private readonly baseHeaders;
constructor(options: DomainsClientOptions);
private request;
/** Liveness probe (DB reachable). */
getHealth(init?: RequestInit): Promise<HealthResponse>;
/** Readiness probe (DB reachable and schema migrated). */
getReady(init?: RequestInit): Promise<ReadyResponse>;
/** Check live registrar availability and current price. */
checkDomainAvailability(body: AvailabilityInput, init?: RequestInit): Promise<AvailabilityQuote>;
/** Get a DNS record by id. */
getDnsRecord(id: string, init?: RequestInit): Promise<DnsRecord>;
/** Delete a DNS record. */
deleteDnsRecord(id: string, init?: RequestInit): Promise<DeleteResult>;
/** List domains. */
listDomains(query?: {
"search"?: string;
"status"?: string;
"limit"?: number;
"offset"?: number;
}, init?: RequestInit): Promise<DomainList>;
/** Create a domain. */
createDomain(body: CreateDomainInput, init?: RequestInit): Promise<Domain>;
/** Get a domain by id. */
getDomain(id: string, init?: RequestInit): Promise<Domain>;
/** Delete a domain. */
deleteDomain(id: string, init?: RequestInit): Promise<DeleteResult>;
/** Update a domain. */
updateDomain(id: string, body: UpdateDomainInput, init?: RequestInit): Promise<Domain>;
/** List DNS records for a domain. */
listDnsRecords(id: string, init?: RequestInit): Promise<DnsRecordList>;
/** Create a DNS record for a domain. */
createDnsRecord(id: string, body: CreateDnsRecordInput, init?: RequestInit): Promise<DnsRecord>;
/** List marketplace offers for a domain. */
listOffers(id: string, init?: RequestInit): Promise<OfferList>;
/** Create a marketplace offer for a domain. */
createOffer(id: string, body: CreateOfferInput, init?: RequestInit): Promise<DomainOffer>;
/** Reserve, cap the total charge, purchase, delegate and bind a domain through the hosted Domains authority. */
requestDomainProvisioning(body: DomainProvisioningRequest, init?: RequestInit): Promise<DomainProvisioningJob>;
/** Adopt an existing portfolio domain into hosted provisioning without a registrar purchase. */
adoptOwnedDomainProvisioning(body: DomainAdoptionRequest, init?: RequestInit): Promise<DomainProvisioningJob>;
/** Read the durable provisioning job for a canonical domain name. */
getDomainProvisioningByName(name: string, init?: RequestInit): Promise<DomainProvisioningJob>;
/** Idempotently reconcile bounded TXT, CNAME, and MX record groups for a ready hosted domain. */
reconcileProvisionedDomainDns(name: string, body: DomainDnsReconciliationRequest, init?: RequestInit): Promise<DomainDnsReconciliation>;
/** Ensure email authorization while preserving existing DMARC and unrelated mail records. Result records are effective provider values, which may differ from requested defaults. */
reconcileProvisionedDomainEmailDns(name: string, body: DomainDnsReconciliationRequest, init?: RequestInit): Promise<DomainDnsReconciliation>;
/** Read durable DNS receipts without claiming leases or replaying provider writes. Follow next_offset until null. */
listProvisionedDomainDnsReconciliations(name: string, query?: {
"id"?: string;
"idempotency_key"?: string;
"limit"?: number;
"offset"?: number;
}, init?: RequestInit): Promise<{
"reconciliations": Array<DomainDnsReconciliation>;
"next_offset": number | null;
}>;
/** Read a complete selected DNS group and its exact-state guard under the zone lock. */
getProvisionedDomainDnsState(name: string, query?: {
"record_name": string;
"record_type": "TXT" | "CNAME" | "MX";
}, init?: RequestInit): Promise<DomainDnsRecordState>;
/** Read a domain provisioning job. */
getDomainProvisioning(id: string, init?: RequestInit): Promise<DomainProvisioningJob>;
/** Advance one idempotent hosted provisioning step (operator recovery path). */
advanceDomainProvisioning(id: string, init?: RequestInit): Promise<DomainProvisioningJob>;
/** Portfolio statistics. */
getDomainStats(init?: RequestInit): Promise<DomainStats>;
/** Service version and mode. */
getVersion(init?: RequestInit): Promise<VersionResponse>;
}
//# sourceMappingURL=client.d.ts.map