From a24761eb3b22ac92159cdae64df63a17ebf3a455 Mon Sep 17 00:00:00 2001 From: Gautam Manchandani Date: Mon, 8 Dec 2025 12:20:44 +0530 Subject: [PATCH] feat(organization): allow invited users to see organization name (#6602) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../src/plugins/organization/adapter.ts | 14 +++- .../plugins/organization/organization.test.ts | 1 + .../organization/routes/crud-invites.ts | 68 +++++++++++++++++++ 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/packages/better-auth/src/plugins/organization/adapter.ts b/packages/better-auth/src/plugins/organization/adapter.ts index 973848ff4e..761a45c657 100644 --- a/packages/better-auth/src/plugins/organization/adapter.ts +++ b/packages/better-auth/src/plugins/organization/adapter.ts @@ -860,11 +860,21 @@ export const getOrgAdapter = ( }, listUserInvitations: async (email: string) => { const adapter = await getCurrentAdapter(baseAdapter); - const invitations = await adapter.findMany>({ + const invitations = await adapter.findMany< + InferInvitation & { + organization: InferOrganization; + } + >({ model: "invitation", where: [{ field: "email", value: email.toLowerCase() }], + join: { + organization: true, + }, }); - return invitations; + return invitations.map(({ organization, ...inv }) => ({ + ...inv, + organizationName: organization.name, + })); }, createInvitation: async ({ invitation, diff --git a/packages/better-auth/src/plugins/organization/organization.test.ts b/packages/better-auth/src/plugins/organization/organization.test.ts index b5b3a87243..c57857225d 100644 --- a/packages/better-auth/src/plugins/organization/organization.test.ts +++ b/packages/better-auth/src/plugins/organization/organization.test.ts @@ -1118,6 +1118,7 @@ describe("organization", async (it) => { }, }); expect(userInvitations.data?.[0]!.id).toBe(invitation.data?.id); + expect(userInvitations.data?.[0]!.organizationName).toBe(orgRng); expect(userInvitations.data?.length).toBe(1); }); diff --git a/packages/better-auth/src/plugins/organization/routes/crud-invites.ts b/packages/better-auth/src/plugins/organization/routes/crud-invites.ts index b627ddf310..9b5326452c 100644 --- a/packages/better-auth/src/plugins/organization/routes/crud-invites.ts +++ b/packages/better-auth/src/plugins/organization/routes/crud-invites.ts @@ -1088,6 +1088,74 @@ export const listUserInvitations = ( .optional(), }) .optional(), + metadata: { + openapi: { + description: "List all invitations a user has received", + responses: { + "200": { + description: "Success", + content: { + "application/json": { + schema: { + type: "array", + items: { + type: "object", + properties: { + id: { + type: "string", + }, + email: { + type: "string", + }, + role: { + type: "string", + }, + organizationId: { + type: "string", + }, + organizationName: { + type: "string", + }, + inviterId: { + type: "string", + description: + "The ID of the user who created the invitation", + }, + teamId: { + type: "string", + description: + "The ID of the team associated with the invitation", + nullable: true, + }, + status: { + type: "string", + }, + expiresAt: { + type: "string", + }, + createdAt: { + type: "string", + }, + }, + required: [ + "id", + "email", + "role", + "organizationId", + "organizationName", + "inviterId", + "status", + "expiresAt", + "createdAt", + ], + }, + }, + }, + }, + }, + }, + }, + }, }, async (ctx) => { const session = await getSessionFromCtx(ctx);