UNPKG

@coursebuilder/core

Version:

Core package for Course Builder

96 lines (94 loc) 3.09 kB
import { SubscriptionInfoSchema } from "./chunk-4LEQQSNK.js"; import { logger } from "./chunk-734KCKQL.js"; import { CheckoutSessionMetadataSchema } from "./chunk-35XRVA3B.js"; import { __name } from "./chunk-VLQXSCFN.js"; // src/lib/pricing/stripe-subscription-utils.ts import { first } from "@coursebuilder/nodash"; async function parseSubscriptionInfoFromCheckoutSession(checkoutSession) { logger.debug("Parsing subscription info from checkout session", { checkoutSession }); const { customer, subscription, metadata } = checkoutSession; const { email, name, id: stripeCustomerId } = customer; const stripeSubscription = subscription; const subscriptionItem = first(stripeSubscription.items.data); if (!subscriptionItem) { logger.error(new Error("No subscription item found in checkout session")); throw new Error("No subscription item found"); } const stripePrice = subscriptionItem.price; const quantity = subscriptionItem.quantity || 1; const stripeProduct = stripeSubscription.plan?.product; logger.debug("Found subscription details", { stripeCustomerId, subscriptionId: stripeSubscription.id, productId: stripeProduct.id, quantity }); const enrichedMetadata = { bulk: quantity > 1 ? "true" : "false", country: "US", ip_address: "127.0.0.1", productId: stripeProduct.id, product: stripeProduct.name, siteName: "default", ...metadata }; const parsedMetadata = enrichedMetadata ? CheckoutSessionMetadataSchema.parse(enrichedMetadata) : void 0; logger.debug("Enriched metadata", { enrichedMetadata, parsedMetadata }); const info = { customerIdentifier: stripeCustomerId, email, name, productIdentifier: stripeProduct.id, product: stripeProduct, subscriptionIdentifier: stripeSubscription.id, priceIdentifier: stripePrice.id, quantity, status: stripeSubscription.status, currentPeriodStart: new Date(stripeSubscription.current_period_start * 1e3), currentPeriodEnd: new Date(stripeSubscription.current_period_end * 1e3), metadata: parsedMetadata }; const parsedInfo = SubscriptionInfoSchema.parse(info); logger.debug("Successfully parsed subscription info", { parsedInfo }); return parsedInfo; } __name(parseSubscriptionInfoFromCheckoutSession, "parseSubscriptionInfoFromCheckoutSession"); function determineSubscriptionPermissions(metadata, organizationId, purchasingMemberId) { logger.debug("Determining subscription permissions", { metadata, organizationId, purchasingMemberId }); const isMultiUser = metadata.bulk === "true"; const permissions = { organizationId, purchasingMemberId, isMultiUser, assignToMember: !isMultiUser ? purchasingMemberId : void 0 }; logger.debug("Determined subscription permissions", { permissions }); return permissions; } __name(determineSubscriptionPermissions, "determineSubscriptionPermissions"); export { parseSubscriptionInfoFromCheckoutSession, determineSubscriptionPermissions }; //# sourceMappingURL=chunk-FV54LM5Y.js.map