index.ts49 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 handleGet(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 handleGet = async (req: NextApiRequest, res: NextApiResponse) => {
27 const slugParam = req.query.slug
28 const slug = Array.isArray(slugParam) ? slugParam[0] : slugParam
29 if (!slug)
30 return res.status(404).json({ error: { message: `Missing function 'slug' parameter` } })
31
32 const store = getFunctionsArtifactStore()
33
34 const functionsArtifact = await store.getFunctionBySlug(slug)
35 if (!functionsArtifact) return res.status(404).json({ error: { message: `Function not found` } })
36
37 const functionResponse = {
38 id: uuidv4(),
39 slug: functionsArtifact.slug,
40 version: 1,
41 name: functionsArtifact.slug,
42 status: 'ACTIVE',
43 entrypoint_path: functionsArtifact.entrypoint_path,
44 created_at: functionsArtifact.created_at,
45 updated_at: functionsArtifact.updated_at,
46 } satisfies EdgeFunctionsResponse
47
48 return res.status(200).json(functionResponse)
49}