38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
/**
|
|
* Edge Function: main (relay)
|
|
* Enruta todas las requests al worker de la función correspondiente.
|
|
* Requerido por supabase/edge-runtime en self-hosted (--main-service).
|
|
* No expuesto directamente — solo opera como router interno.
|
|
*/
|
|
|
|
const FUNCTIONS = ['invite-user', 'revoke-user']
|
|
|
|
Deno.serve(async (req: Request) => {
|
|
const url = new URL(req.url)
|
|
|
|
// Extraer nombre de función del path: /functions/v1/invite-user → invite-user
|
|
const segments = url.pathname.split('/').filter(Boolean)
|
|
const functionName = segments[segments.length - 1]
|
|
|
|
if (!functionName || !FUNCTIONS.includes(functionName)) {
|
|
return new Response(
|
|
JSON.stringify({ error: `Función no encontrada: ${functionName}` }),
|
|
{ status: 404, headers: { 'Content-Type': 'application/json' } },
|
|
)
|
|
}
|
|
|
|
const servicePath = `/home/deno/functions/${functionName}`
|
|
|
|
try {
|
|
// EdgeRuntime.userWorkers es el API del supabase/edge-runtime para crear workers por función
|
|
const worker = await EdgeRuntime.userWorkers.create({ servicePath })
|
|
return await worker.fetch(req)
|
|
} catch (err) {
|
|
const message = err instanceof Error ? err.message : String(err)
|
|
return new Response(
|
|
JSON.stringify({ error: message }),
|
|
{ status: 500, headers: { 'Content-Type': 'application/json' } },
|
|
)
|
|
}
|
|
})
|