@coursebuilder/core
Version:
Core package for Course Builder
96 lines (94 loc) • 3.09 kB
JavaScript
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