diff --git a/apps/website/app/utils/supabase/account.ts b/apps/website/app/utils/supabase/account.ts index b6f0fbc56..e7305f4c9 100644 --- a/apps/website/app/utils/supabase/account.ts +++ b/apps/website/app/utils/supabase/account.ts @@ -85,14 +85,10 @@ export const createGroupInvitation = async ({ .eq("member_id", userData.id) .maybeSingle(); if (membershipReq.data?.admin !== true) return null; - /* eslint-disable @typescript-eslint/naming-convention */ const { data, error } = await client.rpc("create_secret_token", { - /* eslint-disable @typescript-eslint/naming-convention */ v_payload: { groupId, type: "groupInvitation", admin }, expiry_interval: "60d", - /* eslint-enable @typescript-eslint/naming-convention */ }); - /* eslint-enable @typescript-eslint/naming-convention */ if (error || !data) return null; return data; }; @@ -114,12 +110,27 @@ export const acceptGroupInvitation = async ( export const createGroup = async ( client: DGSupabaseClient, name: string, -): Promise => { +): Promise<{ groupId: string | null; error: string | null }> => { const result = await client.functions.invoke<{ group_id: string }>( "create-group", { body: { name } }, ); - return result.data?.group_id || null; + if (result.error) { + let message = + typeof result.error === "string" + ? result.error + : (result.error as { message: string }).message; + try { + const body = (await ( + result.error as { context?: Response } + ).context?.json()) as { msg?: string } | undefined; + if (body?.msg) message = body.msg; + } catch { + // ignore parse errors + } + return { groupId: null, error: message }; + } + return { groupId: result.data?.group_id ?? null, error: null }; }; export const removeFromGroup = async ({ diff --git a/apps/website/test/integration/groupInvitation.test.ts b/apps/website/test/integration/groupInvitation.test.ts index 669942087..97c7dd773 100644 --- a/apps/website/test/integration/groupInvitation.test.ts +++ b/apps/website/test/integration/groupInvitation.test.ts @@ -93,7 +93,11 @@ describe( it("executes the full invitation flow", async () => { // Step 1: user1 creates a group - const groupId = await createGroup(client1, "vitest-invite-group"); + const { groupId, error: createError } = await createGroup( + client1, + "vitest-invite-group", + ); + expect(createError, "createGroup should not error").toBeNull(); expect(groupId, "createGroup should return a group ID").toBeTruthy(); createdGroupId = groupId; diff --git a/apps/website/test/integration/leaveGroup.test.ts b/apps/website/test/integration/leaveGroup.test.ts index bb7880ee8..109e02dd0 100644 --- a/apps/website/test/integration/leaveGroup.test.ts +++ b/apps/website/test/integration/leaveGroup.test.ts @@ -103,7 +103,11 @@ describe("leave group flow", { tags: ["database"] }, () => { it("lists group members", async () => { // Step 1: user1 creates a group - const groupId = await createGroup(client1, "vitest-invite-group"); + const { groupId, error: createError } = await createGroup( + client1, + "vitest-invite-group", + ); + assert(createError === null, createError!); assert(groupId !== null, "createGroup should return a group ID"); createdGroupId = groupId; diff --git a/apps/website/test/integration/listGroupMembers.test.ts b/apps/website/test/integration/listGroupMembers.test.ts index e16717d6d..4576422a7 100644 --- a/apps/website/test/integration/listGroupMembers.test.ts +++ b/apps/website/test/integration/listGroupMembers.test.ts @@ -105,7 +105,11 @@ describe("list group members flow", { tags: ["database"] }, () => { it("lists group members", async () => { // Step 1: user1 creates a group - const groupId = await createGroup(client1, "vitest-invite-group"); + const { groupId, error: createError } = await createGroup( + client1, + "vitest-invite-group", + ); + assert(createError === null, createError!); assert(groupId !== null, "createGroup should return a group ID"); createdGroupId = groupId; diff --git a/apps/website/test/integration/listMyGroups.test.ts b/apps/website/test/integration/listMyGroups.test.ts index 8f4dbd33c..6149da568 100644 --- a/apps/website/test/integration/listMyGroups.test.ts +++ b/apps/website/test/integration/listMyGroups.test.ts @@ -103,7 +103,11 @@ describe("list group members flow", { tags: ["database"] }, () => { it("lists group members", async () => { // Step 1: user1 creates a group - const groupId = await createGroup(client1, "vitest-invite-group"); + const { groupId, error: createError } = await createGroup( + client1, + "vitest-invite-group", + ); + assert(createError === null, createError!); assert(groupId !== null, "createGroup should return a group ID"); createdGroupId = groupId;