diff --git a/packages/backend/src/config/app.ts b/packages/backend/src/config/app.ts
index 3364b834..a18038b1 100644
--- a/packages/backend/src/config/app.ts
+++ b/packages/backend/src/config/app.ts
@@ -39,7 +39,7 @@ type AppConfig = {
smtpPassword: string;
fromEmail: string;
isCloud: boolean;
- paddleVendorId: string;
+ paddleVendorId: number;
paddleVendorAuthCode: string;
stripeSecretKey: string;
stripeSigningSecret: string;
@@ -113,7 +113,7 @@ const appConfig: AppConfig = {
smtpPassword: process.env.SMTP_PASSWORD,
fromEmail: process.env.FROM_EMAIL,
isCloud: process.env.AUTOMATISCH_CLOUD === 'true',
- paddleVendorId: process.env.PADDLE_VENDOR_ID,
+ paddleVendorId: Number(process.env.PADDLE_VENDOR_ID),
paddleVendorAuthCode: process.env.PADDLE_VENDOR_AUTH_CODE,
stripeSecretKey: process.env.STRIPE_SECRET_KEY,
stripeSigningSecret: process.env.STRIPE_SIGNING_SECRET,
diff --git a/packages/backend/src/graphql/schema.graphql b/packages/backend/src/graphql/schema.graphql
index 872a0556..36f7de89 100644
--- a/packages/backend/src/graphql/schema.graphql
+++ b/packages/backend/src/graphql/schema.graphql
@@ -485,7 +485,7 @@ type GetPaymentPortalUrl {
type GetPaddleInfo {
sandbox: Boolean
- vendorId: String
+ vendorId: Int
}
type PaymentPlan {
diff --git a/packages/web/src/components/UpgradeFreeTrial/index.ee.tsx b/packages/web/src/components/UpgradeFreeTrial/index.ee.tsx
index 4fca59a0..9a0cfa90 100644
--- a/packages/web/src/components/UpgradeFreeTrial/index.ee.tsx
+++ b/packages/web/src/components/UpgradeFreeTrial/index.ee.tsx
@@ -16,14 +16,26 @@ import Paper from '@mui/material/Paper';
import LockIcon from '@mui/icons-material/Lock';
import usePaymentPlans from 'hooks/usePaymentPlans.ee';
+import useCurrentUser from 'hooks/useCurrentUser';
+import usePaddle from 'hooks/usePaddle.ee';
export default function UpgradeFreeTrial() {
const { plans, loading } = usePaymentPlans();
+ const currentUser = useCurrentUser();
+ const { loaded: paddleLoaded } = usePaddle();
const [selectedIndex, setSelectedIndex] = React.useState(0);
const selectedPlan = plans?.[selectedIndex];
const updateSelection = (index: number) => setSelectedIndex(index);
+ const handleCheckout = React.useCallback(() => {
+ window.Paddle.Checkout?.open({
+ product: selectedPlan.productId,
+ email: currentUser.email,
+ passthrough: JSON.stringify({ id: currentUser.id, email: currentUser.email })
+ })
+ }, [selectedPlan, currentUser]);
+
if (loading || !plans.length) return null;
return (
@@ -140,7 +152,13 @@ export default function UpgradeFreeTrial() {
+ VAT if applicable
-