21 lines
1.5 KiB
TypeScript
21 lines
1.5 KiB
TypeScript
import { z } from "zod"
|
|
import { certificateIssueRequestSchema, certificateIssueJobSchema, type CertificateIssueRequest } from "@mmapp/contracts/certificates"
|
|
|
|
export const certificateIssueCheckpointSchema = z.object({
|
|
request: certificateIssueRequestSchema.extend({ requestId: z.string().uuid() }),
|
|
accepted: z.boolean(),
|
|
job: certificateIssueJobSchema.nullable(),
|
|
}).superRefine((value, ctx) => {
|
|
const job = value.job, request = value.request
|
|
if (job && (job.id !== request.requestId || job.serverId !== String(request.serverId) || job.certName !== request.certName || JSON.stringify(job.domainNames) !== JSON.stringify(request.domainNames))) ctx.addIssue({ code: "custom", message: "Сохранённая задача относится к другой цели" })
|
|
if (job && !value.accepted) ctx.addIssue({ code: "custom", message: "Наблюдение задачи не подтверждает принятие запроса" })
|
|
})
|
|
export type CertificateIssueCheckpoint = z.infer<typeof certificateIssueCheckpointSchema>
|
|
export function createCertificateIssueCheckpoint(request: CertificateIssueRequest, requestId: string) {
|
|
return certificateIssueCheckpointSchema.parse({ request: { ...request, requestId }, accepted: false, job: null })
|
|
}
|
|
export function readCertificateIssueCheckpoint(raw: string | null) {
|
|
return raw === null ? null : certificateIssueCheckpointSchema.parse(JSON.parse(raw))
|
|
}
|
|
export function certificateIssueStorageKey(backendUrl: string) { return "mmapp:certificate-issue:" + backendUrl }
|