diff --git a/packages/app-store/stripepayment/api/portal.ts b/packages/app-store/stripepayment/api/portal.ts index 1a7ec6a0ec..192ccc6262 100644 --- a/packages/app-store/stripepayment/api/portal.ts +++ b/packages/app-store/stripepayment/api/portal.ts @@ -9,6 +9,11 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) if (req.method === "POST" || req.method === "GET") { const referer = req.headers.referer; + if (!referer) { + res.status(500).json({ message: "Missing referer" }); + return; + } + // If accessing a user's portal if (referer.includes("/settings/billing")) { const customerId = await getStripeCustomerIdFromUserId(req.session!.user.id); @@ -28,15 +33,15 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) // If accessing a team's portal if referer has /settings/team/[:teamId]/billing if (/settings\/teams\/\d+\/billing/g.test(referer)) { // Grab the teamId by just matching /settings/teams/[:teamId]/billing and getting third item in array after split - const teamId = parseInt(referer.match(/\/(settings.+)/g)[0].split("/")[3]); + const teamId = referer.match(/\/(settings.+)/g) || ""; + const team = await getStripeIdsForTeam(parseInt(teamId[0].split("/")[3])); - const { stripeCustomerId } = await getStripeIdsForTeam(teamId); - if (!stripeCustomerId) { + if (!team?.stripeCustomerId) { res.status(500).json({ message: "Missing customer id" }); return; } const stripeSession = await stripe.billingPortal.sessions.create({ - customer: stripeCustomerId, + customer: team.stripeCustomerId, return_url: `${process.env.NEXT_PUBLIC_WEBAPP_URL}/settings/teams/${teamId}/billing`, }); res.redirect(302, stripeSession.url); diff --git a/packages/features/ee/teams/payments.ts b/packages/features/ee/teams/payments.ts index 8e38c01f75..3d52ba04d6 100644 --- a/packages/features/ee/teams/payments.ts +++ b/packages/features/ee/teams/payments.ts @@ -57,6 +57,11 @@ export const deleteTeamFromStripe = async (teamId: number) => { select: { stripeCustomerId: true }, }); + if (!stripeCustomerId) { + throw new Error("Team not found"); + return; + } + if (stripeCustomerId) { await stripe.customers.del(stripeCustomerId.stripeCustomerId); return;