import { extendZodWithOpenApi, OpenAPIRegistry, } from "@asteasolutions/zod-to-openapi"; import { z } from "zod"; import { zBackupSchema } from "@karakeep/shared/types/backups"; import { BearerAuth } from "./common"; import { ErrorSchema } from "./errors"; export const registry = new OpenAPIRegistry(); extendZodWithOpenApi(z); export const BackupIdSchema = registry.registerParameter( "BackupId", z.string().openapi({ param: { name: "backupId", in: "path", }, example: "ieidlxygmwj87oxz5hxttoc8", }), ); registry.registerPath({ method: "get", path: "/backups", description: "Get all backups", summary: "Get all backups", tags: ["Backups"], security: [{ [BearerAuth.name]: [] }], responses: { 200: { description: "Object with all backups data.", content: { "application/json": { schema: z.object({ backups: z.array(zBackupSchema), }), }, }, }, }, }); registry.registerPath({ method: "post", path: "/backups", description: "Trigger a new backup", summary: "Trigger a new backup", tags: ["Backups"], security: [{ [BearerAuth.name]: [] }], responses: { 201: { description: "Backup created successfully", content: { "application/json": { schema: zBackupSchema, }, }, }, }, }); registry.registerPath({ method: "get", path: "/backups/{backupId}", description: "Get backup by its id", summary: "Get a single backup", tags: ["Backups"], security: [{ [BearerAuth.name]: [] }], request: { params: z.object({ backupId: BackupIdSchema }), }, responses: { 200: { description: "Object with backup data.", content: { "application/json": { schema: zBackupSchema, }, }, }, 404: { description: "Backup not found", content: { "application/json": { schema: ErrorSchema, }, }, }, }, }); registry.registerPath({ method: "get", path: "/backups/{backupId}/download", description: "Download backup file", summary: "Download a backup", tags: ["Backups"], security: [{ [BearerAuth.name]: [] }], request: { params: z.object({ backupId: BackupIdSchema }), }, responses: { 200: { description: "Backup file (zip archive)", content: { "application/zip": { schema: z.instanceof(Blob), }, }, }, 404: { description: "Backup not found", content: { "application/json": { schema: ErrorSchema, }, }, }, }, }); registry.registerPath({ method: "delete", path: "/backups/{backupId}", description: "Delete backup by its id", summary: "Delete a backup", tags: ["Backups"], security: [{ [BearerAuth.name]: [] }], request: { params: z.object({ backupId: BackupIdSchema }), }, responses: { 204: { description: "No content - the backup was deleted", }, 404: { description: "Backup not found", content: { "application/json": { schema: ErrorSchema, }, }, }, }, });