69 lines
2.1 KiB
TypeScript
69 lines
2.1 KiB
TypeScript
import z from "zod";
|
|
import { RecordIdSchema, SiteSchema } from "./site.js";
|
|
|
|
/**
|
|
* Domain regex: standard DNS name, `localhost`, IPv4 literal.
|
|
*
|
|
* Mirrors the upstream `domain.schema.ts` regex — see `domain.md`
|
|
* for the full grammar table.
|
|
*/
|
|
const DOMAIN_REGEX =
|
|
/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$|^localhost$|^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/i;
|
|
|
|
/** Domain literal schema (1..253 chars, regex-validated). */
|
|
export const DomainSchema = z
|
|
.string()
|
|
.min(1)
|
|
.max(253)
|
|
.regex(DOMAIN_REGEX, "Invalid domain format");
|
|
|
|
/** `POST /sites/:id/domains` body. */
|
|
export const AddDomainRequestSchema = z.object({
|
|
domain: DomainSchema,
|
|
});
|
|
|
|
/** Response from `POST /sites/:id/domains`. */
|
|
export const AddDomainResponseSchema = z.object({
|
|
success: z.boolean(),
|
|
domains: z.array(z.string()),
|
|
error: z.string().optional(),
|
|
});
|
|
|
|
/** `DELETE /sites/:id/domains` body. */
|
|
export const RemoveDomainRequestSchema = z.object({
|
|
domain: DomainSchema,
|
|
});
|
|
|
|
/** Response from `DELETE /sites/:id/domains`. */
|
|
export const RemoveDomainResponseSchema = z.object({
|
|
success: z.boolean(),
|
|
domains: z.array(z.string()),
|
|
error: z.string().optional(),
|
|
});
|
|
|
|
/** `GET /sites/resolve/:domain` path param. */
|
|
export const DomainResolveParamSchema = z.object({
|
|
domain: DomainSchema,
|
|
});
|
|
|
|
/** Response from `GET /sites/resolve/:domain`. */
|
|
export const DomainResolveResponseSchema = z.object({
|
|
success: z.boolean(),
|
|
site: SiteSchema.optional(),
|
|
organization: z
|
|
.object({
|
|
id: RecordIdSchema,
|
|
name: z.string(),
|
|
slug: z.string(),
|
|
})
|
|
.optional(),
|
|
error: z.string().optional(),
|
|
});
|
|
|
|
export type AddDomainRequest = z.infer<typeof AddDomainRequestSchema>;
|
|
export type AddDomainResponse = z.infer<typeof AddDomainResponseSchema>;
|
|
export type RemoveDomainRequest = z.infer<typeof RemoveDomainRequestSchema>;
|
|
export type RemoveDomainResponse = z.infer<typeof RemoveDomainResponseSchema>;
|
|
export type DomainResolveParam = z.infer<typeof DomainResolveParamSchema>;
|
|
export type DomainResolveResponse = z.infer<typeof DomainResolveResponseSchema>;
|