30 lines
781 B
TypeScript
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
|
|
})
|