From cadcd92fdc84dd983805927e6b761c60a2bfffeb Mon Sep 17 00:00:00 2001 From: John Yeo Date: Thu, 22 May 2025 16:55:12 +0100 Subject: [PATCH 1/2] added trial ends at to current period end if no sub --- server/src/index.ts | 8 +++--- .../customers/products/cusProductUtils.ts | 25 +++++++++++-------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index de1946a14..d7acde8c5 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -29,7 +29,9 @@ const init = async () => { server.keepAliveTimeout = 120000; // 120 seconds server.headersTimeout = 120000; // 120 seconds should be >= keepAliveTimeout - const pgClient = new pg.Client(process.env.SUPABASE_CONNECTION_STRING || ""); + const pgClient = new pg.Client( + process.env.SUPABASE_CONNECTION_STRING || process.env.DATABASE_URL || "", + ); await pgClient.connect(); await QueueManager.getInstance(); // initialize the queue manager @@ -96,8 +98,8 @@ const init = async () => { console.log( `${chalk.gray(format(new Date(), "dd MMM HH:mm:ss"))} ${methodColor( - method - )} ${chalk.white(path)}` + method, + )} ${chalk.white(path)}`, ); next(); diff --git a/server/src/internal/customers/products/cusProductUtils.ts b/server/src/internal/customers/products/cusProductUtils.ts index 7fed98a7b..6c744a718 100644 --- a/server/src/internal/customers/products/cusProductUtils.ts +++ b/server/src/internal/customers/products/cusProductUtils.ts @@ -146,12 +146,12 @@ export const cancelCusProductSubscriptions = async ({ } console.log( - `Cancelled stripe subscription ${subId}, org: ${org.slug}, product: ${cusProduct.product.name}, customer: ${cusProduct.customer.id}` + `Cancelled stripe subscription ${subId}, org: ${org.slug}, product: ${cusProduct.product.name}, customer: ${cusProduct.customer.id}`, ); } catch (error: any) { if (error.code != "resource_missing") { console.log( - `Error canceling stripe subscription ${error.code}: ${error.message}` + `Error canceling stripe subscription ${error.code}: ${error.message}`, ); } // else subscription probably already cancelled } @@ -287,7 +287,7 @@ export const activateFutureProduct = async ({ if (subIsPrematurelyCanceled(subscription)) { console.log( - " 🔔 Subscription prematurely canceled, deleting scheduled products" + " 🔔 Subscription prematurely canceled, deleting scheduled products", ); await deleteScheduledIds({ @@ -308,10 +308,10 @@ export const activateFutureProduct = async ({ let product = futureProduct.product; let prices = futureProduct.customer_prices.map( - (cp: FullCustomerPrice) => cp.price + (cp: FullCustomerPrice) => cp.price, ); let entitlements = futureProduct.customer_entitlements.map( - (ce: FullCustomerEntitlement) => ce.entitlement + (ce: FullCustomerEntitlement) => ce.entitlement, ); await addProductsUpdatedWebhookTask({ @@ -335,7 +335,7 @@ export const activateFutureProduct = async ({ export const fullCusProductToCusEnts = ( cusProducts: FullCusProduct[], inStatuses: CusProductStatus[] = [CusProductStatus.Active], - reverseOrder: boolean = false + reverseOrder: boolean = false, ) => { const cusEnts: FullCustomerEntitlement[] = []; @@ -348,7 +348,7 @@ export const fullCusProductToCusEnts = ( ...cusProduct.customer_entitlements.map((cusEnt) => ({ ...cusEnt, customer_product: CusProductSchema.parse(cusProduct), - })) + })), ); } @@ -359,7 +359,7 @@ export const fullCusProductToCusEnts = ( export const fullCusProductToCusPrices = ( cusProducts: FullCusProduct[], - inStatuses: CusProductStatus[] = [CusProductStatus.Active] + inStatuses: CusProductStatus[] = [CusProductStatus.Active], ) => { const cusPrices: FullCustomerPrice[] = []; @@ -467,7 +467,7 @@ export const processFullCusProduct = ({ org.config.api_version >= BREAK_API_VERSION ) { let baseSub = subs?.find( - (s) => s.id == subIds[0] || (s as Subscription).stripe_id == subIds[0] + (s) => s.id == subIds[0] || (s as Subscription).stripe_id == subIds[0], ); stripeSubData = { current_period_end: baseSub?.current_period_end @@ -477,6 +477,11 @@ export const processFullCusProduct = ({ ? baseSub.current_period_start * 1000 : null, }; + } else if (subIds && subIds.length > 0 && trialing) { + stripeSubData = { + current_period_start: cusProduct.starts_at, + current_period_end: cusProduct.trial_ends_at, + }; } if (apiVersion >= APIVersion.v1_1) { @@ -575,7 +580,7 @@ export const getMainCusProduct = async ({ }); let mainCusProduct = cusProducts.find( - (cusProduct: FullCusProduct) => !cusProduct.product.is_add_on + (cusProduct: FullCusProduct) => !cusProduct.product.is_add_on, ); return mainCusProduct; From 76dc6f6453fbeb21524622186401fc7a0fc69bc4 Mon Sep 17 00:00:00 2001 From: John Yeo Date: Thu, 22 May 2025 17:01:36 +0100 Subject: [PATCH 2/2] added current period end to trialing without sub --- .../internal/customers/products/cusProductUtils.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/server/src/internal/customers/products/cusProductUtils.ts b/server/src/internal/customers/products/cusProductUtils.ts index 6c744a718..1680f6074 100644 --- a/server/src/internal/customers/products/cusProductUtils.ts +++ b/server/src/internal/customers/products/cusProductUtils.ts @@ -477,14 +477,16 @@ export const processFullCusProduct = ({ ? baseSub.current_period_start * 1000 : null, }; - } else if (subIds && subIds.length > 0 && trialing) { - stripeSubData = { - current_period_start: cusProduct.starts_at, - current_period_end: cusProduct.trial_ends_at, - }; } if (apiVersion >= APIVersion.v1_1) { + if ((!subIds || subIds.length == 0) && trialing) { + stripeSubData = { + current_period_start: cusProduct.starts_at, + current_period_end: cusProduct.trial_ends_at, + }; + } + return CusProductResponseSchema.parse({ id: cusProduct.product.id, name: cusProduct.product.name,