UNPKG

autumn-js

Version:

Autumn JS Library

97 lines (93 loc) 2.65 kB
import { secretKeyCheck } from "./chunk-UNZHJTEY.mjs"; import { createRouterWithOptions } from "./chunk-2RZ2FZX2.mjs"; import "./chunk-5EKNB4IJ.mjs"; import "./chunk-3OLXYDCU.mjs"; import "./chunk-K7JGEYUX.mjs"; import "./chunk-HHMIVOXX.mjs"; import "./chunk-5H6HVCOP.mjs"; import { Autumn } from "./chunk-IOSEAUDJ.mjs"; import "./chunk-45WVZY23.mjs"; import { autumnApiUrl } from "./chunk-KSG3E4Q2.mjs"; import "./chunk-6DZX6EAA.mjs"; // src/libraries/backend/elysia.ts import { findRoute } from "rou3"; // src/utils/toSnakeCase.ts function stringToSnakeCase(str) { return str.replace(/([a-z])([A-Z])/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase(); } var toSnakeCase = (obj) => { if (Array.isArray(obj)) { return obj.map(toSnakeCase); } else if (obj !== null && typeof obj === "object") { return Object.fromEntries( Object.entries(obj).map(([key, value]) => [ stringToSnakeCase(key), toSnakeCase(value) ]) ); } return obj; }; // src/libraries/backend/elysia.ts function autumnHandler(options) { const { found, error: resError } = secretKeyCheck(options.secretKey); if (!found && !options.secretKey) { throw new Error(resError?.message || "Secret key check failed"); } const router = createRouterWithOptions(); return function plugin(app) { const autumn = new Autumn({ url: options.url || autumnApiUrl, version: options.version, secretKey: options.secretKey }); app.all("/api/autumn/*", async (context) => { const request = context.request; const url = new URL(request.url); const path = url.pathname; const searchParams = Object.fromEntries(url.searchParams); const method = request.method; const match = findRoute(router, method, path); if (!match) { context.set.status = 404; return { error: "Not found" }; } const { data, params: pathParams } = match; const { handler } = data; let body = null; if (["POST", "PUT", "PATCH"].includes(method)) { body = context.body; } try { const result = await handler({ autumn, body: toSnakeCase(body), path, getCustomer: async () => await options.identify(context), pathParams, searchParams }); context.set.status = result.statusCode; return result.body; } catch (error) { context.set.status = 500; return { error: "Internal server error", message: error?.message || "Unknown error" }; } }); return app; }; } export { autumnHandler };