Browse Source

Bugfix/improve creation of Stripe checkout session (#7220)

* Improve creation of Stripe checkout session

* Update changelog
pull/6075/merge
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
3b3e0884b0
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      CHANGELOG.md
  2. 4
      apps/api/src/app/app.module.ts
  3. 4
      apps/api/src/app/subscription/subscription.controller.ts
  4. 32
      apps/api/src/app/subscription/subscription.service.ts
  5. 4
      apps/api/src/middlewares/html-template.middleware.ts
  6. 2
      libs/common/src/lib/config.ts

5
CHANGELOG.md

@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Upgraded `stripe` from version `21.0.1` to `22.2.3`
### Fixed
- Fixed the creation of the _Stripe_ checkout session for languages not supported by _Stripe_ (`ca` and `uk`)
- Fixed the error handling in the endpoint to create a _Stripe_ checkout session
## 3.20.0 - 2026-07-04
### Changed

4
apps/api/src/app/app.module.ts

@ -147,7 +147,9 @@ import { UserModule } from './user/user.module';
.split(',')[0]
.split('-')[0];
if (SUPPORTED_LANGUAGE_CODES.includes(code)) {
if (
(SUPPORTED_LANGUAGE_CODES as readonly string[]).includes(code)
) {
languageCode = code;
}
} catch {}

4
apps/api/src/app/subscription/subscription.controller.ts

@ -116,11 +116,11 @@ export class SubscriptionController {
@Post('stripe/checkout-session')
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public createStripeCheckoutSession(
public async createStripeCheckoutSession(
@Body() { couponId, priceId }: { couponId?: string; priceId: string }
): Promise<CreateStripeCheckoutSessionResponse> {
try {
return this.subscriptionService.createStripeCheckoutSession({
return await this.subscriptionService.createStripeCheckoutSession({
couponId,
priceId,
user: this.request.user

32
apps/api/src/app/subscription/subscription.service.ts

@ -3,7 +3,8 @@ import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import {
DEFAULT_LANGUAGE_CODE,
PROPERTY_STRIPE_CONFIG
PROPERTY_STRIPE_CONFIG,
SUPPORTED_LANGUAGE_CODES
} from '@ghostfolio/common/config';
import { SubscriptionType } from '@ghostfolio/common/enums';
import { parseDate } from '@ghostfolio/common/helper';
@ -75,10 +76,7 @@ export class SubscriptionService {
quantity: 1
}
],
locale:
(user.settings?.settings
?.language as Stripe.Checkout.SessionCreateParams.Locale) ??
DEFAULT_LANGUAGE_CODE,
locale: this.getStripeLocale(user.settings?.settings?.language),
metadata: subscriptionOffer
? { subscriptionOffer: JSON.stringify(subscriptionOffer) }
: {},
@ -246,4 +244,28 @@ export class SubscriptionService {
isRenewal: key.startsWith('renewal')
};
}
private getStripeLocale(
languageCode: string
): Stripe.Checkout.SessionCreateParams.Locale {
const unsupportedLanguageCodes: Record<
Exclude<
(typeof SUPPORTED_LANGUAGE_CODES)[number],
Stripe.Checkout.SessionCreateParams.Locale
>,
true
> = {
ca: true,
uk: true
};
if (
(SUPPORTED_LANGUAGE_CODES as readonly string[]).includes(languageCode) &&
!(languageCode in unsupportedLanguageCodes)
) {
return languageCode as Stripe.Checkout.SessionCreateParams.Locale;
}
return DEFAULT_LANGUAGE_CODE;
}
}

4
apps/api/src/middlewares/html-template.middleware.ts

@ -117,7 +117,9 @@ export class HtmlTemplateMiddleware implements NestMiddleware {
const path = request.originalUrl.replace(/\/$/, '');
let languageCode = path.substr(1, 2);
if (!SUPPORTED_LANGUAGE_CODES.includes(languageCode)) {
if (
!(SUPPORTED_LANGUAGE_CODES as readonly string[]).includes(languageCode)
) {
languageCode = DEFAULT_LANGUAGE_CODE;
}

2
libs/common/src/lib/config.ts

@ -323,7 +323,7 @@ export const SUPPORTED_LANGUAGE_CODES = [
'tr',
'uk',
'zh'
];
] as const;
export const TAG_ID_EMERGENCY_FUND = '4452656d-9fa4-4bd0-ba38-70492e31d180';
export const TAG_ID_EXCLUDE_FROM_ANALYSIS =

Loading…
Cancel
Save