diff --git a/lib/permissions/special-roles.js b/lib/permissions/special-roles.js --- a/lib/permissions/special-roles.js +++ b/lib/permissions/special-roles.js @@ -1,9 +1,18 @@ // @flow +import type { TRefinement } from 'tcomb'; + +import { values } from '../utils/objects.js'; +import { tNumEnum } from '../utils/validation-utils.js'; + export const specialRoles = Object.freeze({ DEFAULT_ROLE: 1, ADMIN_ROLE: 2, }); +export type SpecialRole = $Values; +export const specialRoleValidator: TRefinement = tNumEnum( + values(specialRoles), +); export const defaultSpecialRoles = Object.freeze({ Members: specialRoles.DEFAULT_ROLE, diff --git a/lib/types/thread-types.js b/lib/types/thread-types.js --- a/lib/types/thread-types.js +++ b/lib/types/thread-types.js @@ -35,6 +35,10 @@ import { type ThreadType, threadTypeValidator } from './thread-types-enum.js'; import type { ClientUpdateInfo, ServerUpdateInfo } from './update-types.js'; import type { UserInfo, UserInfos } from './user-types.js'; +import { + specialRoleValidator, + type SpecialRole, +} from '../permissions/special-roles.js'; import { type ThreadEntity, threadEntityValidator, @@ -77,6 +81,7 @@ +name: string, +permissions: ThreadRolePermissionsBlob, +isDefault: boolean, + +specialRole?: ?SpecialRole, }; export const legacyRoleInfoValidator: TInterface = tShape({ @@ -84,6 +89,7 @@ name: t.String, permissions: threadRolePermissionsBlobValidator, isDefault: t.Boolean, + specialRole: t.maybe(specialRoleValidator), }); export type RoleInfo = LegacyRoleInfo | MinimallyEncodedRoleInfo;