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