cal.pub0.org/packages/app-store/stripepayment/api/add.ts

53 lines
1.7 KiB
TypeScript

import type { NextApiRequest, NextApiResponse } from "next";
import stringify from "qs-stringify";
import Stripe from "stripe";
import { z } from "zod";
import { WEBAPP_URL } from "@calcom/lib/constants";
import prisma from "@calcom/prisma";
import { getStripeAppKeys } from "../lib/getStripeAppKeys";
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
const { client_id } = await getStripeAppKeys();
if (req.method === "GET") {
// Get user
const user = await prisma.user.findUnique({
where: {
id: req.session?.user?.id,
},
select: {
email: true,
name: true,
},
});
const redirect_uri = encodeURI(WEBAPP_URL + "/api/integrations/stripepayment/callback");
const stripeConnectParams: Stripe.OAuthAuthorizeUrlParams = {
client_id,
scope: "read_write",
response_type: "code",
stripe_user: {
email: user?.email,
first_name: user?.name || undefined,
/** We need this so E2E don't fail for international users */
country: process.env.NEXT_PUBLIC_IS_E2E ? "US" : undefined,
},
redirect_uri,
state: typeof req.query.state === "string" ? req.query.state : undefined,
};
/** stringify is being dumb here */
const params = z.record(z.any()).parse(stripeConnectParams);
const query = stringify(params);
/**
* Choose Express or Standard Stripe accounts
* @url https://stripe.com/docs/connect/accounts
*/
// const url = `https://connect.stripe.com/express/oauth/authorize?${query}`;
const url = `https://connect.stripe.com/oauth/authorize?${query}`;
res.status(200).json({ url });
}
}