From f38533590dec14323696ff7925375323c005d3d2 Mon Sep 17 00:00:00 2001
From: Henry
Date: Sat, 16 May 2026 22:23:56 +0100
Subject: [PATCH] feat(cloud): fix upgrade/downgrade and migrate webhook
handler
---
apps/web/src/pages/api/partner/webhook.ts | 6 +++--
apps/web/src/views/members/index.tsx | 30 +++++++++++++----------
2 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/apps/web/src/pages/api/partner/webhook.ts b/apps/web/src/pages/api/partner/webhook.ts
index 143246a8..87c8711d 100644
--- a/apps/web/src/pages/api/partner/webhook.ts
+++ b/apps/web/src/pages/api/partner/webhook.ts
@@ -87,6 +87,8 @@ export default withApiLogging(
const { event, license_key, license_status, tier, prev_license_key } =
payload;
+ log.info({ headers: req.headers, payload }, "partner webhook received");
+
const { db } = await createNextApiContext(req);
switch (event) {
@@ -141,7 +143,7 @@ export default withApiLogging(
const cfg = tierConfig(tier);
await subscriptionRepo.upsertByPartnerLicenseKey(db, license_key, {
plan: cfg.plan,
- status: license_status,
+ status: "active",
partnerTier: tier,
seats: cfg.seats,
unlimitedSeats: cfg.unlimitedSeats,
@@ -163,7 +165,7 @@ export default withApiLogging(
const cfg = tierConfig(tier);
await subscriptionRepo.upsertByPartnerLicenseKey(db, license_key, {
plan: cfg.plan,
- status: sub.status,
+ status: "active",
partnerTier: tier,
seats: cfg.seats,
unlimitedSeats: cfg.unlimitedSeats,
diff --git a/apps/web/src/views/members/index.tsx b/apps/web/src/views/members/index.tsx
index 0b6d138b..56eaff46 100644
--- a/apps/web/src/views/members/index.tsx
+++ b/apps/web/src/views/members/index.tsx
@@ -27,8 +27,8 @@ import { useWorkspace } from "~/providers/workspace";
import { api } from "~/utils/api";
import { getAvatarUrl } from "~/utils/helpers";
import { DeleteMemberConfirmation } from "./components/DeleteMemberConfirmation";
-import { InviteMemberForm } from "./components/InviteMemberForm";
import { EditMemberPermissionsModal } from "./components/EditMemberPermissionsModal";
+import { InviteMemberForm } from "./components/InviteMemberForm";
export default function MembersPage() {
const { modalContentType, openModal, isOpen } = useModal();
@@ -76,6 +76,13 @@ export default function MembersPage() {
const unlimitedSeats = hasUnlimitedSeats(subscriptions);
+ const isProPlan =
+ !!proSubscription ||
+ workspace.plan === "pro" ||
+ workspace.plan === "enterprise";
+ const isTeamPlan = !!teamSubscription || workspace.plan === "team";
+ const isPaidPlan = isProPlan || isTeamPlan;
+
const TableRow = ({
memberPublicId,
memberId,
@@ -144,8 +151,8 @@ export default function MembersPage() {
{memberName}
- {((workspace.role === "admin" ||
- data?.showEmailsToMembers === true) ||
+ {(workspace.role === "admin" ||
+ data?.showEmailsToMembers === true ||
showSkeleton) && (
{memberRole &&
- memberRole.charAt(0).toUpperCase() +
- memberRole.slice(1)}
+ memberRole.charAt(0).toUpperCase() + memberRole.slice(1)}
{canEditMember && session?.user.id !== memberId && (
)}
@@ -266,32 +272,30 @@ export default function MembersPage() {
{env("NEXT_PUBLIC_KAN_ENV") === "cloud" && (
<>
- {!proSubscription && !teamSubscription && (
+ {!isPaidPlan && (
-
- {t`Launch offer: Get unlimited members with Pro`}
-
+
{t`Upgrade`}
)}
- {proSubscription
+ {isProPlan
? t`Pro Plan`
- : teamSubscription
+ : isTeamPlan
? t`Team Plan`
: t`Free Plan`}
- {proSubscription && unlimitedSeats && (
+ {isProPlan && unlimitedSeats && (
∞
)}