UNPKG

@coursebuilder/core

Version:

Core package for Course Builder

126 lines (124 loc) 4.74 kB
import { NEW_PURCHASE_CREATED_EVENT } from "./chunk-K5LCDWG2.js"; import { checkoutSessionCompletedEvent } from "./chunk-GTLQQGKR.js"; import { parsePurchaseInfoFromCheckoutSession } from "./chunk-MUVDMT7G.js"; import { PROVIDERS } from "./chunk-TAX2U45T.js"; import { __name } from "./chunk-VLQXSCFN.js"; // src/inngest/stripe/event-checkout-session-completed.ts var STRIPE_CHECKOUT_SESSION_COMPLETED_EVENT = "stripe/checkout-session-completed"; var stripeCheckoutSessionCompletedConfig = { id: "stripe-checkout-session-completed", name: "Stripe Checkout Session Completed" }; var stripeCheckoutSessionCompletedTrigger = { event: STRIPE_CHECKOUT_SESSION_COMPLETED_EVENT, if: "event.data.stripeEvent.data.object.mode == 'payment'" }; var stripeCheckoutSessionCompletedHandler = /* @__PURE__ */ __name(async ({ event, step, db, siteRootUrl, paymentProvider, emailProvider, getAuthConfig }) => { const stripeEvent = checkoutSessionCompletedEvent.parse(event.data.stripeEvent); const paymentsAdapter = paymentProvider.options.paymentsAdapter; const stripeCheckoutSession = stripeEvent.data.object; const merchantAccount = await step.run("load the merchant account", async () => { return await db.getMerchantAccount({ provider: PROVIDERS.STRIPE }); }); if (!merchantAccount) { throw new Error("Merchant account not found"); } const checkoutSession = await step.run("get stripe checkout session", async () => { return await paymentsAdapter.getCheckoutSession(stripeCheckoutSession.id); }); const organizationId = checkoutSession.metadata?.organizationId; const purchaseInfo = await step.run("parse checkout session", async () => { return await parsePurchaseInfoFromCheckoutSession(checkoutSession, db); }); const { user, isNewUser } = await step.run("load the user", async () => { if (!purchaseInfo.email) { throw new Error("purchaseInfo.email is null"); } return await db.findOrCreateUser(purchaseInfo.email); }); const merchantProduct = await step.run("load the merchant product", async () => { if (!purchaseInfo.productIdentifier) { throw new Error("purchaseInfo.productIdentifier is null"); } return await db.getMerchantProduct(purchaseInfo.productIdentifier); }); const merchantCustomer = await step.run("load the merchant customer", async () => { if (!purchaseInfo.customerIdentifier) { throw new Error("purchaseInfo.customerIdentifier is null"); } return await db.findOrCreateMerchantCustomer({ user, identifier: purchaseInfo.customerIdentifier, merchantAccountId: merchantAccount.id }); }); const product = await step.run("load the product", async () => { if (!merchantProduct?.productId) { throw new Error("merchantProduct.productId is null"); } return await db.getProduct(merchantProduct.productId); }); const purchase = await step.run("create a merchant charge and purchase", async () => { if (!merchantProduct) { throw new Error("merchantProduct is null"); } if (!merchantCustomer) { throw new Error("merchantCustomer is null"); } return await db.createMerchantChargeAndPurchase({ userId: user.id, organizationId, productId: merchantProduct.productId, stripeChargeId: purchaseInfo.chargeIdentifier, stripeCouponId: purchaseInfo.couponIdentifier, merchantAccountId: merchantAccount.id, merchantProductId: merchantProduct.id, merchantCustomerId: merchantCustomer.id, stripeChargeAmount: purchaseInfo.chargeAmount, quantity: purchaseInfo.quantity, checkoutSessionId: stripeCheckoutSession.id, country: purchaseInfo.metadata?.country, appliedPPPStripeCouponId: purchaseInfo.metadata?.appliedPPPStripeCouponId, upgradedFromPurchaseId: purchaseInfo.metadata?.upgradedFromPurchaseId, usedCouponId: purchaseInfo.metadata?.usedCouponId }); }); await step.sendEvent(NEW_PURCHASE_CREATED_EVENT, { name: NEW_PURCHASE_CREATED_EVENT, data: { purchaseId: purchase.id, checkoutSessionId: stripeCheckoutSession.id, productType: product?.type || "self-paced" }, user }); return { purchase, purchaseInfo }; }, "stripeCheckoutSessionCompletedHandler"); var stripeCheckoutSessionComplete = { config: stripeCheckoutSessionCompletedConfig, trigger: stripeCheckoutSessionCompletedTrigger, handler: stripeCheckoutSessionCompletedHandler }; export { STRIPE_CHECKOUT_SESSION_COMPLETED_EVENT, stripeCheckoutSessionCompletedConfig, stripeCheckoutSessionCompletedTrigger, stripeCheckoutSessionCompletedHandler, stripeCheckoutSessionComplete }; //# sourceMappingURL=chunk-JIYITLP7.js.map