diff --git a/packages/shared/src/validators/access.ts b/packages/shared/src/validators/access.ts index 8aaed6babcb..8cd8f5c3a06 100644 --- a/packages/shared/src/validators/access.ts +++ b/packages/shared/src/validators/access.ts @@ -109,7 +109,7 @@ export type UpdateCompanyMember = z.infer; export const updateCompanyMemberWithPermissionsSchema = z.object({ membershipRole: z.enum(HUMAN_COMPANY_MEMBERSHIP_ROLES).optional().nullable(), status: z.enum(MEMBERSHIP_STATUSES).optional(), - grants: updateMemberPermissionsSchema.shape.grants, + grants: updateMemberPermissionsSchema.shape.grants.default([]), }).refine((value) => value.membershipRole !== undefined || value.status !== undefined, { message: "membershipRole or status is required", }); diff --git a/server/src/__tests__/access-validators.test.ts b/server/src/__tests__/access-validators.test.ts index 4149440ba83..6fa63b9e8c1 100644 --- a/server/src/__tests__/access-validators.test.ts +++ b/server/src/__tests__/access-validators.test.ts @@ -1,5 +1,8 @@ import { describe, expect, it } from "vitest"; -import { updateCurrentUserProfileSchema } from "@paperclipai/shared"; +import { + updateCompanyMemberWithPermissionsSchema, + updateCurrentUserProfileSchema, +} from "@paperclipai/shared"; describe("access validators", () => { it("accepts HTTP(S) and Paperclip asset image URLs", () => { @@ -19,4 +22,12 @@ describe("access validators", () => { image: "data:image/png;base64,AAAA", }).success).toBe(false); }); + + it("defaults omitted combined member grants to an empty list", () => { + const result = updateCompanyMemberWithPermissionsSchema.parse({ + membershipRole: "operator", + }); + + expect(result.grants).toEqual([]); + }); });