UNPKG

autumn-js

Version:
96 lines (94 loc) 2.71 kB
import { secretKeyCheck } from "./chunk-UNZHJTEY.mjs"; import { createRouterWithOptions } from "./chunk-OFKRGNWA.mjs"; import "./chunk-HGB236VV.mjs"; import "./chunk-ZGI3AYWD.mjs"; import "./chunk-S46FBNO3.mjs"; import "./chunk-NCJ2TKEX.mjs"; import "./chunk-TUGNGQW2.mjs"; import "./chunk-UJBSJTAV.mjs"; import { Autumn } from "./chunk-UJN5NVTZ.mjs"; import "./chunk-SGEUXFOF.mjs"; import { autumnApiUrl } from "./chunk-KSG3E4Q2.mjs"; // src/libraries/backend/supabase.ts import { findRoute } from "rou3"; function autumnHandler(options) { const secretKey = Deno.env.get("AUTUMN_SECRET_KEY"); if (!secretKey) { throw new Error( `AUTUMN_SECRET_KEY not found. Please add it to your secrets in supabase: https://supabase.com/dashboard/project/<PROJECT_ID>/functions/secrets` ); } const autumn = new Autumn({ url: autumnApiUrl, secretKey }); const router = createRouterWithOptions(); const { found, error: resError } = secretKeyCheck(options?.secretKey); return async function handler(request) { if (!found && !options.secretKey) { return new Response(JSON.stringify(resError), { status: resError.statusCode }); } const method = request.method; const url = new URL(request.url); const searchParams = Object.fromEntries(url.searchParams); let pathname = url.pathname; if (!pathname.includes("/api/autumn")) { return new Response(JSON.stringify({ error: "Not found" }), { status: 404, headers: { ...options.corsHeaders, "Content-Type": "application/json" } }); } const autumnIndex = pathname.indexOf("/api/autumn"); pathname = pathname.substring(autumnIndex); const match = findRoute(router, method, pathname); if (!match) { return new Response(JSON.stringify({ error: "Not found" }), { status: 404, headers: { ...options.corsHeaders, "Content-Type": "application/json" } }); } const { data, params: pathParams } = match; const { handler: routeHandler } = data; let body = null; if (method === "POST" || method === "PUT" || method === "PATCH") { try { body = await request.json(); } catch (error) { } } const result = await routeHandler({ autumn, body, path: url.pathname, getCustomer: async () => await options.identify(request), pathParams, searchParams }); return new Response(JSON.stringify(result.body), { status: result.statusCode, headers: { ...options.corsHeaders, "Content-Type": "application/json" } }); }; } export { autumnHandler };