import { type DomainProvisioningJob } from "@hasna/domains/sdk"; import type { Domain } from "./types.js"; /** * Narrow client seam for the hosted Domains API. Shortlinks sends business * intent plus the `shortlinks` target profile; registrar, DNS provider, * nameservers, Cloudflare zone, and Worker binding choices stay in Domains. */ export interface DomainsProvisioningClient { requestDomainProvisioning(body: { name: string; max_price_usd: number; years: number; auto_renew: boolean; target?: "shortlinks"; }, init?: RequestInit): Promise; getDomainProvisioning(id: string, init?: RequestInit): Promise; checkDomainAvailability(body: { name: string; }, init?: RequestInit): Promise<{ name: string; available: boolean; price_usd?: number; currency?: string; is_premium?: boolean; }>; } export interface DomainProjectionStore { addDomain(input: { hostname: string; provider?: string; defaultDomain?: boolean; originUrl?: string; notes?: string; metadata?: Record; }): Promise; listDomains(): Promise; } export interface ShortlinksDomainProvisioning { id: string; name: string; status: DomainProvisioningJob["status"]; error: string | null; created_at: string; updated_at: string; } export declare function projectDomainProvisioning(job: DomainProvisioningJob): ShortlinksDomainProvisioning; export declare function createDomainsProvisioningClient(env?: Record, fetchImpl?: typeof fetch): DomainsProvisioningClient; export interface RequestShortlinksDomainInput { hostname: string; maxPriceUsd: number; years: number; autoRenew: boolean; idempotencyKey: string; } export declare function requestShortlinksDomain(client: DomainsProvisioningClient, input: RequestShortlinksDomainInput): Promise; export declare function domainProvisioningMetadata(job: DomainProvisioningJob, requestedDefault: boolean): Record; export declare function domainProvisioningJobId(domain: Domain): string | null; export declare function readShortlinksDomainProvisioning(client: DomainsProvisioningClient, domain: Domain): Promise; export declare function reconcileShortlinksDomain(store: DomainProjectionStore, client: DomainsProvisioningClient, domain: Domain): Promise<{ domain: Domain; provisioning: ShortlinksDomainProvisioning; }>; export declare function reconcilePendingShortlinksDomains(store: DomainProjectionStore, client: DomainsProvisioningClient): Promise<{ checked: number; activated: number; failed: number; errors: number; }>;