diff --git a/apps/api/package.json b/apps/api/package.json index fa39948..dc8c48e 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -10,6 +10,7 @@ "@boring.tools/schema": "workspace:*", "@hono/clerk-auth": "^2.0.0", "@hono/zod-openapi": "^0.16.2", + "@scalar/hono-api-reference": "^0.5.149", "hono": "^4.6.3" }, "devDependencies": { diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 6c81e46..e50de21 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -1,5 +1,6 @@ import type { UserOutput } from '@boring.tools/schema' import { OpenAPIHono, type z } from '@hono/zod-openapi' +import { apiReference } from '@scalar/hono-api-reference' import { cors } from 'hono/cors' import user from './user' @@ -27,6 +28,17 @@ app.doc('/openapi.json', { }, }) +app.get( + '/', + apiReference({ + pageTitle: 'boring.tools API', + theme: 'purple', + spec: { + url: '/openapi.json', + }, + }), +) + export default { port: 3000, fetch: app.fetch, diff --git a/apps/website/astro.config.mjs b/apps/website/astro.config.mjs index 60132a7..a53a28a 100644 --- a/apps/website/astro.config.mjs +++ b/apps/website/astro.config.mjs @@ -1,6 +1,5 @@ import starlight from '@astrojs/starlight' import { defineConfig } from 'astro/config' -import starlightOpenAPI, { openAPISidebarGroups } from 'starlight-openapi' export default defineConfig({ outDir: '../../build/website', @@ -20,31 +19,18 @@ export default defineConfig({ social: { github: 'https://github.com/boring-tools/boring.tools', }, - favicon: '/public/favicon.svg', + favicon: '/favicon.svg', sidebar: [ { label: 'Guides', items: [{ label: 'Getting started', slug: 'guides/getting-started' }], }, - ...openAPISidebarGroups, + { label: 'API', link: 'https://api.boring.tools' }, // { // label: 'Reference', // autogenerate: { directory: 'reference' }, // }, ], - plugins: [ - // Generate the OpenAPI documentation pages. - starlightOpenAPI([ - { - base: 'api', - label: 'API', - schema: - import.meta.env.NODE_ENV !== 'production' - ? 'http://localhost:3000/openapi.json' - : 'https://api.boring.tools/openapi.json', - }, - ]), - ], }), ], }) diff --git a/apps/website/package.json b/apps/website/package.json index 35cb50d..c187a87 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -14,7 +14,6 @@ "@astrojs/starlight": "^0.28.2", "astro": "^4.15.3", "sharp": "^0.32.5", - "starlight-openapi": "^0.7.0", "typescript": "^5.6.2" } } diff --git a/bun.lockb b/bun.lockb index a423344..3a8715c 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/packages/schema/src/user/base.ts b/packages/schema/src/user/base.ts index ec65890..b1fdd8a 100644 --- a/packages/schema/src/user/base.ts +++ b/packages/schema/src/user/base.ts @@ -1,9 +1,11 @@ import { z } from '@hono/zod-openapi' -export const UserOutput = z.object({ - id: z.string().openapi({ - example: 'user_2metCkqOhUhHN1jEhLyh8wMODu7', - }), - name: z.string(), - email: z.string().email(), -}) +export const UserOutput = z + .object({ + id: z.string().openapi({ + example: 'user_2metCkqOhUhHN1jEhLyh8wMODu7', + }), + name: z.string(), + email: z.string().email(), + }) + .openapi('User') diff --git a/packages/schema/src/user/webhook.ts b/packages/schema/src/user/webhook.ts index f923a91..411af3b 100644 --- a/packages/schema/src/user/webhook.ts +++ b/packages/schema/src/user/webhook.ts @@ -27,4 +27,4 @@ export const UserWebhookInput = z examples: ['user.created', 'user.updated'], }), }) - .openapi('User') + .openapi('User Webhook')