UNPKG

autumn-js

Version:
210 lines (202 loc) 5.67 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/backend/core/handlers/executeRoute.ts var executeRoute_exports = {}; __export(executeRoute_exports, { executeRoute: () => executeRoute }); module.exports = __toCommonJS(executeRoute_exports); // src/backend/core/utils/backendRes.ts var backendSuccess = ({ body, statusCode = 200 }) => { return { statusCode, body }; }; var backendError = ({ message, code = "internal_server_error", statusCode = 500, details }) => { return { statusCode, body: { message: message || "Internal server error", code, statusCode, ...details !== void 0 ? { details } : {} } }; }; var isBackendResult = (value) => { return !!value && typeof value === "object" && "statusCode" in value && "body" in value; }; // src/backend/core/utils/sanitizeBody.ts var DEFAULT_PROTECTED_BODY_FIELDS = [ "customerId", "customerData", "name", "email", "stripeId" ]; var CUSTOMER_PROTECTED_BODY_FIELDS = [ ...DEFAULT_PROTECTED_BODY_FIELDS, "metadata" ]; var sanitizeBody = (body, protectedFields = DEFAULT_PROTECTED_BODY_FIELDS) => { const rawBody = body || {}; const sanitized = {}; for (const [key, value] of Object.entries(rawBody)) { if (!protectedFields.includes(key)) { sanitized[key] = value; } } return sanitized; }; // ../sdk/src/models/autumn-error.ts var AutumnError = class extends Error { /** HTTP status code */ statusCode; /** HTTP body */ body; /** HTTP headers */ headers; /** HTTP content type */ contentType; /** Raw response */ rawResponse; constructor(message, httpMeta) { super(message); this.statusCode = httpMeta.response.status; this.body = httpMeta.body; this.headers = httpMeta.response.headers; this.contentType = httpMeta.response.headers.get("content-type") || ""; this.rawResponse = httpMeta.response; this.name = "AutumnError"; } }; // src/backend/core/handlers/errorTransformer.ts var parseErrorBody = (body) => { if (!body || body.length === 0) return {}; try { return JSON.parse(body); } catch { return {}; } }; var transformSdkError = (error) => { if (error instanceof AutumnError) { const parsed = parseErrorBody(error.body); return backendError({ statusCode: error.statusCode, message: parsed.message ?? error.message ?? "Autumn API request failed", code: parsed.code ?? "autumn_api_error" }); } if (error instanceof Error) { return backendError({ message: error.message, code: "internal_error" }); } return backendError({ message: "Internal server error", code: "internal_error" }); }; // src/backend/core/handlers/resolveIdentity.ts var resolveIdentity = async ({ getCustomer, requireCustomer = true }) => { try { const authResult = await getCustomer(); const identity = authResult ? { customerId: authResult.customerId ?? null, customerData: authResult.customerData } : { customerId: null, customerData: void 0 }; if (requireCustomer && !identity.customerId) { return { success: false, error: backendError({ message: `customerId returned from identify function is ${identity.customerId}`, code: "no_customer_id", statusCode: 401 }) }; } return { success: true, identity }; } catch (error) { console.error("[Autumn]: identify failed", error); return { success: false, error: transformSdkError(error) }; } }; // src/backend/core/handlers/executeRoute.ts var buildSdkArgs = ({ body, identity, route }) => { const args = sanitizeBody(body, route.protectedBodyFields); if (identity.customerId) { args.customerId = identity.customerId; } return args; }; var executeRoute = async ({ autumn, route, body, getCustomer }) => { const requireCustomer = route.requireCustomer !== false; const identityResult = await resolveIdentity({ getCustomer, requireCustomer }); if (identityResult.success === false) { return identityResult.error; } const { identity } = identityResult; if (route.customHandler) { try { const result = await route.customHandler({ autumn, identity, body }); if (isBackendResult(result)) { return result; } return backendSuccess({ body: result }); } catch (error) { console.error(`[Autumn] Custom handler failed: ${route.route}`, error); return transformSdkError(error); } } const sdkArgs = buildSdkArgs({ body, identity, route }); try { const result = await route.sdkMethod(autumn, sdkArgs); return backendSuccess({ body: result }); } catch (error) { console.error(`[Autumn] SDK call failed: ${route.route}`, error); return transformSdkError(error); } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { executeRoute });