From 258336c4ed05e56eb17cba4a71d6a9058b740fc9 Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Tue, 27 May 2025 19:04:32 -0400 Subject: [PATCH 1/2] fix(clerk-js,types): Handle missing publicUserData in OrganizationMembership --- .changeset/three-days-wash.md | 6 ++++++ .../src/core/resources/OrganizationMembership.ts | 10 ++++++---- packages/types/src/organizationMembership.ts | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 .changeset/three-days-wash.md diff --git a/.changeset/three-days-wash.md b/.changeset/three-days-wash.md new file mode 100644 index 00000000000..21a54dbf307 --- /dev/null +++ b/.changeset/three-days-wash.md @@ -0,0 +1,6 @@ +--- +'@clerk/clerk-js': patch +'@clerk/types': patch +--- + +Handle missing `publicUserData` in `OrganizationMembership` diff --git a/packages/clerk-js/src/core/resources/OrganizationMembership.ts b/packages/clerk-js/src/core/resources/OrganizationMembership.ts index 7c44524aa61..2c4ffe95605 100644 --- a/packages/clerk-js/src/core/resources/OrganizationMembership.ts +++ b/packages/clerk-js/src/core/resources/OrganizationMembership.ts @@ -17,7 +17,7 @@ import { BaseResource, Organization, PublicUserData } from './internal'; export class OrganizationMembership extends BaseResource implements OrganizationMembershipResource { id!: string; publicMetadata: OrganizationMembershipPublicMetadata = {}; - publicUserData!: PublicUserData; + publicUserData?: PublicUserData; organization!: Organization; permissions: OrganizationPermissionKey[] = []; role!: OrganizationCustomRoleKey; @@ -50,14 +50,16 @@ export class OrganizationMembership extends BaseResource implements Organization destroy = async (): Promise => { // TODO: Revise the return type of _baseDelete + // TODO: Handle case where publicUserData is not present return (await this._baseDelete({ - path: `/organizations/${this.organization.id}/memberships/${this.publicUserData.userId}`, + path: `/organizations/${this.organization.id}/memberships/${this.publicUserData?.userId}`, })) as unknown as OrganizationMembership; }; update = async ({ role }: UpdateOrganizationMembershipParams): Promise => { + // TODO: Handle case where publicUserData is not present return await this._basePatch({ - path: `/organizations/${this.organization.id}/memberships/${this.publicUserData.userId}`, + path: `/organizations/${this.organization.id}/memberships/${this.publicUserData?.userId}`, body: { role }, }); }; @@ -86,7 +88,7 @@ export class OrganizationMembership extends BaseResource implements Organization id: this.id, organization: this.organization.__internal_toSnapshot(), public_metadata: this.publicMetadata, - public_user_data: this.publicUserData.__internal_toSnapshot(), + public_user_data: this.publicUserData?.__internal_toSnapshot(), permissions: this.permissions, role: this.role, created_at: this.createdAt.getTime(), diff --git a/packages/types/src/organizationMembership.ts b/packages/types/src/organizationMembership.ts index 9e674b82b6b..cba4a455133 100644 --- a/packages/types/src/organizationMembership.ts +++ b/packages/types/src/organizationMembership.ts @@ -48,7 +48,7 @@ export interface OrganizationMembershipResource extends ClerkResource { organization: OrganizationResource; permissions: OrganizationPermissionKey[]; publicMetadata: OrganizationMembershipPublicMetadata; - publicUserData: PublicUserData; + publicUserData?: PublicUserData; role: OrganizationCustomRoleKey; createdAt: Date; updatedAt: Date; From a1d4c4788c8dfe150dd623c49008e3f405a74a8f Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Tue, 27 May 2025 19:16:02 -0400 Subject: [PATCH 2/2] fix: Typing --- .../ui/components/OrganizationProfile/ActiveMembersList.tsx | 4 ++-- packages/types/src/json.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx index d324fe19320..5c6b14a808c 100644 --- a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx @@ -76,7 +76,7 @@ const MemberRow = (props: { const card = useCardState(); const { user } = useUser(); - const isCurrentUser = user?.id === membership.publicUserData.userId; + const isCurrentUser = user?.id === membership.publicUserData?.userId; const unlocalizedRoleLabel = options?.find(a => a.value === membership.role)?.label; return ( @@ -85,7 +85,7 @@ const MemberRow = (props: { } /> diff --git a/packages/types/src/json.ts b/packages/types/src/json.ts index b8eff8e285f..4b94e15cf9f 100644 --- a/packages/types/src/json.ts +++ b/packages/types/src/json.ts @@ -390,7 +390,7 @@ export interface OrganizationMembershipJSON extends ClerkResourceJSON { organization: OrganizationJSON; permissions: OrganizationPermissionKey[]; public_metadata: OrganizationMembershipPublicMetadata; - public_user_data: PublicUserDataJSON; + public_user_data?: PublicUserDataJSON; role: OrganizationCustomRoleKey; created_at: number; updated_at: number;