import {z} from 'zod' export type DeleteApiAccountWebhooksIdArgs = {id: string}; export type DeleteApiAccountWebhooksIdOptions = {baseUrl?: string | undefined, bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const platformOperationStatus = z.enum(["PREVIEW", "QUEUED", "PROCESSING", "FAILED", "COMPLETED", "CANCELLED", "AWAITING_UPDATES"]); export const contactAssignment = z.object({new: z.boolean(), id: z.string().optional()}); export const nonRegistrantContacts = z.object({admin: contactAssignment.optional(), billing: contactAssignment.optional(), tech: contactAssignment.optional()}); export const operationDependencyError = z.object({code: z.string(), message: z.string()}); export const platformOperationDomainRegister = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DOMAIN_REGISTER"), parameters: z.object({owner: contactAssignment, contacts: nonRegistrantContacts.optional(), period: z.number().int().optional()}), error: operationDependencyError.optional()}); export const platformOperationDomainDnsRenew = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DOMAIN_DNS_RENEW"), parameters: z.object({period: z.number().int()}), error: operationDependencyError.optional()}); export const dnsRecordType = z.enum(["A", "AAAA", "ALIAS", "CAA", "CNAME", "DNSKEY", "DS", "HTTPS", "IPSECKEY", "MX", "NAPTR", "NS", "PTR", "SOA", "SPF", "SRV", "SSHFP", "SVCB", "TLSA", "TXT"]); export const platformOperationDnsRecordCreate = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DNS_RECORD_CREATE"), parameters: z.object({subName: z.string().optional(), type: dnsRecordType, values: z.array(z.string()), ttl: z.number().int()}), result: z.object({id: z.string()}).optional(), error: operationDependencyError.optional()}); export const platformOperationDnsRecordUpdate = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DNS_RECORD_UPDATE"), parameters: z.object({id: z.string(), values: z.array(z.string()).optional(), ttl: z.number().int().optional()}), error: operationDependencyError.optional()}); export const platformOperationDnsRecordDelete = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DNS_RECORD_DELETE"), parameters: z.object({id: z.string()}), error: operationDependencyError.optional()}); export const platformOperationDomainSetNameServers = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DOMAIN_SET_NAMESERVERS"), parameters: z.object({items: z.array(z.string()).optional()}), error: operationDependencyError.optional()}); export const platformOperationDomainDnsSecuritySetDnssec = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DOMAIN_DNS_SECURITY_SET_DNSSEC"), parameters: z.object({domain: z.string().optional()}), error: operationDependencyError.optional()}); export const platformOperationDomainDnsSecurityDeleteDnssec = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DOMAIN_DNS_SECURITY_DELETE_DNSSEC"), parameters: z.object({domain: z.string().optional()}), error: operationDependencyError.optional()}); export const platformOperationDomainDnsSecurityUpdateZone = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DOMAIN_DNS_SECURITY_UPDATE_ZONE"), parameters: z.object({domain: z.string().optional()}), error: operationDependencyError.optional()}); export const domainFlagLocks = z.record(z.string(), z.boolean()); export const platformOperationDomainFlagLockUpdate = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DOMAIN_FLAG_LOCK_UPDATE"), parameters: z.object({locks: domainFlagLocks.optional(), policyLocks: domainFlagLocks.optional()}), error: operationDependencyError.optional()}); export const platformOperationDomainDnsContactSet = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("DOMAIN_DNS_CONTACT_SET"), parameters: z.object({owner: contactAssignment.optional(), admin: contactAssignment.optional(), billing: contactAssignment.optional(), tech: contactAssignment.optional()}), error: operationDependencyError.optional()}); export const contactPurpose = z.enum(["OWNER", "ADMIN", "TECH", "BILLING"]); export const platformOperationContactCreate = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("CONTACT_CREATE"), parameters: z.object({purposes: z.array(contactPurpose)}), result: z.object({id: z.string()}).optional(), error: operationDependencyError.optional()}); export const webhookType = z.enum(["OPERATION_FINISHED", "OPERATION_ACTION_REQUIRED", "OPERATION_CREATED"]); export const platformOperationWebhookCreate = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("WEBHOOK_CREATE"), parameters: z.object({url: z.string(), type: webhookType}), result: z.object({id: z.string()}).optional(), error: operationDependencyError.optional()}); export const platformOperationWebhookDelete = z.object({id: z.string(), "@type": z.literal("unstoppabledomains.com/partner.v3.PlatformOperation"), status: platformOperationStatus, type: z.literal("WEBHOOK_DELETE"), parameters: z.object({id: z.string()}), error: operationDependencyError.optional()}); export const platformOperationDependency = z.discriminatedUnion("type", [platformOperationDomainRegister, platformOperationDomainDnsRenew, platformOperationDnsRecordCreate, platformOperationDnsRecordUpdate, platformOperationDnsRecordDelete, platformOperationDomainSetNameServers, platformOperationDomainDnsSecuritySetDnssec, platformOperationDomainDnsSecurityDeleteDnssec, platformOperationDomainDnsSecurityUpdateZone, platformOperationDomainFlagLockUpdate, platformOperationDomainDnsContactSet, platformOperationContactCreate, platformOperationWebhookCreate, platformOperationWebhookDelete]); export const operationCheckResponse = z.object({"@type": z.literal("unstoppabledomains.com/partner.v3.Operation"), id: z.string(), status: z.enum(["PREVIEW", "QUEUED", "PROCESSING", "FAILED", "COMPLETED", "CANCELLED", "AWAITING_UPDATES"]), type: z.enum(["ADMIN_GENERIC", "DOMAIN_ADMIN_UPDATE", "DOMAIN_RENEW", "ACCOUNT_UPDATE", "DOMAIN_DNS_RECORD_CREATE", "DOMAIN_DNS_RECORD_UPDATE", "DOMAIN_DNS_RECORD_DELETE", "DOMAIN_DNS_RECORD_BATCH", "DOMAIN_DNS_SECURITY_ENABLE", "DOMAIN_DNS_SECURITY_DELETE", "DOMAIN_DNS_NAME_SERVER_UPDATE", "DOMAIN_HOSTING_UPDATE", "DOMAIN_HOSTING_DISABLE", "DOMAIN_TRANSFER_OUT", "DOMAIN_TRANSFER_OUT_TOGGLE", "DOMAIN_FLAGS_UPDATE", "DOMAIN_CONTACTS_UPDATE", "CONTACT_CREATE", "DOMAIN_SUGGESTION_CREATE", "DOMAIN_SUGGESTION_REFRESH", "DOMAIN_ADMIN_DNS_ZONE_MIGRATE"]), domain: z.string().optional(), createdAtTimestamp: z.number(), lastUpdatedTimestamp: z.number(), validUntilTimestamp: z.number().optional(), dependencies: z.array(platformOperationDependency)}); export const webhookDeleteResponse = z.object({"@type": z.literal("unstoppabledomains.com/partner.v3.WebhookDeleteResult"), operation: operationCheckResponse}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Delete a webhook * * DELETE /account/webhooks/{id} */ export const deleteApiAccountWebhooksId = async (args: DeleteApiAccountWebhooksIdArgs, options?: DeleteApiAccountWebhooksIdOptions) => { const {baseUrl = "https://api.unstoppabledomains.com/partner/v3", fetch: fetchFn = fetch, bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (bearer !== undefined) headers.set('authorization', `Bearer ${bearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/account/webhooks/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "DELETE", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(webhookDeleteResponse, await res.json()) };