From de0707c747e65a5b59621cf9312d223ca58d0c3d Mon Sep 17 00:00:00 2001 From: panteliselef Date: Wed, 3 Jan 2024 22:11:05 +0200 Subject: [PATCH 1/2] chore(clerk-js): Remove fallback data for paginated endpoint methods We want to allow developers to be able to catch the error themselves --- .../src/core/resources/Organization.ts | 93 +++++++------------ .../core/resources/OrganizationMembership.ts | 34 ++----- .../core/resources/OrganizationSuggestion.ts | 21 ++--- .../resources/UserOrganizationInvitation.ts | 21 ++--- 4 files changed, 61 insertions(+), 108 deletions(-) diff --git a/packages/clerk-js/src/core/resources/Organization.ts b/packages/clerk-js/src/core/resources/Organization.ts index 4ab04ab01c0..cd7e354ebf2 100644 --- a/packages/clerk-js/src/core/resources/Organization.ts +++ b/packages/clerk-js/src/core/resources/Organization.ts @@ -114,20 +114,14 @@ export class Organization extends BaseResource implements OrganizationResource { { forceUpdateClient: true, }, - ) - .then(res => { - const { data: invites, total_count } = - res?.response as unknown as ClerkPaginatedResponse; - - return { - total_count, - data: invites.map(domain => new OrganizationDomain(domain)), - }; - }) - .catch(() => ({ - total_count: 0, - data: [], - })); + ).then(res => { + const { data: invites, total_count } = res?.response as unknown as ClerkPaginatedResponse; + + return { + total_count, + data: invites.map(domain => new OrganizationDomain(domain)), + }; + }); }; getDomain = async ({ domainId }: { domainId: string }): Promise => { @@ -147,20 +141,15 @@ export class Organization extends BaseResource implements OrganizationResource { path: `/organizations/${this.id}/membership_requests`, method: 'GET', search: convertPageToOffset(getRequestParam), - }) - .then(res => { - const { data: requests, total_count } = - res?.response as unknown as ClerkPaginatedResponse; - - return { - total_count, - data: requests.map(request => new OrganizationMembershipRequest(request)), - }; - }) - .catch(() => ({ - total_count: 0, - data: [], - })); + }).then(res => { + const { data: requests, total_count } = + res?.response as unknown as ClerkPaginatedResponse; + + return { + total_count, + data: requests.map(request => new OrganizationMembershipRequest(request)), + }; + }); }; createDomain = async (name: string): Promise => { @@ -174,22 +163,15 @@ export class Organization extends BaseResource implements OrganizationResource { // `paginated` is used in some legacy endpoints to support clerk paginated responses // The parameter will be dropped in FAPI v2 search: convertPageToOffset({ ...getMembershipsParams, paginated: true }), - }) - .then(res => { - const { data: suggestions, total_count } = - res?.response as unknown as ClerkPaginatedResponse; - - return { - total_count, - data: suggestions.map(suggestion => new OrganizationMembership(suggestion)), - }; - }) - .catch(() => { - return { - total_count: 0, - data: [], - }; - }); + }).then(res => { + const { data: suggestions, total_count } = + res?.response as unknown as ClerkPaginatedResponse; + + return { + total_count, + data: suggestions.map(suggestion => new OrganizationMembership(suggestion)), + }; + }); }; getInvitations = async ( @@ -204,20 +186,15 @@ export class Organization extends BaseResource implements OrganizationResource { { forceUpdateClient: true, }, - ) - .then(res => { - const { data: requests, total_count } = - res?.response as unknown as ClerkPaginatedResponse; - - return { - total_count, - data: requests.map(request => new OrganizationInvitation(request)), - }; - }) - .catch(() => ({ - total_count: 0, - data: [], - })); + ).then(res => { + const { data: requests, total_count } = + res?.response as unknown as ClerkPaginatedResponse; + + return { + total_count, + data: requests.map(request => new OrganizationInvitation(request)), + }; + }); }; addMember = async ({ userId, role }: AddMemberParams) => { diff --git a/packages/clerk-js/src/core/resources/OrganizationMembership.ts b/packages/clerk-js/src/core/resources/OrganizationMembership.ts index 1dbcfcaa0e1..8b77a79c9a6 100644 --- a/packages/clerk-js/src/core/resources/OrganizationMembership.ts +++ b/packages/clerk-js/src/core/resources/OrganizationMembership.ts @@ -34,30 +34,16 @@ export class OrganizationMembership extends BaseResource implements Organization // `paginated` is used in some legacy endpoints to support clerk paginated responses // The parameter will be dropped in FAPI v2 search: convertPageToOffset({ ...retrieveMembershipsParams, paginated: true }), - }) - .then(res => { - if (!res?.response) { - return { - total_count: 0, - data: [], - }; - } - - // TODO: Fix typing - const { data: suggestions, total_count } = - res.response as unknown as ClerkPaginatedResponse; - - return { - total_count, - data: suggestions.map(suggestion => new OrganizationMembership(suggestion)), - }; - }) - .catch(() => { - return { - total_count: 0, - data: [], - }; - }); + }).then(res => { + // TODO: Fix typing + const { data: suggestions, total_count } = + res?.response as unknown as ClerkPaginatedResponse; + + return { + total_count, + data: suggestions.map(suggestion => new OrganizationMembership(suggestion)), + }; + }); }; destroy = async (): Promise => { diff --git a/packages/clerk-js/src/core/resources/OrganizationSuggestion.ts b/packages/clerk-js/src/core/resources/OrganizationSuggestion.ts index 41e31855d56..2c279b1aecb 100644 --- a/packages/clerk-js/src/core/resources/OrganizationSuggestion.ts +++ b/packages/clerk-js/src/core/resources/OrganizationSuggestion.ts @@ -30,20 +30,15 @@ export class OrganizationSuggestion extends BaseResource implements Organization path: '/me/organization_suggestions', method: 'GET', search: convertPageToOffset(params), - }) - .then(res => { - const { data: suggestions, total_count } = - res?.response as unknown as ClerkPaginatedResponse; + }).then(res => { + const { data: suggestions, total_count } = + res?.response as unknown as ClerkPaginatedResponse; - return { - total_count, - data: suggestions.map(suggestion => new OrganizationSuggestion(suggestion)), - }; - }) - .catch(() => ({ - total_count: 0, - data: [], - })); + return { + total_count, + data: suggestions.map(suggestion => new OrganizationSuggestion(suggestion)), + }; + }); } accept = async (): Promise => { diff --git a/packages/clerk-js/src/core/resources/UserOrganizationInvitation.ts b/packages/clerk-js/src/core/resources/UserOrganizationInvitation.ts index dc795224dc6..8bc51cc7ad6 100644 --- a/packages/clerk-js/src/core/resources/UserOrganizationInvitation.ts +++ b/packages/clerk-js/src/core/resources/UserOrganizationInvitation.ts @@ -28,20 +28,15 @@ export class UserOrganizationInvitation extends BaseResource implements UserOrga path: '/me/organization_invitations', method: 'GET', search: convertPageToOffset(params), - }) - .then(res => { - const { data: invites, total_count } = - res?.response as unknown as ClerkPaginatedResponse; + }).then(res => { + const { data: invites, total_count } = + res?.response as unknown as ClerkPaginatedResponse; - return { - total_count, - data: invites.map(invitation => new UserOrganizationInvitation(invitation)), - }; - }) - .catch(() => ({ - total_count: 0, - data: [], - })); + return { + total_count, + data: invites.map(invitation => new UserOrganizationInvitation(invitation)), + }; + }); } constructor(data: UserOrganizationInvitationJSON) { From ccf6411dc073dfdb7f42d4cd670177dfeef8c0e1 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Fri, 5 Jan 2024 12:39:56 +0200 Subject: [PATCH 2/2] chore(clerk-js): Add changeset --- .changeset/modern-plums-invent.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .changeset/modern-plums-invent.md diff --git a/.changeset/modern-plums-invent.md b/.changeset/modern-plums-invent.md new file mode 100644 index 00000000000..b1b338a7bda --- /dev/null +++ b/.changeset/modern-plums-invent.md @@ -0,0 +1,13 @@ +--- +'@clerk/clerk-js': minor +--- + +Remove fallback data and allow promise to throw for paginated endpoint methods. +Affected methods: +- Organization.getDomains +- Organization.getInvitations +- Organization.getMembershipRequests +- Organization.getMemberships +- User.getOrganizationInvitations +- User.getOrganizationSuggestions +- User.getOrganizationMemberships