diff --git a/apps/api/src/config.ts b/apps/api/src/config.ts index 31be0c4..e8c8bc3 100644 --- a/apps/api/src/config.ts +++ b/apps/api/src/config.ts @@ -12,6 +12,9 @@ export interface AppConfig { STREAM_CHAT_API_SECRET: string; STRIPE_SECRET_KEY: string; STRIPE_WEBHOOK_SECRET: string; + STRIPE_SOLO_PRICE_ID: string; + STRIPE_TEAM_MONTHLY_PRICE_ID: string; + STRIPE_FOUNDER_PRICE_ID: string; EMAIL_USER: string; EMAIL_CLIENT_ID: string; EMAIL_CLIENT_SECRET: string; @@ -88,6 +91,9 @@ export function createConfig(secrets?: Secrets): AppConfig { STRIPE_WEBHOOK_SECRET: isTestMode ? validateEnvVar("STRIPE_WEBHOOK_SECRET", process.env.STRIPE_WEBHOOK_SECRET) : getStripeWebhookSecret(isStagingMode), + STRIPE_SOLO_PRICE_ID: validateEnvVar("STRIPE_SOLO_PRICE_ID", process.env.STRIPE_SOLO_PRICE_ID), + STRIPE_TEAM_MONTHLY_PRICE_ID: validateEnvVar("STRIPE_TEAM_MONTHLY_PRICE_ID", process.env.STRIPE_TEAM_MONTHLY_PRICE_ID), + STRIPE_FOUNDER_PRICE_ID: validateEnvVar("STRIPE_FOUNDER_PRICE_ID", process.env.STRIPE_FOUNDER_PRICE_ID), EMAIL_USER: validateEnvVar("EMAIL_USER", process.env.EMAIL_USER), EMAIL_CLIENT_ID: validateEnvVar("EMAIL_CLIENT_ID", process.env.EMAIL_CLIENT_ID), EMAIL_CLIENT_SECRET: isTestMode diff --git a/apps/api/src/routers/stripe.ts b/apps/api/src/routers/stripe.ts index 7d115c4..9d5a2f4 100644 --- a/apps/api/src/routers/stripe.ts +++ b/apps/api/src/routers/stripe.ts @@ -77,16 +77,16 @@ const isInfinitePrice = (price: StripePriceRow): boolean => { ); }; -const getPlanPriceId = (plan: CheckoutPlan): string | null => { +const getPlanPriceId = (config: AppConfig, plan: CheckoutPlan): string | null => { if (plan === "solo") { - return process.env.STRIPE_SOLO_PRICE_ID ?? null; + return config.STRIPE_SOLO_PRICE_ID ?? null; } if (plan === "team") { - return process.env.STRIPE_TEAM_MONTHLY_PRICE_ID ?? null; + return config.STRIPE_TEAM_MONTHLY_PRICE_ID ?? null; } - return process.env.STRIPE_FOUNDER_PRICE_ID ?? null; + return config.STRIPE_FOUNDER_PRICE_ID ?? null; }; const findStripeCustomerByUserId = async ( @@ -244,7 +244,7 @@ const createCheckoutSession = ( let quantity = 1; if (plan) { - priceId = getPlanPriceId(plan); + priceId = getPlanPriceId(config, plan); if (!priceId) { return c.json({ error: `Missing Stripe price configuration for plan: ${plan}` }, 500); } @@ -253,7 +253,7 @@ const createCheckoutSession = ( quantity = Math.max(1, ownerContext.billingState.member_count); } } - + if (!priceId) { return c.json({ error: "priceId is required" }, 400); }