index.ts47 lines · main
1import type { components } from 'api-types'
2import { type NextApiRequest, type NextApiResponse } from 'next'
3
4import apiWrapper from '@/lib/api/apiWrapper'
5import { getFunctionsArtifactStore } from '@/lib/api/self-hosted/functions'
6import { uuidv4 } from '@/lib/helpers'
7
8export default function handlerWithErrorCatching(req: NextApiRequest, res: NextApiResponse) {
9 return apiWrapper(req, res, handler, { withAuth: true })
10}
11
12async function handler(req: NextApiRequest, res: NextApiResponse) {
13 const { method } = req
14
15 switch (method) {
16 case 'GET':
17 return handleGetAll(req, res)
18 default:
19 res.setHeader('Allow', ['GET'])
20 res.status(405).json({ data: null, error: { message: `Method ${method} Not Allowed` } })
21 }
22}
23
24type EdgeFunctionsResponse = components['schemas']['FunctionResponse']
25
26const handleGetAll = async (_req: NextApiRequest, res: NextApiResponse) => {
27 const store = getFunctionsArtifactStore()
28
29 const functionsArtifacts = await store.getFunctions()
30 if (functionsArtifacts.length === 0) return res.status(200).json([])
31
32 const functions = functionsArtifacts.map(
33 (func) =>
34 ({
35 id: uuidv4(),
36 slug: func.slug,
37 version: 1,
38 name: func.slug,
39 status: 'ACTIVE',
40 entrypoint_path: func.entrypoint_path,
41 created_at: func.created_at,
42 updated_at: func.updated_at,
43 }) satisfies EdgeFunctionsResponse
44 )
45
46 return res.status(200).json(functions)
47}