UNPKG

@hasna/domains

Version:

Domain portfolio, registrar, marketplace, and DNS management for AI agents — CLI + MCP + HTTP API + SDK, shared account API and PostgreSQL

180 lines • 7.69 kB
/** * AWS Route 53 provider — domain registration, hosted zones, and DNS management * * Supports: * - Domain availability check + purchase via Route 53 Domains * - Hosted zone CRUD via Route 53 * - DNS record management (list, upsert, delete) * * Env vars: * AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION (optional, defaults to us-east-1) */ import type { fromTemporaryCredentials } from "@aws-sdk/credential-providers"; import type { FullProvider } from "./registrar.js"; export interface Route53Config { region?: string; accessKeyId?: string; secretAccessKey?: string; sessionToken?: string; profile?: string; credentials?: ReturnType<typeof fromTemporaryCredentials>; } export interface DomainContactInfo { first_name: string; last_name: string; email: string; phone: string; address_line_1: string; address_line_2?: string; city: string; state?: string; country_code: string; zip_code: string; organization_name?: string; } export interface DomainAvailability { domain: string; available: boolean; availability: string; price?: string; renewal_price?: string; transfer_price?: string; currency?: string; } export interface Route53TldPrice { tld: string; registration_price?: string; renewal_price?: string; transfer_price?: string; currency?: string; } export interface RegisteredDomain { domain: string; expiry: string; auto_renew: boolean; transfer_lock: boolean; } export interface Route53RegistrarOptions { privacy_protected?: boolean; nameservers?: string[]; } export interface Route53OperationStatus { status: string; domain?: string; message?: string; } export interface Route53TransferOutAuthCode { auth_code: string; transfer_lock_disabled: boolean; transfer_lock_operation_id: string | null; } export interface HostedZoneInfo { id: string; name: string; record_count: number; comment?: string; name_servers?: string[]; private_zone?: boolean; } export interface Route53Record { name: string; type: string; ttl: number; values: string[]; /** Present when this is an alias record — values will be [] and ttl will be 0 */ alias_target?: Route53AliasTarget; } export interface Route53AliasTarget { /** Hosted zone ID of the alias target (e.g. Z2FDTNDATAQYW2 for CloudFront) */ hosted_zone_id: string; /** DNS name of the alias target (e.g. d1234.cloudfront.net) */ dns_name: string; } export interface Route53RecordInput { name: string; type: string; ttl?: number; values: string[]; /** When set, creates an alias record instead of a standard record. TTL and values are ignored. */ alias_target?: Route53AliasTarget; } export interface Route53ChangeResult { changeId: string | null; } export interface Route53ChangeOptions { comment?: string; } export declare function getConfig(): Route53Config; export declare function checkAvailability(domain: string, config?: Route53Config): Promise<DomainAvailability>; export declare function getTldPrice(tld: string, config?: Route53Config): Promise<Route53TldPrice | null>; export declare function listTldPrices(config?: Route53Config): Promise<Route53TldPrice[]>; export declare function registerDomain(domain: string, contact: DomainContactInfo, durationYears?: number, autoRenew?: boolean, config?: Route53Config, options?: Route53RegistrarOptions): Promise<{ operationId: string; }>; export declare function transferDomain(domain: string, authCode: string, contact: DomainContactInfo, durationYears?: number, autoRenew?: boolean, config?: Route53Config, options?: Route53RegistrarOptions): Promise<{ operationId: string; }>; export declare function getRegistrationStatus(operationId: string, config?: Route53Config): Promise<Route53OperationStatus>; export interface DomainDetail { domain: string; expiry: string; auto_renew: boolean | null; transfer_lock: boolean | null; created: string; updated: string; nameservers: string[]; status_list: string[]; registrar_name?: string; privacy_protected: boolean | null; } export declare function getRegistrationContactFromDomain(domain: string, config?: Route53Config): Promise<DomainContactInfo>; /** Absence is a completed ListDomains inventory, never an error-message match. */ export declare function findRegisteredDomainDetail(domain: string, config?: Route53Config): Promise<DomainDetail | null>; export declare function getDomainDetail(domain: string, config?: Route53Config): Promise<DomainDetail>; export declare function requestTransferOutAuthCode(domain: string, config?: Route53Config): Promise<Route53TransferOutAuthCode>; /** Minimal Route53 Domains client surface — lets tests inject a fake `send`. */ type Route53DomainsSend = { send: (cmd: unknown) => Promise<{ OperationId?: string; }>; }; /** * Point a domain's nameservers at a new set (the Cloudflare zone NS). * * Point a Route 53-registered domain at the chosen DNS provider's nameservers. * Returns the async operation id (poll getOperationDetail). */ export declare function updateNameservers(domain: string, nameservers: string[], config?: Route53Config, client?: Route53DomainsSend): Promise<{ operationId: string; }>; export declare function listRegisteredDomains(config?: Route53Config): Promise<RegisteredDomain[]>; export declare function createHostedZone(domain: string, comment?: string, config?: Route53Config, options?: { callerReference?: string; }): Promise<HostedZoneInfo>; export declare function listHostedZones(config?: Route53Config): Promise<HostedZoneInfo[]>; export declare function getHostedZone(hostedZoneId: string, config?: Route53Config): Promise<HostedZoneInfo & { name_servers: string[]; }>; export declare function deleteHostedZone(hostedZoneId: string, config?: Route53Config): Promise<void>; export declare function listHostedZonesByDomain(domain: string, config?: Route53Config): Promise<HostedZoneInfo[]>; export interface DefaultHostedZoneDeleteResult { deleted: boolean; reason?: string; } /** * Delete only an exact, empty Route 53 default zone. This never deletes record * sets. The final DeleteHostedZone call is the TOCTOU guard: if any record is * added after inspection, Route 53 rejects the delete as HostedZoneNotEmpty. */ export declare function deleteDefaultHostedZone(hostedZoneId: string, domain: string, delegatedNameservers: string[], config?: Route53Config): Promise<DefaultHostedZoneDeleteResult>; export declare function findHostedZoneByDomain(domain: string, config?: Route53Config): Promise<HostedZoneInfo | null>; export declare function findHostedZoneByNameservers(domain: string, nameservers: string[], config?: Route53Config): Promise<HostedZoneInfo | null>; export declare function listRecords(hostedZoneId: string, config?: Route53Config, options?: { requireSimpleRouting?: boolean; }): Promise<Route53Record[]>; export declare function upsertRecord(hostedZoneId: string, record: Route53RecordInput, config?: Route53Config, options?: Route53ChangeOptions): Promise<Route53ChangeResult>; export declare function deleteRecord(hostedZoneId: string, record: Route53RecordInput, config?: Route53Config, options?: Route53ChangeOptions): Promise<Route53ChangeResult>; export declare function upsertRecords(hostedZoneId: string, records: Route53RecordInput[], config?: Route53Config, options?: Route53ChangeOptions): Promise<Route53ChangeResult>; export declare function createRoute53Provider(config?: Route53Config): FullProvider; export {}; //# sourceMappingURL=route53.d.ts.map