autumn-js
Version:
Autumn JS Library
210 lines (202 loc) • 5.67 kB
JavaScript
;
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
});