Sink-UrlShortener/server/api/link/list.get.ts
2024-05-25 08:09:30 +08:00

30 lines
781 B
TypeScript

import { z } from 'zod'
export default eventHandler(async (event) => {
const { cloudflare } = event.context
const { KV } = cloudflare.env
const { limit, cursor } = await getValidatedQuery(event, z.object({
limit: z.coerce.number().max(1024).default(20),
cursor: z.string().trim().max(1024).optional(),
}).parse)
const list = await KV.list({
prefix: `link:`,
limit,
cursor,
})
if (Array.isArray(list.keys)) {
list.links = await Promise.all(list.keys.map(async (key: { name: string }) => {
const { metadata, value: link } = await KV.getWithMetadata(key.name, { type: 'json' })
if (link) {
return {
...metadata,
...link,
}
}
return link
}))
}
delete list.keys
return list
})