Page MenuHomePhabricator

D10105.id36720.diff
No OneTemporary

D10105.id36720.diff

diff --git a/lib/permissions/minimally-encoded-thread-permissions-validators.js b/lib/permissions/minimally-encoded-thread-permissions-validators.js
--- a/lib/permissions/minimally-encoded-thread-permissions-validators.js
+++ b/lib/permissions/minimally-encoded-thread-permissions-validators.js
@@ -6,6 +6,7 @@
tHexEncodedPermissionsBitmask,
tHexEncodedRolePermission,
} from './minimally-encoded-thread-permissions.js';
+import { specialRoleValidator } from './special-roles.js';
import { clientAvatarValidator } from '../types/avatar-types.js';
import type {
MemberInfo,
@@ -30,6 +31,7 @@
...legacyRoleInfoValidator.meta.props,
minimallyEncoded: tBool(true),
permissions: t.list(tHexEncodedRolePermission),
+ specialRole: t.maybe(specialRoleValidator),
});
const threadCurrentUserInfoValidator: TInterface<ThreadCurrentUserInfo> =
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,10 +1,20 @@
// @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<typeof specialRoles>;
+export const specialRoleValidator: TRefinement<number> = tNumEnum(
+ values(specialRoles),
+);
+
export const defaultSpecialRoles = Object.freeze({
Members: specialRoles.DEFAULT_ROLE,
Admins: specialRoles.ADMIN_ROLE,
diff --git a/lib/types/minimally-encoded-thread-permissions-types.js b/lib/types/minimally-encoded-thread-permissions-types.js
--- a/lib/types/minimally-encoded-thread-permissions-types.js
+++ b/lib/types/minimally-encoded-thread-permissions-types.js
@@ -17,12 +17,14 @@
threadPermissionsFromBitmaskHex,
threadRolePermissionsBlobToBitmaskArray,
} from '../permissions/minimally-encoded-thread-permissions.js';
+import type { SpecialRole } from '../permissions/special-roles.js';
import type { ThreadEntity } from '../utils/entity-text.js';
export type RoleInfo = $ReadOnly<{
...LegacyRoleInfo,
+minimallyEncoded: true,
+permissions: $ReadOnlyArray<string>,
+ +specialRole?: ?SpecialRole,
}>;
const minimallyEncodeRoleInfo = (roleInfo: LegacyRoleInfo): RoleInfo => {
@@ -40,7 +42,7 @@
const decodeMinimallyEncodedRoleInfo = (
minimallyEncodedRoleInfo: RoleInfo,
): LegacyRoleInfo => {
- const { minimallyEncoded, ...rest } = minimallyEncodedRoleInfo;
+ const { minimallyEncoded, specialRole, ...rest } = minimallyEncodedRoleInfo;
return {
...rest,
permissions: decodeThreadRolePermissionsBitmaskArray(

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 13, 4:55 AM (35 m, 53 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3325328
Default Alt Text
D10105.id36720.diff (2 KB)

Event Timeline