diff options
Diffstat (limited to 'packages/open-api/lib')
| -rw-r--r-- | packages/open-api/lib/assets.ts | 77 | ||||
| -rw-r--r-- | packages/open-api/lib/bookmarks.ts | 12 |
2 files changed, 78 insertions, 11 deletions
diff --git a/packages/open-api/lib/assets.ts b/packages/open-api/lib/assets.ts new file mode 100644 index 00000000..e0d0af99 --- /dev/null +++ b/packages/open-api/lib/assets.ts @@ -0,0 +1,77 @@ +import { + extendZodWithOpenApi, + OpenAPIRegistry, +} from "@asteasolutions/zod-to-openapi"; +import { z } from "zod"; + +import { BearerAuth } from "./common"; + +export const registry = new OpenAPIRegistry(); +extendZodWithOpenApi(z); + +export const AssetIdSchema = registry.registerParameter( + "AssetId", + z.string().openapi({ + param: { + name: "assetId", + in: "path", + }, + example: "ieidlxygmwj87oxz5hxttoc8", + }), +); + +registry.registerPath({ + method: "post", + path: "/assets", + description: "Upload a new asset", + summary: "Upload a new asset", + tags: ["Assets"], + security: [{ [BearerAuth.name]: [] }], + request: { + body: { + description: "The data to create the asset with.", + content: { + "multipart/form-data": { + schema: z.object({ + file: z.instanceof(File).openapi("File to be uploaded"), + }), + }, + }, + }, + }, + responses: { + 200: { + description: "Details about the created asset", + content: { + "application/json": { + schema: z + .object({ + assetId: z.string(), + contentType: z.string(), + size: z.number(), + fileName: z.string(), + }) + .openapi("Asset"), + }, + }, + }, + }, +}); + +registry.registerPath({ + method: "get", + path: "/assets/{assetId}", + description: "Get asset by its id", + summary: "Get a single asset", + tags: ["Assets"], + security: [{ [BearerAuth.name]: [] }], + request: { + params: z.object({ assetId: AssetIdSchema }), + }, + responses: { + 200: { + description: + "Asset content. Content type is determined by the asset type.", + }, + }, +}); diff --git a/packages/open-api/lib/bookmarks.ts b/packages/open-api/lib/bookmarks.ts index 8fb0eb8c..57b50a9b 100644 --- a/packages/open-api/lib/bookmarks.ts +++ b/packages/open-api/lib/bookmarks.ts @@ -13,6 +13,7 @@ import { zUpdateBookmarksRequestSchema, } from "@karakeep/shared/types/bookmarks"; +import { AssetIdSchema } from "./assets"; import { BearerAuth } from "./common"; import { ErrorSchema } from "./errors"; import { HighlightSchema } from "./highlights"; @@ -27,17 +28,6 @@ import { TagIdSchema } from "./tags"; export const registry = new OpenAPIRegistry(); extendZodWithOpenApi(z); -export const AssetIdSchema = registry.registerParameter( - "AssetId", - z.string().openapi({ - param: { - name: "assetId", - in: "path", - }, - example: "ieidlxygmwj87oxz5hxttoc8", - }), -); - export const BookmarkIdSchema = registry.registerParameter( "BookmarkId", z.string().openapi({ |
