feat: Use dub.customer.list to issue dual-sided incentives (#18452)
* [FEAT] Use dub.customer to issue dual-sided incentives * update dub implementation * uncommit yarn.lock * Update yarn.lock * account for self-hosting * remove comments --------- Co-authored-by: Omar López <zomars@me.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com>
This commit is contained in:
co-authored by
Omar López
Peer Richelsen
parent
245196fbf3
commit
f411c6ed11
@@ -2,6 +2,7 @@ import type { NextApiRequest } from "next";
|
||||
|
||||
import { getStripeCustomerIdFromUserId } from "@calcom/app-store/stripepayment/lib/customer";
|
||||
import stripe from "@calcom/app-store/stripepayment/lib/server";
|
||||
import { getDubCustomer } from "@calcom/features/auth/lib/dub";
|
||||
import { IS_PRODUCTION } from "@calcom/lib/constants";
|
||||
import { IS_TEAM_BILLING_ENABLED, WEBAPP_URL } from "@calcom/lib/constants";
|
||||
import { HttpError } from "@calcom/lib/http-error";
|
||||
@@ -192,11 +193,26 @@ const generateTeamCheckoutSession = async ({
|
||||
pendingPaymentTeamId: number;
|
||||
ownerId: number;
|
||||
}) => {
|
||||
const customer = await getStripeCustomerIdFromUserId(ownerId);
|
||||
const [customer, dubCustomer] = await Promise.all([
|
||||
getStripeCustomerIdFromUserId(ownerId),
|
||||
getDubCustomer(ownerId.toString()),
|
||||
]);
|
||||
|
||||
const session = await stripe.checkout.sessions.create({
|
||||
customer,
|
||||
mode: "subscription",
|
||||
allow_promotion_codes: true,
|
||||
...(dubCustomer?.discount?.couponId
|
||||
? {
|
||||
discounts: [
|
||||
{
|
||||
coupon:
|
||||
process.env.NODE_ENV !== "production" && dubCustomer.discount.couponTestId
|
||||
? dubCustomer.discount.couponTestId
|
||||
: dubCustomer.discount.couponId,
|
||||
},
|
||||
],
|
||||
}
|
||||
: { allow_promotion_codes: true }),
|
||||
success_url: `${WEBAPP_URL}/api/teams/api/create?session_id={CHECKOUT_SESSION_ID}`,
|
||||
cancel_url: `${WEBAPP_URL}/settings/my-account/profile`,
|
||||
line_items: [
|
||||
|
||||
@@ -3,3 +3,16 @@ import { Dub } from "dub";
|
||||
export const dub = new Dub({
|
||||
token: process.env.DUB_API_KEY,
|
||||
});
|
||||
|
||||
export const getDubCustomer = async (userId: string) => {
|
||||
if (!process.env.DUB_API_KEY) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const customer = await dub.customers.list({
|
||||
externalId: userId,
|
||||
includeExpandedFields: true,
|
||||
});
|
||||
|
||||
return customer.length > 0 ? customer[0] : null;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user