Page MenuHomePhabricator

D7783.id26358.diff
No OneTemporary

D7783.id26358.diff

diff --git a/keyserver/src/bots/commbot.js b/keyserver/src/bots/commbot.js
--- a/keyserver/src/bots/commbot.js
+++ b/keyserver/src/bots/commbot.js
@@ -3,7 +3,7 @@
import invariant from 'invariant';
import bots from 'lib/facts/bots.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { createThread } from '../creators/thread-creator.js';
import { createBotViewer } from '../session/bots.js';
diff --git a/keyserver/src/creators/account-creator.js b/keyserver/src/creators/account-creator.js
--- a/keyserver/src/creators/account-creator.js
+++ b/keyserver/src/creators/account-creator.js
@@ -24,7 +24,7 @@
import type { CalendarQuery } from 'lib/types/entry-types.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
import type { SIWESocialProof } from 'lib/types/siwe-types.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { ServerError } from 'lib/utils/errors.js';
import { values } from 'lib/utils/objects.js';
import { reservedUsernamesSet } from 'lib/utils/reserved-users.js';
diff --git a/keyserver/src/creators/entry-creator.js b/keyserver/src/creators/entry-creator.js
--- a/keyserver/src/creators/entry-creator.js
+++ b/keyserver/src/creators/entry-creator.js
@@ -7,7 +7,7 @@
SaveEntryResponse,
} from 'lib/types/entry-types.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { dateFromString } from 'lib/utils/date-utils.js';
import { ServerError } from 'lib/utils/errors.js';
import { values } from 'lib/utils/objects.js';
diff --git a/keyserver/src/creators/message-creator.js b/keyserver/src/creators/message-creator.js
--- a/keyserver/src/creators/message-creator.js
+++ b/keyserver/src/creators/message-creator.js
@@ -19,7 +19,7 @@
type RawMessageInfo,
} from 'lib/types/message-types.js';
import { redisMessageTypes } from 'lib/types/redis-types.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { updateTypes } from 'lib/types/update-types.js';
import { promiseAll } from 'lib/utils/promises.js';
diff --git a/keyserver/src/creators/role-creator.js b/keyserver/src/creators/role-creator.js
--- a/keyserver/src/creators/role-creator.js
+++ b/keyserver/src/creators/role-creator.js
@@ -1,7 +1,8 @@
// @flow
import { getRolePermissionBlobs } from 'lib/permissions/thread-permissions.js';
-import type { RoleInfo, ThreadType } from 'lib/types/thread-types.js';
+import type { ThreadType } from 'lib/types/thread-types-enum.js';
+import type { RoleInfo } from 'lib/types/thread-types.js';
import createIDs from './id-creator.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/creators/thread-creator.js b/keyserver/src/creators/thread-creator.js
--- a/keyserver/src/creators/thread-creator.js
+++ b/keyserver/src/creators/thread-creator.js
@@ -13,12 +13,14 @@
import { hasMinCodeVersion } from 'lib/shared/version-utils.js';
import type { Shape } from 'lib/types/core.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import {
- type ServerNewThreadRequest,
- type NewThreadResponse,
threadTypes,
- threadPermissions,
threadTypeIsCommunityRoot,
+} from 'lib/types/thread-types-enum.js';
+import {
+ type ServerNewThreadRequest,
+ type NewThreadResponse,
} from 'lib/types/thread-types.js';
import type { UserInfos } from 'lib/types/user-types.js';
import { pushAll } from 'lib/utils/array.js';
diff --git a/keyserver/src/cron/daily-updates.js b/keyserver/src/cron/daily-updates.js
--- a/keyserver/src/cron/daily-updates.js
+++ b/keyserver/src/cron/daily-updates.js
@@ -4,7 +4,7 @@
import ashoat from 'lib/facts/ashoat.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import {
getDate,
dateString,
diff --git a/keyserver/src/database/setup-db.js b/keyserver/src/database/setup-db.js
--- a/keyserver/src/database/setup-db.js
+++ b/keyserver/src/database/setup-db.js
@@ -6,7 +6,7 @@
import { usernameMaxLength } from 'lib/shared/account-utils.js';
import { sortIDs } from 'lib/shared/relationship-utils.js';
import { undirectedStatus } from 'lib/types/relationship-types.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { createThread } from '../creators/thread-creator.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/deleters/entry-deleters.js b/keyserver/src/deleters/entry-deleters.js
--- a/keyserver/src/deleters/entry-deleters.js
+++ b/keyserver/src/deleters/entry-deleters.js
@@ -7,7 +7,7 @@
RestoreEntryResponse,
} from 'lib/types/entry-types.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { dateString } from 'lib/utils/date-utils.js';
import { ServerError } from 'lib/utils/errors.js';
import { values } from 'lib/utils/objects.js';
diff --git a/keyserver/src/deleters/thread-deleters.js b/keyserver/src/deleters/thread-deleters.js
--- a/keyserver/src/deleters/thread-deleters.js
+++ b/keyserver/src/deleters/thread-deleters.js
@@ -2,10 +2,10 @@
import { permissionLookup } from 'lib/permissions/thread-permissions.js';
import { hasMinCodeVersion } from 'lib/shared/version-utils.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import {
type ThreadDeletionRequest,
type LeaveThreadResult,
- threadPermissions,
} from 'lib/types/thread-types.js';
import { updateTypes } from 'lib/types/update-types.js';
import { ServerError } from 'lib/utils/errors.js';
diff --git a/keyserver/src/fetchers/entry-fetchers.js b/keyserver/src/fetchers/entry-fetchers.js
--- a/keyserver/src/fetchers/entry-fetchers.js
+++ b/keyserver/src/fetchers/entry-fetchers.js
@@ -17,10 +17,8 @@
} from 'lib/types/entry-types.js';
import { calendarThreadFilterTypes } from 'lib/types/filter-types.js';
import type { HistoryRevisionInfo } from 'lib/types/history-types.js';
-import {
- threadPermissions,
- type ThreadPermission,
-} from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import type { ThreadPermission } from 'lib/types/thread-permission-types.js';
import { dateString } from 'lib/utils/date-utils.js';
import { ServerError } from 'lib/utils/errors.js';
diff --git a/keyserver/src/fetchers/message-fetchers.js b/keyserver/src/fetchers/message-fetchers.js
--- a/keyserver/src/fetchers/message-fetchers.js
+++ b/keyserver/src/fetchers/message-fetchers.js
@@ -28,7 +28,7 @@
type FetchPinnedMessagesResult,
isMessageSidebarSourceReactionOrEdit,
} from 'lib/types/message-types.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { ServerError } from 'lib/utils/errors.js';
import {
diff --git a/keyserver/src/fetchers/thread-fetchers.js b/keyserver/src/fetchers/thread-fetchers.js
--- a/keyserver/src/fetchers/thread-fetchers.js
+++ b/keyserver/src/fetchers/thread-fetchers.js
@@ -11,9 +11,8 @@
import { hasMinCodeVersion } from 'lib/shared/version-utils.js';
import type { AvatarDBContent, ClientAvatar } from 'lib/types/avatar-types.js';
import type { RawMessageInfo, MessageInfo } from 'lib/types/message-types.js';
+import { threadTypes, type ThreadType } from 'lib/types/thread-types-enum.js';
import {
- threadTypes,
- type ThreadType,
type RawThreadInfo,
type ServerThreadInfo,
} from 'lib/types/thread-types.js';
diff --git a/keyserver/src/fetchers/thread-permission-fetchers.js b/keyserver/src/fetchers/thread-permission-fetchers.js
--- a/keyserver/src/fetchers/thread-permission-fetchers.js
+++ b/keyserver/src/fetchers/thread-permission-fetchers.js
@@ -12,11 +12,11 @@
} from 'lib/shared/thread-utils.js';
import { userRelationshipStatus } from 'lib/types/relationship-types.js';
import type {
- ThreadType,
ThreadPermission,
ThreadPermissionsBlob,
ThreadRolePermissionsBlob,
-} from 'lib/types/thread-types.js';
+} from 'lib/types/thread-permission-types.js';
+import type { ThreadType } from 'lib/types/thread-types-enum.js';
import { fetchThreadInfos } from './thread-fetchers.js';
import { fetchKnownUserInfos } from './user-fetchers.js';
diff --git a/keyserver/src/fetchers/upload-fetchers.js b/keyserver/src/fetchers/upload-fetchers.js
--- a/keyserver/src/fetchers/upload-fetchers.js
+++ b/keyserver/src/fetchers/upload-fetchers.js
@@ -7,7 +7,7 @@
import { messageTypes } from 'lib/types/message-types-enum.js';
import type { MediaMessageServerDBContent } from 'lib/types/messages/media.js';
import { getUploadIDsFromMediaMessageServerDBContents } from 'lib/types/messages/media.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import type {
ThreadFetchMediaResult,
ThreadFetchMediaRequest,
diff --git a/keyserver/src/fetchers/user-fetchers.js b/keyserver/src/fetchers/user-fetchers.js
--- a/keyserver/src/fetchers/user-fetchers.js
+++ b/keyserver/src/fetchers/user-fetchers.js
@@ -9,10 +9,8 @@
directedStatus,
userRelationshipStatus,
} from 'lib/types/relationship-types.js';
-import {
- communityThreadTypes,
- threadPermissions,
-} from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { communityThreadTypes } from 'lib/types/thread-types-enum.js';
import type {
UserInfos,
CurrentUserInfo,
diff --git a/keyserver/src/push/rescind.js b/keyserver/src/push/rescind.js
--- a/keyserver/src/push/rescind.js
+++ b/keyserver/src/push/rescind.js
@@ -4,7 +4,7 @@
import invariant from 'invariant';
import { threadSubscriptions } from 'lib/types/subscription-types.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { promiseAll } from 'lib/utils/promises.js';
import { getAPNsNotificationTopic } from './providers.js';
diff --git a/keyserver/src/push/utils.js b/keyserver/src/push/utils.js
--- a/keyserver/src/push/utils.js
+++ b/keyserver/src/push/utils.js
@@ -14,7 +14,7 @@
WNSNotification,
} from 'lib/types/notif-types.js';
import { threadSubscriptions } from 'lib/types/subscription-types.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import {
getAPNPushProfileForCodeVersion,
diff --git a/keyserver/src/responders/message-responders.js b/keyserver/src/responders/message-responders.js
--- a/keyserver/src/responders/message-responders.js
+++ b/keyserver/src/responders/message-responders.js
@@ -29,7 +29,7 @@
import type { EditMessageData } from 'lib/types/messages/edit.js';
import type { ReactionMessageData } from 'lib/types/messages/reaction.js';
import type { TextMessageData } from 'lib/types/messages/text.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { userInfosValidator } from 'lib/types/user-types.js';
import { ServerError } from 'lib/utils/errors.js';
import { values } from 'lib/utils/objects.js';
diff --git a/keyserver/src/responders/thread-responders.js b/keyserver/src/responders/thread-responders.js
--- a/keyserver/src/responders/thread-responders.js
+++ b/keyserver/src/responders/thread-responders.js
@@ -9,6 +9,7 @@
rawMessageInfoValidator,
messageTruncationStatusesValidator,
} from 'lib/types/message-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import {
type ThreadDeletionRequest,
type RoleChangeRequest,
@@ -25,7 +26,6 @@
type ThreadFetchMediaRequest,
type ToggleMessagePinRequest,
type ToggleMessagePinResult,
- threadTypes,
rawThreadInfoValidator,
} from 'lib/types/thread-types.js';
import { serverUpdateInfoValidator } from 'lib/types/update-types.js';
diff --git a/keyserver/src/responders/thread-responders.test.js b/keyserver/src/responders/thread-responders.test.js
--- a/keyserver/src/responders/thread-responders.test.js
+++ b/keyserver/src/responders/thread-responders.test.js
@@ -1,6 +1,6 @@
// @flow
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { newThreadRequestInputValidator } from './thread-responders.js';
diff --git a/keyserver/src/responders/website-responders.js b/keyserver/src/responders/website-responders.js
--- a/keyserver/src/responders/website-responders.js
+++ b/keyserver/src/responders/website-responders.js
@@ -27,7 +27,8 @@
import { defaultNumberPerThread } from 'lib/types/message-types.js';
import { defaultEnabledReports } from 'lib/types/report-types.js';
import { defaultConnectionInfo } from 'lib/types/socket-types.js';
-import { threadPermissions, threadTypes } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { currentDateInTimeZone } from 'lib/utils/date-utils.js';
import { ServerError } from 'lib/utils/errors.js';
import { promiseAll } from 'lib/utils/promises.js';
diff --git a/keyserver/src/scripts/add-edit-thread-detailed-permissions.js b/keyserver/src/scripts/add-edit-thread-detailed-permissions.js
--- a/keyserver/src/scripts/add-edit-thread-detailed-permissions.js
+++ b/keyserver/src/scripts/add-edit-thread-detailed-permissions.js
@@ -1,7 +1,7 @@
// @flow
import bots from 'lib/facts/bots.js';
-import { assertThreadType } from 'lib/types/thread-types.js';
+import { assertThreadType } from 'lib/types/thread-types-enum.js';
import { main } from './utils.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/scripts/add-leave-thread-permissions.js b/keyserver/src/scripts/add-leave-thread-permissions.js
--- a/keyserver/src/scripts/add-leave-thread-permissions.js
+++ b/keyserver/src/scripts/add-leave-thread-permissions.js
@@ -1,6 +1,7 @@
// @flow
-import { threadPermissions, threadTypes } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { endScript } from './utils.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/scripts/create-community.js b/keyserver/src/scripts/create-community.js
--- a/keyserver/src/scripts/create-community.js
+++ b/keyserver/src/scripts/create-community.js
@@ -1,7 +1,7 @@
// @flow
import ashoat from 'lib/facts/ashoat.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { main } from './utils.js';
import { createThread } from '../creators/thread-creator.js';
diff --git a/keyserver/src/scripts/create-sidebar-permissions.js b/keyserver/src/scripts/create-sidebar-permissions.js
--- a/keyserver/src/scripts/create-sidebar-permissions.js
+++ b/keyserver/src/scripts/create-sidebar-permissions.js
@@ -1,9 +1,9 @@
// @flow
import {
- threadPermissions,
threadPermissionPropagationPrefixes,
-} from 'lib/types/thread-types.js';
+ threadPermissions,
+} from 'lib/types/thread-permission-types.js';
import { endScript } from './utils.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/scripts/fix-new-thread-types.js b/keyserver/src/scripts/fix-new-thread-types.js
--- a/keyserver/src/scripts/fix-new-thread-types.js
+++ b/keyserver/src/scripts/fix-new-thread-types.js
@@ -1,7 +1,7 @@
// @flow
import bots from 'lib/facts/bots.js';
-import { threadTypes, assertThreadType } from 'lib/types/thread-types.js';
+import { threadTypes, assertThreadType } from 'lib/types/thread-types-enum.js';
import { main } from './utils.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/scripts/make-channel-private.js b/keyserver/src/scripts/make-channel-private.js
--- a/keyserver/src/scripts/make-channel-private.js
+++ b/keyserver/src/scripts/make-channel-private.js
@@ -1,7 +1,7 @@
// @flow
import ashoat from 'lib/facts/ashoat.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { main } from './utils.js';
import { createScriptViewer } from '../session/scripts.js';
diff --git a/keyserver/src/scripts/move-threads.js b/keyserver/src/scripts/move-threads.js
--- a/keyserver/src/scripts/move-threads.js
+++ b/keyserver/src/scripts/move-threads.js
@@ -1,7 +1,7 @@
// @flow
import ashoat from 'lib/facts/ashoat.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { main } from './utils.js';
import { createScriptViewer } from '../session/scripts.js';
diff --git a/keyserver/src/scripts/rescind-notifs.js b/keyserver/src/scripts/rescind-notifs.js
--- a/keyserver/src/scripts/rescind-notifs.js
+++ b/keyserver/src/scripts/rescind-notifs.js
@@ -1,6 +1,6 @@
// @flow
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { main } from './utils.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/scripts/set-last-read-messages.js b/keyserver/src/scripts/set-last-read-messages.js
--- a/keyserver/src/scripts/set-last-read-messages.js
+++ b/keyserver/src/scripts/set-last-read-messages.js
@@ -1,7 +1,7 @@
// @flow
import { messageTypes } from 'lib/types/message-types-enum.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { endScript } from './utils.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/scripts/sidebar-know-of-migration.js b/keyserver/src/scripts/sidebar-know-of-migration.js
--- a/keyserver/src/scripts/sidebar-know-of-migration.js
+++ b/keyserver/src/scripts/sidebar-know-of-migration.js
@@ -1,7 +1,7 @@
// @flow
import bots from 'lib/facts/bots.js';
-import { threadTypes, type ThreadType } from 'lib/types/thread-types.js';
+import { threadTypes, type ThreadType } from 'lib/types/thread-types-enum.js';
import { main } from './utils.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/scripts/soft-launch-migration.js b/keyserver/src/scripts/soft-launch-migration.js
--- a/keyserver/src/scripts/soft-launch-migration.js
+++ b/keyserver/src/scripts/soft-launch-migration.js
@@ -7,7 +7,7 @@
import genesis from 'lib/facts/genesis.js';
import testers from 'lib/facts/testers.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
-import { threadTypes, type ThreadType } from 'lib/types/thread-types.js';
+import { threadTypes, type ThreadType } from 'lib/types/thread-types-enum.js';
import { main } from './utils.js';
import createMessages from '../creators/message-creator.js';
diff --git a/keyserver/src/updaters/activity-updaters.js b/keyserver/src/updaters/activity-updaters.js
--- a/keyserver/src/updaters/activity-updaters.js
+++ b/keyserver/src/updaters/activity-updaters.js
@@ -12,7 +12,7 @@
SetThreadUnreadStatusResult,
} from 'lib/types/activity-types.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { updateTypes } from 'lib/types/update-types.js';
import { ServerError } from 'lib/utils/errors.js';
diff --git a/keyserver/src/updaters/entry-updaters.js b/keyserver/src/updaters/entry-updaters.js
--- a/keyserver/src/updaters/entry-updaters.js
+++ b/keyserver/src/updaters/entry-updaters.js
@@ -15,7 +15,7 @@
defaultCalendarQuery,
} from 'lib/types/entry-types.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import {
updateTypes,
type ServerCreateUpdatesResponse,
diff --git a/keyserver/src/updaters/relationship-updaters.js b/keyserver/src/updaters/relationship-updaters.js
--- a/keyserver/src/updaters/relationship-updaters.js
+++ b/keyserver/src/updaters/relationship-updaters.js
@@ -12,7 +12,7 @@
undirectedStatus,
directedStatus,
} from 'lib/types/relationship-types.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { updateTypes, type UpdateData } from 'lib/types/update-types.js';
import { cartesianProduct } from 'lib/utils/array.js';
import { ServerError } from 'lib/utils/errors.js';
diff --git a/keyserver/src/updaters/role-updaters.js b/keyserver/src/updaters/role-updaters.js
--- a/keyserver/src/updaters/role-updaters.js
+++ b/keyserver/src/updaters/role-updaters.js
@@ -4,7 +4,7 @@
import _isEqual from 'lodash/fp/isEqual.js';
import { getRolePermissionBlobs } from 'lib/permissions/thread-permissions.js';
-import type { ThreadType } from 'lib/types/thread-types.js';
+import type { ThreadType } from 'lib/types/thread-types-enum.js';
import createIDs from '../creators/id-creator.js';
import { dbQuery, SQL } from '../database/database.js';
diff --git a/keyserver/src/updaters/thread-permission-updaters.js b/keyserver/src/updaters/thread-permission-updaters.js
--- a/keyserver/src/updaters/thread-permission-updaters.js
+++ b/keyserver/src/updaters/thread-permission-updaters.js
@@ -11,12 +11,14 @@
getRoleForPermissions,
} from 'lib/permissions/thread-permissions.js';
import type { CalendarQuery } from 'lib/types/entry-types.js';
+import type {
+ ThreadPermissionsBlob,
+ ThreadRolePermissionsBlob,
+} from 'lib/types/thread-permission-types.js';
import {
- type ThreadPermissionsBlob,
- type ThreadRolePermissionsBlob,
type ThreadType,
assertThreadType,
-} from 'lib/types/thread-types.js';
+} from 'lib/types/thread-types-enum.js';
import {
updateTypes,
type ServerUpdateInfo,
diff --git a/keyserver/src/updaters/thread-updaters.js b/keyserver/src/updaters/thread-updaters.js
--- a/keyserver/src/updaters/thread-updaters.js
+++ b/keyserver/src/updaters/thread-updaters.js
@@ -14,6 +14,8 @@
import type { Shape } from 'lib/types/core.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
import { defaultNumberPerThread } from 'lib/types/message-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import {
type RoleChangeRequest,
type ChangeThreadSettingsResult,
@@ -25,8 +27,6 @@
type ThreadJoinResult,
type ToggleMessagePinRequest,
type ToggleMessagePinResult,
- threadPermissions,
- threadTypes,
} from 'lib/types/thread-types.js';
import { updateTypes } from 'lib/types/update-types.js';
import { ServerError } from 'lib/utils/errors.js';
diff --git a/lib/flow-typed/npm/tcomb_v3.x.x.js b/lib/flow-typed/npm/tcomb_v3.x.x.js
--- a/lib/flow-typed/npm/tcomb_v3.x.x.js
+++ b/lib/flow-typed/npm/tcomb_v3.x.x.js
@@ -112,11 +112,11 @@
+Object: TIrreducible<Object>,
maybe<T>(type: TType<T>, name?: string): TMaybe<void | T>,
list<T>(type: TType<T>, name?: string): TList<Array<T>>,
- dict<T>(
- domain: TType<string>,
+ dict<S: string, T>(
+ domain: TType<S>,
codomain: TType<T>,
name?: string,
- ): TDict<{ [key: string]: T }>,
+ ): TDict<{ [key: S]: T }>,
union<+T>(types: $ReadOnlyArray<TType<T>>, name?: string): TUnion<T>,
+enums: {
of(enums: $ReadOnlyArray<string>, name?: string): TEnums,
diff --git a/lib/hooks/promote-sidebar.react.js b/lib/hooks/promote-sidebar.react.js
--- a/lib/hooks/promote-sidebar.react.js
+++ b/lib/hooks/promote-sidebar.react.js
@@ -13,11 +13,9 @@
threadIsSidebar,
} from '../shared/thread-utils.js';
import type { LoadingStatus } from '../types/loading-types.js';
-import {
- threadTypes,
- type ThreadInfo,
- threadPermissions,
-} from '../types/thread-types.js';
+import { threadPermissions } from '../types/thread-permission-types.js';
+import { threadTypes } from '../types/thread-types-enum.js';
+import { type ThreadInfo } from '../types/thread-types.js';
import {
useServerCall,
useDispatchActionPromise,
diff --git a/lib/permissions/prefixes.js b/lib/permissions/prefixes.js
--- a/lib/permissions/prefixes.js
+++ b/lib/permissions/prefixes.js
@@ -1,15 +1,16 @@
// @flow
+import type {
+ ThreadPermission,
+ ThreadPermissionFilterPrefix,
+ ThreadPermissionPropagationPrefix,
+} from '../types/thread-permission-types.js';
import {
- type ThreadPermission,
assertThreadPermissions,
- threadPermissionPropagationPrefixes,
- type ThreadPermissionPropagationPrefix,
threadPermissionFilterPrefixes,
- type ThreadPermissionFilterPrefix,
- threadTypes,
- type ThreadType,
-} from '../types/thread-types.js';
+ threadPermissionPropagationPrefixes,
+} from '../types/thread-permission-types.js';
+import { threadTypes, type ThreadType } from '../types/thread-types-enum.js';
type ParsedThreadPermissionString = {
+permission: ThreadPermission,
diff --git a/lib/permissions/thread-permissions.js b/lib/permissions/thread-permissions.js
--- a/lib/permissions/thread-permissions.js
+++ b/lib/permissions/thread-permissions.js
@@ -5,17 +5,18 @@
includeThreadPermissionForThreadType,
} from './prefixes.js';
import {
- type ThreadPermissionsBlob,
- type ThreadType,
- type ThreadPermission,
- type ThreadRolePermissionsBlob,
- type ThreadPermissionInfo,
- type ThreadPermissionsInfo,
- threadPermissions,
- threadPermissionPropagationPrefixes,
threadPermissionFilterPrefixes,
- threadTypes,
-} from '../types/thread-types.js';
+ threadPermissionPropagationPrefixes,
+ threadPermissions,
+} from '../types/thread-permission-types.js';
+import type {
+ ThreadPermission,
+ ThreadPermissionInfo,
+ ThreadPermissionsBlob,
+ ThreadPermissionsInfo,
+ ThreadRolePermissionsBlob,
+} from '../types/thread-permission-types.js';
+import { type ThreadType, threadTypes } from '../types/thread-types-enum.js';
function permissionLookup(
permissions: ?ThreadPermissionsBlob | ?ThreadPermissionsInfo,
diff --git a/lib/reducers/message-reducer.js b/lib/reducers/message-reducer.js
--- a/lib/reducers/message-reducer.js
+++ b/lib/reducers/message-reducer.js
@@ -90,10 +90,8 @@
fullStateSyncActionType,
incrementalStateSyncActionType,
} from '../types/socket-types.js';
-import {
- type RawThreadInfo,
- threadPermissions,
-} from '../types/thread-types.js';
+import { threadPermissions } from '../types/thread-permission-types.js';
+import { type RawThreadInfo } from '../types/thread-types.js';
import {
updateTypes,
type ClientUpdateInfo,
diff --git a/lib/reducers/message-reducer.test.js b/lib/reducers/message-reducer.test.js
--- a/lib/reducers/message-reducer.test.js
+++ b/lib/reducers/message-reducer.test.js
@@ -6,7 +6,7 @@
import { createPendingThread } from '../shared/thread-utils.js';
import { messageTypes } from '../types/message-types-enum.js';
import type { MessageStore } from '../types/message-types.js';
-import { threadTypes } from '../types/thread-types.js';
+import { threadTypes } from '../types/thread-types-enum.js';
const messageStoreBeforeMediaUpdate: MessageStore = {
messages: {
diff --git a/lib/selectors/chat-selectors.js b/lib/selectors/chat-selectors.js
--- a/lib/selectors/chat-selectors.js
+++ b/lib/selectors/chat-selectors.js
@@ -37,13 +37,13 @@
isComposableMessageType,
} from '../types/message-types.js';
import type { BaseAppState } from '../types/redux-types.js';
+import { threadTypes } from '../types/thread-types-enum.js';
import {
type ThreadInfo,
type RawThreadInfo,
type SidebarInfo,
maxReadSidebars,
maxUnreadSidebars,
- threadTypes,
} from '../types/thread-types.js';
import type {
UserInfo,
diff --git a/lib/selectors/thread-selectors.js b/lib/selectors/thread-selectors.js
--- a/lib/selectors/thread-selectors.js
+++ b/lib/selectors/thread-selectors.js
@@ -39,14 +39,16 @@
import type { EntryInfo } from '../types/entry-types.js';
import type { MessageStore, RawMessageInfo } from '../types/message-types.js';
import type { BaseAppState } from '../types/redux-types.js';
+import { threadPermissions } from '../types/thread-permission-types.js';
+import {
+ threadTypes,
+ threadTypeIsCommunityRoot,
+} from '../types/thread-types-enum.js';
import {
type ThreadInfo,
type RawThreadInfo,
type RelativeMemberInfo,
- threadPermissions,
- threadTypes,
type SidebarInfo,
- threadTypeIsCommunityRoot,
} from '../types/thread-types.js';
import { dateString, dateFromString } from '../utils/date-utils.js';
import { values } from '../utils/objects.js';
diff --git a/lib/selectors/user-selectors.js b/lib/selectors/user-selectors.js
--- a/lib/selectors/user-selectors.js
+++ b/lib/selectors/user-selectors.js
@@ -15,10 +15,10 @@
import type { ClientEmojiAvatar } from '../types/avatar-types';
import type { BaseAppState } from '../types/redux-types.js';
import { userRelationshipStatus } from '../types/relationship-types.js';
+import { threadTypes } from '../types/thread-types-enum.js';
import {
type RawThreadInfo,
type RelativeMemberInfo,
- threadTypes,
} from '../types/thread-types.js';
import type {
UserInfos,
diff --git a/lib/shared/avatar-utils.js b/lib/shared/avatar-utils.js
--- a/lib/shared/avatar-utils.js
+++ b/lib/shared/avatar-utils.js
@@ -15,11 +15,8 @@
ClientAvatar,
ResolvedClientAvatar,
} from '../types/avatar-types.js';
-import {
- type RawThreadInfo,
- type ThreadInfo,
- threadTypes,
-} from '../types/thread-types.js';
+import { threadTypes } from '../types/thread-types-enum.js';
+import { type RawThreadInfo, type ThreadInfo } from '../types/thread-types.js';
import type { UserInfos, UserInfo } from '../types/user-types.js';
import { useSelector } from '../utils/redux-utils.js';
diff --git a/lib/shared/edit-messages-utils.js b/lib/shared/edit-messages-utils.js
--- a/lib/shared/edit-messages-utils.js
+++ b/lib/shared/edit-messages-utils.js
@@ -14,7 +14,8 @@
ComposableMessageInfo,
} from '../types/message-types';
import { messageTypes } from '../types/message-types-enum.js';
-import { threadPermissions, type ThreadInfo } from '../types/thread-types.js';
+import { threadPermissions } from '../types/thread-permission-types.js';
+import { type ThreadInfo } from '../types/thread-types.js';
import {
useDispatchActionPromise,
useServerCall,
diff --git a/lib/shared/mention-utils.js b/lib/shared/mention-utils.js
--- a/lib/shared/mention-utils.js
+++ b/lib/shared/mention-utils.js
@@ -4,8 +4,8 @@
import SearchIndex from './search-index.js';
import { threadOtherMembers } from './thread-utils.js';
import { stringForUserExplicit } from './user-utils.js';
+import { threadTypes } from '../types/thread-types-enum.js';
import {
- threadTypes,
type ThreadInfo,
type RelativeMemberInfo,
} from '../types/thread-types.js';
diff --git a/lib/shared/messages/change-settings-message-spec.js b/lib/shared/messages/change-settings-message-spec.js
--- a/lib/shared/messages/change-settings-message-spec.js
+++ b/lib/shared/messages/change-settings-message-spec.js
@@ -20,7 +20,7 @@
rawChangeSettingsMessageInfoValidator,
} from '../../types/messages/change-settings.js';
import type { NotifTexts } from '../../types/notif-types.js';
-import { assertThreadType } from '../../types/thread-types.js';
+import { assertThreadType } from '../../types/thread-types-enum.js';
import type { ThreadInfo } from '../../types/thread-types.js';
import type { RelativeUserInfo } from '../../types/user-types.js';
import { ET, type EntityText } from '../../utils/entity-text.js';
diff --git a/lib/shared/messages/create-sub-thread-message-spec.js b/lib/shared/messages/create-sub-thread-message-spec.js
--- a/lib/shared/messages/create-sub-thread-message-spec.js
+++ b/lib/shared/messages/create-sub-thread-message-spec.js
@@ -22,7 +22,8 @@
rawCreateSubthreadMessageInfoValidator,
} from '../../types/messages/create-subthread.js';
import type { NotifTexts } from '../../types/notif-types.js';
-import { threadPermissions, threadTypes } from '../../types/thread-types.js';
+import { threadPermissions } from '../../types/thread-permission-types.js';
+import { threadTypes } from '../../types/thread-types-enum.js';
import type { ThreadInfo } from '../../types/thread-types.js';
import type { RelativeUserInfo } from '../../types/user-types.js';
import { ET, type EntityText } from '../../utils/entity-text.js';
diff --git a/lib/shared/messages/text-message-spec.js b/lib/shared/messages/text-message-spec.js
--- a/lib/shared/messages/text-message-spec.js
+++ b/lib/shared/messages/text-message-spec.js
@@ -26,7 +26,7 @@
rawTextMessageInfoValidator,
} from '../../types/messages/text.js';
import type { NotifTexts } from '../../types/notif-types.js';
-import { threadTypes } from '../../types/thread-types.js';
+import { threadTypes } from '../../types/thread-types-enum.js';
import type { ThreadInfo } from '../../types/thread-types.js';
import type { RelativeUserInfo } from '../../types/user-types.js';
import {
diff --git a/lib/shared/notif-utils.js b/lib/shared/notif-utils.js
--- a/lib/shared/notif-utils.js
+++ b/lib/shared/notif-utils.js
@@ -18,11 +18,8 @@
import type { CreateSidebarMessageInfo } from '../types/messages/create-sidebar.js';
import type { TextMessageInfo } from '../types/messages/text.js';
import type { NotifTexts, ResolvedNotifTexts } from '../types/notif-types.js';
-import {
- type ThreadInfo,
- type ThreadType,
- threadTypes,
-} from '../types/thread-types.js';
+import { type ThreadType, threadTypes } from '../types/thread-types-enum.js';
+import { type ThreadInfo } from '../types/thread-types.js';
import type { RelativeUserInfo, UserInfo } from '../types/user-types.js';
import { prettyDate } from '../utils/date-utils.js';
import type { GetENSNames } from '../utils/ens-helpers.js';
diff --git a/lib/shared/reaction-utils.js b/lib/shared/reaction-utils.js
--- a/lib/shared/reaction-utils.js
+++ b/lib/shared/reaction-utils.js
@@ -12,7 +12,8 @@
RobotextMessageInfo,
ComposableMessageInfo,
} from '../types/message-types.js';
-import { threadPermissions, type ThreadInfo } from '../types/thread-types.js';
+import { threadPermissions } from '../types/thread-permission-types.js';
+import { type ThreadInfo } from '../types/thread-types.js';
import { useSelector } from '../utils/redux-utils.js';
function stringForReactionList(reactions: ReactionInfo): string {
diff --git a/lib/shared/search-utils.js b/lib/shared/search-utils.js
--- a/lib/shared/search-utils.js
+++ b/lib/shared/search-utils.js
@@ -8,12 +8,9 @@
} from './thread-utils.js';
import genesis from '../facts/genesis.js';
import { userRelationshipStatus } from '../types/relationship-types.js';
-import {
- type ThreadInfo,
- type ThreadType,
- threadTypes,
- threadPermissions,
-} from '../types/thread-types.js';
+import { threadPermissions } from '../types/thread-permission-types.js';
+import { type ThreadType, threadTypes } from '../types/thread-types-enum.js';
+import { type ThreadInfo } from '../types/thread-types.js';
import type { AccountUserInfo, UserListItem } from '../types/user-types.js';
const notFriendNotice = 'not friend';
diff --git a/lib/shared/thread-utils.js b/lib/shared/thread-utils.js
--- a/lib/shared/thread-utils.js
+++ b/lib/shared/thread-utils.js
@@ -51,26 +51,30 @@
type ComposableMessageInfo,
} from '../types/message-types.js';
import { userRelationshipStatus } from '../types/relationship-types.js';
+import {
+ threadPermissionPropagationPrefixes,
+ threadPermissions,
+ type ThreadPermission,
+ type ThreadPermissionsInfo,
+} from '../types/thread-permission-types.js';
+import {
+ type ThreadType,
+ threadTypes,
+ threadTypeIsCommunityRoot,
+ assertThreadType,
+} from '../types/thread-types-enum.js';
import {
type RawThreadInfo,
type ThreadInfo,
- type ThreadPermission,
type MemberInfo,
type ServerThreadInfo,
type RelativeMemberInfo,
type ThreadCurrentUserInfo,
type RoleInfo,
type ServerMemberInfo,
- type ThreadPermissionsInfo,
- type ThreadType,
type ClientNewThreadRequest,
type NewThreadResult,
type ChangeThreadSettingsPayload,
- threadTypes,
- threadPermissions,
- threadTypeIsCommunityRoot,
- assertThreadType,
- threadPermissionPropagationPrefixes,
} from '../types/thread-types.js';
import { type ClientUpdateInfo, updateTypes } from '../types/update-types.js';
import type {
diff --git a/lib/shared/thread-utils.test.js b/lib/shared/thread-utils.test.js
--- a/lib/shared/thread-utils.test.js
+++ b/lib/shared/thread-utils.test.js
@@ -1,7 +1,7 @@
// @flow
import { parsePendingThreadID } from './thread-utils.js';
-import { threadTypes } from '../types/thread-types.js';
+import { threadTypes } from '../types/thread-types-enum.js';
describe('parsePendingThreadID(pendingThreadID: string)', () => {
it('should return correct data for real pending sidebar ID', () => {
diff --git a/lib/types/messages/create-thread.js b/lib/types/messages/create-thread.js
--- a/lib/types/messages/create-thread.js
+++ b/lib/types/messages/create-thread.js
@@ -10,11 +10,8 @@
tNumEnum,
} from '../../utils/validation-utils.js';
import { messageTypes } from '../message-types-enum.js';
-import {
- threadTypes,
- type ThreadInfo,
- type ThreadType,
-} from '../thread-types.js';
+import { threadTypes, type ThreadType } from '../thread-types-enum.js';
+import { type ThreadInfo } from '../thread-types.js';
import type { RelativeUserInfo } from '../user-types.js';
export type CreateThreadMessageData = {
diff --git a/lib/types/thread-permission-types.js b/lib/types/thread-permission-types.js
new file mode 100644
--- /dev/null
+++ b/lib/types/thread-permission-types.js
@@ -0,0 +1,101 @@
+// @flow
+import invariant from 'invariant';
+import t, { type TDict } from 'tcomb';
+
+import { values } from '../utils/objects.js';
+import { tBool, tShape } from '../utils/validation-utils.js';
+
+export const threadPermissions = Object.freeze({
+ KNOW_OF: 'know_of',
+ MEMBERSHIP_DEPRECATED: 'membership',
+ VISIBLE: 'visible',
+ VOICED: 'voiced',
+ EDIT_ENTRIES: 'edit_entries',
+ EDIT_THREAD_NAME: 'edit_thread',
+ EDIT_THREAD_DESCRIPTION: 'edit_thread_description',
+ EDIT_THREAD_COLOR: 'edit_thread_color',
+ DELETE_THREAD: 'delete_thread',
+ CREATE_SUBCHANNELS: 'create_subthreads',
+ CREATE_SIDEBARS: 'create_sidebars',
+ JOIN_THREAD: 'join_thread',
+ EDIT_PERMISSIONS: 'edit_permissions',
+ ADD_MEMBERS: 'add_members',
+ REMOVE_MEMBERS: 'remove_members',
+ CHANGE_ROLE: 'change_role',
+ LEAVE_THREAD: 'leave_thread',
+ REACT_TO_MESSAGE: 'react_to_message',
+ EDIT_MESSAGE: 'edit_message',
+ EDIT_THREAD_AVATAR: 'edit_thread_avatar',
+ MANAGE_PINS: 'manage_pins',
+});
+export type ThreadPermission = $Values<typeof threadPermissions>;
+
+export function assertThreadPermissions(
+ ourThreadPermissions: string,
+): ThreadPermission {
+ invariant(
+ ourThreadPermissions === 'know_of' ||
+ ourThreadPermissions === 'membership' ||
+ ourThreadPermissions === 'visible' ||
+ ourThreadPermissions === 'voiced' ||
+ ourThreadPermissions === 'edit_entries' ||
+ ourThreadPermissions === 'edit_thread' ||
+ ourThreadPermissions === 'edit_thread_description' ||
+ ourThreadPermissions === 'edit_thread_color' ||
+ ourThreadPermissions === 'delete_thread' ||
+ ourThreadPermissions === 'create_subthreads' ||
+ ourThreadPermissions === 'create_sidebars' ||
+ ourThreadPermissions === 'join_thread' ||
+ ourThreadPermissions === 'edit_permissions' ||
+ ourThreadPermissions === 'add_members' ||
+ ourThreadPermissions === 'remove_members' ||
+ ourThreadPermissions === 'change_role' ||
+ ourThreadPermissions === 'leave_thread' ||
+ ourThreadPermissions === 'react_to_message' ||
+ ourThreadPermissions === 'edit_message' ||
+ ourThreadPermissions === 'edit_thread_avatar' ||
+ ourThreadPermissions === 'manage_pins',
+ 'string is not threadPermissions enum',
+ );
+ return ourThreadPermissions;
+}
+
+const threadPermissionValidator = t.enums.of(values(threadPermissions));
+export const threadPermissionPropagationPrefixes = Object.freeze({
+ DESCENDANT: 'descendant_',
+ CHILD: 'child_',
+});
+export type ThreadPermissionPropagationPrefix = $Values<
+ typeof threadPermissionPropagationPrefixes,
+>;
+export const threadPermissionFilterPrefixes = Object.freeze({
+ // includes only SIDEBAR, COMMUNITY_OPEN_SUBTHREAD,
+ // COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD
+ OPEN: 'open_',
+ // excludes only SIDEBAR
+ TOP_LEVEL: 'toplevel_',
+ // includes only COMMUNITY_OPEN_SUBTHREAD,
+ // COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD
+ OPEN_TOP_LEVEL: 'opentoplevel_',
+});
+export type ThreadPermissionFilterPrefix = $Values<
+ typeof threadPermissionFilterPrefixes,
+>;
+export type ThreadPermissionInfo =
+ | { +value: true, +source: string }
+ | { +value: false, +source: null };
+const threadPermissionInfoValidator = t.union([
+ tShape({ value: tBool(true), source: t.String }),
+ tShape({ value: tBool(false), source: t.Nil }),
+]);
+export type ThreadPermissionsBlob = {
+ +[permission: string]: ThreadPermissionInfo,
+};
+export type ThreadRolePermissionsBlob = { +[permission: string]: boolean };
+export const threadRolePermissionsBlobValidator: TDict<ThreadRolePermissionsBlob> =
+ t.dict(t.String, t.Boolean);
+export type ThreadPermissionsInfo = {
+ +[permission: ThreadPermission]: ThreadPermissionInfo,
+};
+export const threadPermissionsInfoValidator: TDict<ThreadPermissionsInfo> =
+ t.dict(threadPermissionValidator, threadPermissionInfoValidator);
diff --git a/lib/types/thread-types-enum.js b/lib/types/thread-types-enum.js
new file mode 100644
--- /dev/null
+++ b/lib/types/thread-types-enum.js
@@ -0,0 +1,77 @@
+// @flow
+
+import invariant from 'invariant';
+import type { TRefinement } from 'tcomb';
+
+import { values } from '../utils/objects.js';
+import { tNumEnum } from '../utils/validation-utils.js';
+
+export const threadTypes = Object.freeze({
+ //OPEN: 0, (DEPRECATED)
+ //CLOSED: 1, (DEPRECATED)
+ //SECRET: 2, (DEPRECATED)
+ // has parent, not top-level (appears under parent in inbox), and visible to
+ // all members of parent
+ SIDEBAR: 5,
+ // canonical thread for each pair of users. represents the friendship
+ PERSONAL: 6,
+ // canonical thread for each single user
+ PRIVATE: 7,
+ // local "thick" thread (outside of community). no parent, can only have
+ // sidebar children. currently a proxy for COMMUNITY_SECRET_SUBTHREAD until we
+ // launch actual E2E
+ LOCAL: 4,
+ // aka "org". no parent, top-level, has admin
+ COMMUNITY_ROOT: 8,
+ // like COMMUNITY_ROOT, but members aren't voiced
+ COMMUNITY_ANNOUNCEMENT_ROOT: 9,
+ // an open subthread. has parent, top-level (not sidebar), and visible to all
+ // members of parent. root ancestor is a COMMUNITY_ROOT
+ COMMUNITY_OPEN_SUBTHREAD: 3,
+ // like COMMUNITY_SECRET_SUBTHREAD, but members aren't voiced
+ COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD: 10,
+ // a secret subthread. optional parent, top-level (not sidebar), visible only
+ // to its members. root ancestor is a COMMUNITY_ROOT
+ COMMUNITY_SECRET_SUBTHREAD: 4,
+ // like COMMUNITY_SECRET_SUBTHREAD, but members aren't voiced
+ COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD: 11,
+ // like COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD, but you can't leave
+ GENESIS: 12,
+});
+export type ThreadType = $Values<typeof threadTypes>;
+export function assertThreadType(threadType: number): ThreadType {
+ invariant(
+ threadType === 3 ||
+ threadType === 4 ||
+ threadType === 5 ||
+ threadType === 6 ||
+ threadType === 7 ||
+ threadType === 8 ||
+ threadType === 9 ||
+ threadType === 10 ||
+ threadType === 11 ||
+ threadType === 12,
+ 'number is not ThreadType enum',
+ );
+ return threadType;
+}
+export const threadTypeValidator: TRefinement<number> = tNumEnum(
+ values(threadTypes),
+);
+
+export const communityThreadTypes: $ReadOnlyArray<number> = Object.freeze([
+ threadTypes.COMMUNITY_ROOT,
+ threadTypes.COMMUNITY_ANNOUNCEMENT_ROOT,
+ threadTypes.GENESIS,
+]);
+
+export const communitySubthreads: $ReadOnlyArray<number> = Object.freeze([
+ threadTypes.COMMUNITY_OPEN_SUBTHREAD,
+ threadTypes.COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD,
+ threadTypes.COMMUNITY_SECRET_SUBTHREAD,
+ threadTypes.COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD,
+]);
+
+export function threadTypeIsCommunityRoot(threadType: ThreadType): boolean {
+ return communityThreadTypes.includes(threadType);
+}
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
@@ -1,198 +1,35 @@
// @flow
-import invariant from 'invariant';
import t, { type TInterface } from 'tcomb';
import {
type AvatarDBContent,
type ClientAvatar,
- type UpdateUserAvatarRequest,
clientAvatarValidator,
+ type UpdateUserAvatarRequest,
} from './avatar-types.js';
import type { Shape } from './core.js';
import type { CalendarQuery, RawEntryInfo } from './entry-types.js';
import type { Media } from './media-types.js';
import type {
- RawMessageInfo,
MessageTruncationStatuses,
+ RawMessageInfo,
} from './message-types.js';
import {
type ThreadSubscription,
threadSubscriptionValidator,
} from './subscription-types.js';
-import type { ServerUpdateInfo, ClientUpdateInfo } from './update-types.js';
+import {
+ type ThreadPermissionsInfo,
+ type ThreadRolePermissionsBlob,
+ threadPermissionsInfoValidator,
+ threadRolePermissionsBlobValidator,
+} from './thread-permission-types.js';
+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 type { ThreadEntity } from '../utils/entity-text.js';
-import { values } from '../utils/objects.js';
-import { tNumEnum, tBool, tID, tShape } from '../utils/validation-utils.js';
-
-export const threadTypes = Object.freeze({
- //OPEN: 0, (DEPRECATED)
- //CLOSED: 1, (DEPRECATED)
- //SECRET: 2, (DEPRECATED)
- // has parent, not top-level (appears under parent in inbox), and visible to
- // all members of parent
- SIDEBAR: 5,
- // canonical thread for each pair of users. represents the friendship
- PERSONAL: 6,
- // canonical thread for each single user
- PRIVATE: 7,
- // local "thick" thread (outside of community). no parent, can only have
- // sidebar children. currently a proxy for COMMUNITY_SECRET_SUBTHREAD until we
- // launch actual E2E
- LOCAL: 4,
- // aka "org". no parent, top-level, has admin
- COMMUNITY_ROOT: 8,
- // like COMMUNITY_ROOT, but members aren't voiced
- COMMUNITY_ANNOUNCEMENT_ROOT: 9,
- // an open subthread. has parent, top-level (not sidebar), and visible to all
- // members of parent. root ancestor is a COMMUNITY_ROOT
- COMMUNITY_OPEN_SUBTHREAD: 3,
- // like COMMUNITY_SECRET_SUBTHREAD, but members aren't voiced
- COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD: 10,
- // a secret subthread. optional parent, top-level (not sidebar), visible only
- // to its members. root ancestor is a COMMUNITY_ROOT
- COMMUNITY_SECRET_SUBTHREAD: 4,
- // like COMMUNITY_SECRET_SUBTHREAD, but members aren't voiced
- COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD: 11,
- // like COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD, but you can't leave
- GENESIS: 12,
-});
-export type ThreadType = $Values<typeof threadTypes>;
-export function assertThreadType(threadType: number): ThreadType {
- invariant(
- threadType === 3 ||
- threadType === 4 ||
- threadType === 5 ||
- threadType === 6 ||
- threadType === 7 ||
- threadType === 8 ||
- threadType === 9 ||
- threadType === 10 ||
- threadType === 11 ||
- threadType === 12,
- 'number is not ThreadType enum',
- );
- return threadType;
-}
-const threadTypeValidator = tNumEnum(values(threadTypes));
-
-export const communityThreadTypes: $ReadOnlyArray<number> = Object.freeze([
- threadTypes.COMMUNITY_ROOT,
- threadTypes.COMMUNITY_ANNOUNCEMENT_ROOT,
- threadTypes.GENESIS,
-]);
-
-export const communitySubthreads: $ReadOnlyArray<number> = Object.freeze([
- threadTypes.COMMUNITY_OPEN_SUBTHREAD,
- threadTypes.COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD,
- threadTypes.COMMUNITY_SECRET_SUBTHREAD,
- threadTypes.COMMUNITY_SECRET_ANNOUNCEMENT_SUBTHREAD,
-]);
-
-export function threadTypeIsCommunityRoot(threadType: ThreadType): boolean {
- return communityThreadTypes.includes(threadType);
-}
-
-export const threadPermissions = Object.freeze({
- KNOW_OF: 'know_of',
- MEMBERSHIP_DEPRECATED: 'membership',
- VISIBLE: 'visible',
- VOICED: 'voiced',
- EDIT_ENTRIES: 'edit_entries',
- EDIT_THREAD_NAME: 'edit_thread',
- EDIT_THREAD_DESCRIPTION: 'edit_thread_description',
- EDIT_THREAD_COLOR: 'edit_thread_color',
- DELETE_THREAD: 'delete_thread',
- CREATE_SUBCHANNELS: 'create_subthreads',
- CREATE_SIDEBARS: 'create_sidebars',
- JOIN_THREAD: 'join_thread',
- EDIT_PERMISSIONS: 'edit_permissions',
- ADD_MEMBERS: 'add_members',
- REMOVE_MEMBERS: 'remove_members',
- CHANGE_ROLE: 'change_role',
- LEAVE_THREAD: 'leave_thread',
- REACT_TO_MESSAGE: 'react_to_message',
- EDIT_MESSAGE: 'edit_message',
- EDIT_THREAD_AVATAR: 'edit_thread_avatar',
- MANAGE_PINS: 'manage_pins',
-});
-export type ThreadPermission = $Values<typeof threadPermissions>;
-export function assertThreadPermissions(
- ourThreadPermissions: string,
-): ThreadPermission {
- invariant(
- ourThreadPermissions === 'know_of' ||
- ourThreadPermissions === 'membership' ||
- ourThreadPermissions === 'visible' ||
- ourThreadPermissions === 'voiced' ||
- ourThreadPermissions === 'edit_entries' ||
- ourThreadPermissions === 'edit_thread' ||
- ourThreadPermissions === 'edit_thread_description' ||
- ourThreadPermissions === 'edit_thread_color' ||
- ourThreadPermissions === 'delete_thread' ||
- ourThreadPermissions === 'create_subthreads' ||
- ourThreadPermissions === 'create_sidebars' ||
- ourThreadPermissions === 'join_thread' ||
- ourThreadPermissions === 'edit_permissions' ||
- ourThreadPermissions === 'add_members' ||
- ourThreadPermissions === 'remove_members' ||
- ourThreadPermissions === 'change_role' ||
- ourThreadPermissions === 'leave_thread' ||
- ourThreadPermissions === 'react_to_message' ||
- ourThreadPermissions === 'edit_message' ||
- ourThreadPermissions === 'edit_thread_avatar' ||
- ourThreadPermissions === 'manage_pins',
- 'string is not threadPermissions enum',
- );
- return ourThreadPermissions;
-}
-const threadPermissionValidator = t.enums.of(values(threadPermissions));
-
-export const threadPermissionPropagationPrefixes = Object.freeze({
- DESCENDANT: 'descendant_',
- CHILD: 'child_',
-});
-export type ThreadPermissionPropagationPrefix = $Values<
- typeof threadPermissionPropagationPrefixes,
->;
-
-export const threadPermissionFilterPrefixes = Object.freeze({
- // includes only SIDEBAR, COMMUNITY_OPEN_SUBTHREAD,
- // COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD
- OPEN: 'open_',
- // excludes only SIDEBAR
- TOP_LEVEL: 'toplevel_',
- // includes only COMMUNITY_OPEN_SUBTHREAD,
- // COMMUNITY_OPEN_ANNOUNCEMENT_SUBTHREAD
- OPEN_TOP_LEVEL: 'opentoplevel_',
-});
-export type ThreadPermissionFilterPrefix = $Values<
- typeof threadPermissionFilterPrefixes,
->;
-
-export type ThreadPermissionInfo =
- | { +value: true, +source: string }
- | { +value: false, +source: null };
-
-const threadPermissionInfoValidator = t.union([
- tShape({ value: tBool(true), source: t.String }),
- tShape({ value: tBool(false), source: t.Nil }),
-]);
-
-export type ThreadPermissionsBlob = {
- +[permission: string]: ThreadPermissionInfo,
-};
-export type ThreadRolePermissionsBlob = { +[permission: string]: boolean };
-const threadRolePermissionsBlobValidator = t.dict(t.String, t.Boolean);
-
-export type ThreadPermissionsInfo = {
- +[permission: ThreadPermission]: ThreadPermissionInfo,
-};
-const threadPermissionsInfoValidator = t.dict(
- threadPermissionValidator,
- threadPermissionInfoValidator,
-);
+import { type ThreadEntity } from '../utils/entity-text.js';
+import { tID, tShape } from '../utils/validation-utils.js';
export type MemberInfo = {
+id: string,
diff --git a/lib/types/validation.test.js b/lib/types/validation.test.js
--- a/lib/types/validation.test.js
+++ b/lib/types/validation.test.js
@@ -21,7 +21,8 @@
serverStateSyncServerSocketMessageValidator,
serverUpdatesServerSocketMessageValidator,
} from './socket-types.js';
-import { threadTypes, rawThreadInfoValidator } from './thread-types.js';
+import { threadTypes } from './thread-types-enum.js';
+import { rawThreadInfoValidator } from './thread-types.js';
import {
updateTypes,
accountDeletionUpdateInfoValidator,
diff --git a/lib/utils/call-server-endpoint.js b/lib/utils/call-server-endpoint.js
--- a/lib/utils/call-server-endpoint.js
+++ b/lib/utils/call-server-endpoint.js
@@ -19,7 +19,7 @@
ServerSessionChange,
ClientSessionChange,
} from '../types/session-types.js';
-import type { ConnectionStatus } from '../types/socket-types.js';
+import type { ConnectionStatus } from '../types/socket-types';
import type { CurrentUserInfo } from '../types/user-types.js';
export type CallServerEndpointOptions = Shape<{
diff --git a/lib/utils/drawer-utils.react.js b/lib/utils/drawer-utils.react.js
--- a/lib/utils/drawer-utils.react.js
+++ b/lib/utils/drawer-utils.react.js
@@ -1,10 +1,10 @@
// @flow
import { threadIsChannel } from '../shared/thread-utils.js';
+import { communitySubthreads } from '../types/thread-types-enum.js';
import {
type ThreadInfo,
type ResolvedThreadInfo,
- communitySubthreads,
} from '../types/thread-types.js';
export type CommunityDrawerItemData<T> = {
diff --git a/lib/utils/entity-text.js b/lib/utils/entity-text.js
--- a/lib/utils/entity-text.js
+++ b/lib/utils/entity-text.js
@@ -7,12 +7,8 @@
import { useENSNames } from '../hooks/ens-cache.js';
import { threadNoun } from '../shared/thread-utils.js';
import { stringForUser } from '../shared/user-utils.js';
-import {
- threadTypes,
- type ThreadType,
- type RawThreadInfo,
- type ThreadInfo,
-} from '../types/thread-types.js';
+import { type ThreadType, threadTypes } from '../types/thread-types-enum.js';
+import { type RawThreadInfo, type ThreadInfo } from '../types/thread-types.js';
import { basePluralize } from '../utils/text-utils.js';
type UserEntity = {
diff --git a/lib/utils/thread-ops-utils.js b/lib/utils/thread-ops-utils.js
--- a/lib/utils/thread-ops-utils.js
+++ b/lib/utils/thread-ops-utils.js
@@ -1,11 +1,11 @@
// @flow
+import { assertThreadType } from '../types/thread-types-enum.js';
import {
type ClientDBThreadInfo,
type ThreadStoreOperation,
type ClientDBThreadStoreOperation,
type RawThreadInfo,
- assertThreadType,
} from '../types/thread-types.js';
function convertRawThreadInfoToClientDBThreadInfo(
diff --git a/lib/utils/validation-utils.test.js b/lib/utils/validation-utils.test.js
--- a/lib/utils/validation-utils.test.js
+++ b/lib/utils/validation-utils.test.js
@@ -5,7 +5,7 @@
tMediaMessageVideo,
tNumEnum,
} from './validation-utils.js';
-import { threadTypes } from '../types/thread-types.js';
+import { threadTypes } from '../types/thread-types-enum.js';
import { values } from '../utils/objects.js';
describe('Validation utils', () => {
diff --git a/native/avatars/thread-avatar.react.js b/native/avatars/thread-avatar.react.js
--- a/native/avatars/thread-avatar.react.js
+++ b/native/avatars/thread-avatar.react.js
@@ -7,11 +7,8 @@
useENSResolvedAvatar,
} from 'lib/shared/avatar-utils.js';
import { getSingleOtherUser } from 'lib/shared/thread-utils.js';
-import {
- threadTypes,
- type RawThreadInfo,
- type ThreadInfo,
-} from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type RawThreadInfo, type ThreadInfo } from 'lib/types/thread-types.js';
import Avatar from './avatar.react.js';
import { useSelector } from '../redux/redux-utils.js';
diff --git a/native/calendar/entry.react.js b/native/calendar/entry.react.js
--- a/native/calendar/entry.react.js
+++ b/native/calendar/entry.react.js
@@ -45,10 +45,10 @@
} from 'lib/types/entry-types.js';
import type { LoadingStatus } from 'lib/types/loading-types.js';
import type { Dispatch } from 'lib/types/redux-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import {
type ThreadInfo,
type ResolvedThreadInfo,
- threadPermissions,
} from 'lib/types/thread-types.js';
import {
useServerCall,
diff --git a/native/chat/chat-input-bar.react.js b/native/chat/chat-input-bar.react.js
--- a/native/chat/chat-input-bar.react.js
+++ b/native/chat/chat-input-bar.react.js
@@ -64,9 +64,9 @@
MessageInfo,
} from 'lib/types/message-types.js';
import type { Dispatch } from 'lib/types/redux-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import {
type ThreadInfo,
- threadPermissions,
type ClientThreadJoinRequest,
type ThreadJoinPayload,
type RelativeMemberInfo,
diff --git a/native/chat/chat-thread-list.react.js b/native/chat/chat-thread-list.react.js
--- a/native/chat/chat-thread-list.react.js
+++ b/native/chat/chat-thread-list.react.js
@@ -30,8 +30,8 @@
getThreadListSearchResults,
} from 'lib/shared/thread-utils.js';
import type { UserSearchResult } from 'lib/types/search-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import type { ThreadInfo } from 'lib/types/thread-types.js';
-import { threadTypes } from 'lib/types/thread-types.js';
import type {
GlobalAccountUserInfo,
UserInfo,
diff --git a/native/chat/compose-subchannel.react.js b/native/chat/compose-subchannel.react.js
--- a/native/chat/compose-subchannel.react.js
+++ b/native/chat/compose-subchannel.react.js
@@ -16,11 +16,8 @@
} from 'lib/selectors/user-selectors.js';
import { getPotentialMemberItems } from 'lib/shared/search-utils.js';
import { threadInFilterList, userIsMember } from 'lib/shared/thread-utils.js';
-import {
- type ThreadInfo,
- type ThreadType,
- threadTypes,
-} from 'lib/types/thread-types.js';
+import { type ThreadType, threadTypes } from 'lib/types/thread-types-enum.js';
+import { type ThreadInfo } from 'lib/types/thread-types.js';
import { type AccountUserInfo } from 'lib/types/user-types.js';
import {
useServerCall,
diff --git a/native/chat/compose-thread-button.react.js b/native/chat/compose-thread-button.react.js
--- a/native/chat/compose-thread-button.react.js
+++ b/native/chat/compose-thread-button.react.js
@@ -5,7 +5,7 @@
import { useLoggedInUserInfo } from 'lib/hooks/account-hooks.js';
import { createPendingThread } from 'lib/shared/thread-utils.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import type { ChatNavigationProp } from './chat.react.js';
import Button from '../components/button.react.js';
diff --git a/native/chat/message-list.react.js b/native/chat/message-list.react.js
--- a/native/chat/message-list.react.js
+++ b/native/chat/message-list.react.js
@@ -17,7 +17,8 @@
import { messageKey } from 'lib/shared/message-utils.js';
import { useWatchThread } from 'lib/shared/thread-utils.js';
import type { FetchMessageInfosPayload } from 'lib/types/message-types.js';
-import { type ThreadInfo, threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type ThreadInfo } from 'lib/types/thread-types.js';
import {
type DispatchActionPromise,
useServerCall,
diff --git a/native/chat/multimedia-message.react.js b/native/chat/multimedia-message.react.js
--- a/native/chat/multimedia-message.react.js
+++ b/native/chat/multimedia-message.react.js
@@ -15,7 +15,7 @@
useCanCreateSidebarFromMessage,
} from 'lib/shared/thread-utils.js';
import type { MediaInfo } from 'lib/types/media-types.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import ComposedMessage from './composed-message.react.js';
import { InnerMultimediaMessage } from './inner-multimedia-message.react.js';
diff --git a/native/chat/parent-thread-header.react.js b/native/chat/parent-thread-header.react.js
--- a/native/chat/parent-thread-header.react.js
+++ b/native/chat/parent-thread-header.react.js
@@ -4,7 +4,8 @@
import { View, Text } from 'react-native';
import { ScrollView } from 'react-native-gesture-handler';
-import type { ThreadInfo, ThreadType } from 'lib/types/thread-types.js';
+import type { ThreadType } from 'lib/types/thread-types-enum.js';
+import type { ThreadInfo } from 'lib/types/thread-types.js';
import { useNavigateToThread } from './message-list-types.js';
import Button from '../components/button.react.js';
diff --git a/native/chat/settings/compose-subchannel-modal.react.js b/native/chat/settings/compose-subchannel-modal.react.js
--- a/native/chat/settings/compose-subchannel-modal.react.js
+++ b/native/chat/settings/compose-subchannel-modal.react.js
@@ -5,7 +5,8 @@
import { Text } from 'react-native';
import { threadTypeDescriptions } from 'lib/shared/thread-utils.js';
-import { type ThreadInfo, threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type ThreadInfo } from 'lib/types/thread-types.js';
import Button from '../../components/button.react.js';
import Modal from '../../components/modal.react.js';
diff --git a/native/chat/settings/thread-settings-description.react.js b/native/chat/settings/thread-settings-description.react.js
--- a/native/chat/settings/thread-settings-description.react.js
+++ b/native/chat/settings/thread-settings-description.react.js
@@ -17,9 +17,9 @@
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js';
import { threadHasPermission } from 'lib/shared/thread-utils.js';
import type { LoadingStatus } from 'lib/types/loading-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import {
type ThreadInfo,
- threadPermissions,
type ChangeThreadSettingsPayload,
type UpdateThreadRequest,
} from 'lib/types/thread-types.js';
diff --git a/native/chat/settings/thread-settings.react.js b/native/chat/settings/thread-settings.react.js
--- a/native/chat/settings/thread-settings.react.js
+++ b/native/chat/settings/thread-settings.react.js
@@ -29,12 +29,12 @@
} from 'lib/shared/thread-utils.js';
import threadWatcher from 'lib/shared/thread-watcher.js';
import type { RelationshipButton } from 'lib/types/relationship-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import {
type ThreadInfo,
type ResolvedThreadInfo,
type RelativeMemberInfo,
- threadPermissions,
- threadTypes,
} from 'lib/types/thread-types.js';
import type { UserInfos } from 'lib/types/user-types.js';
import {
diff --git a/native/chat/text-message.react.js b/native/chat/text-message.react.js
--- a/native/chat/text-message.react.js
+++ b/native/chat/text-message.react.js
@@ -10,7 +10,7 @@
threadHasPermission,
useCanCreateSidebarFromMessage,
} from 'lib/shared/thread-utils.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import type { ChatNavigationProp } from './chat.react.js';
import ComposedMessage from './composed-message.react.js';
diff --git a/native/components/thread-icon.react.js b/native/components/thread-icon.react.js
--- a/native/components/thread-icon.react.js
+++ b/native/components/thread-icon.react.js
@@ -4,7 +4,7 @@
import * as React from 'react';
import { StyleSheet } from 'react-native';
-import { threadTypes, type ThreadType } from 'lib/types/thread-types.js';
+import { threadTypes, type ThreadType } from 'lib/types/thread-types-enum.js';
import SWMansionIcon from './swmansion-icon.react.js';
diff --git a/native/components/thread-visibility.react.js b/native/components/thread-visibility.react.js
--- a/native/components/thread-visibility.react.js
+++ b/native/components/thread-visibility.react.js
@@ -5,7 +5,7 @@
import tinycolor from 'tinycolor2';
import { threadLabel } from 'lib/shared/thread-utils.js';
-import type { ThreadType } from 'lib/types/thread-types.js';
+import type { ThreadType } from 'lib/types/thread-types-enum.js';
import Pill from './pill.react.js';
import ThreadIcon from './thread-icon.react.js';
diff --git a/native/input/input-state-container.react.js b/native/input/input-state-container.react.js
--- a/native/input/input-state-container.react.js
+++ b/native/input/input-state-container.react.js
@@ -79,11 +79,11 @@
type MediaMissionReportCreationRequest,
reportTypes,
} from 'lib/types/report-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import {
type ClientNewThreadRequest,
type NewThreadResult,
type ThreadInfo,
- threadTypes,
} from 'lib/types/thread-types.js';
import {
type DispatchActionPromise,
diff --git a/native/redux/edit-thread-permission-migration.js b/native/redux/edit-thread-permission-migration.js
--- a/native/redux/edit-thread-permission-migration.js
+++ b/native/redux/edit-thread-permission-migration.js
@@ -1,12 +1,12 @@
// @flow
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import type {
MemberInfo,
ThreadCurrentUserInfo,
RawThreadInfo,
RoleInfo,
} from 'lib/types/thread-types.js';
-import { threadTypes } from 'lib/types/thread-types.js';
function addDetailedThreadEditPermissionsToUser<
T: MemberInfo | ThreadCurrentUserInfo,
diff --git a/native/redux/update-roles-and-permissions.js b/native/redux/update-roles-and-permissions.js
--- a/native/redux/update-roles-and-permissions.js
+++ b/native/redux/update-roles-and-permissions.js
@@ -6,9 +6,9 @@
makePermissionsBlob,
makePermissionsForChildrenBlob,
} from 'lib/permissions/thread-permissions.js';
+import type { ThreadPermissionsBlob } from 'lib/types/thread-permission-types.js';
import type {
RawThreadInfo,
- ThreadPermissionsBlob,
ThreadStoreThreadInfos,
MemberInfo,
} from 'lib/types/thread-types.js';
diff --git a/web/calendar/entry.react.js b/web/calendar/entry.react.js
--- a/web/calendar/entry.react.js
+++ b/web/calendar/entry.react.js
@@ -36,7 +36,7 @@
} from 'lib/types/entry-types.js';
import type { LoadingStatus } from 'lib/types/loading-types.js';
import type { Dispatch } from 'lib/types/redux-types.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import type { ResolvedThreadInfo } from 'lib/types/thread-types.js';
import {
type DispatchActionPromise,
diff --git a/web/chat/chat-input-bar.react.js b/web/chat/chat-input-bar.react.js
--- a/web/chat/chat-input-bar.react.js
+++ b/web/chat/chat-input-bar.react.js
@@ -30,9 +30,9 @@
import type { CalendarQuery } from 'lib/types/entry-types.js';
import type { LoadingStatus } from 'lib/types/loading-types.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import {
type ThreadInfo,
- threadPermissions,
type ClientThreadJoinRequest,
type ThreadJoinPayload,
type RelativeMemberInfo,
diff --git a/web/chat/chat-message-list.react.js b/web/chat/chat-message-list.react.js
--- a/web/chat/chat-message-list.react.js
+++ b/web/chat/chat-message-list.react.js
@@ -20,7 +20,8 @@
import { messageKey } from 'lib/shared/message-utils.js';
import { threadIsPending } from 'lib/shared/thread-utils.js';
import type { FetchMessageInfosPayload } from 'lib/types/message-types.js';
-import { type ThreadInfo, threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type ThreadInfo } from 'lib/types/thread-types.js';
import {
type DispatchActionPromise,
useServerCall,
diff --git a/web/chat/thread-list-provider.js b/web/chat/thread-list-provider.js
--- a/web/chat/thread-list-provider.js
+++ b/web/chat/thread-list-provider.js
@@ -17,7 +17,7 @@
useThreadListSearch,
threadIsPending,
} from 'lib/shared/thread-utils.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import { useSelector } from '../redux/redux-utils.js';
import {
diff --git a/web/chat/thread-menu.react.js b/web/chat/thread-menu.react.js
--- a/web/chat/thread-menu.react.js
+++ b/web/chat/thread-menu.react.js
@@ -15,11 +15,9 @@
viewerIsMember,
threadIsChannel,
} from 'lib/shared/thread-utils.js';
-import {
- type ThreadInfo,
- threadTypes,
- threadPermissions,
-} from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type ThreadInfo } from 'lib/types/thread-types.js';
import {
useServerCall,
useDispatchActionPromise,
diff --git a/web/components/thread-avatar.react.js b/web/components/thread-avatar.react.js
--- a/web/components/thread-avatar.react.js
+++ b/web/components/thread-avatar.react.js
@@ -7,11 +7,8 @@
useENSResolvedAvatar,
} from 'lib/shared/avatar-utils.js';
import { getSingleOtherUser } from 'lib/shared/thread-utils.js';
-import {
- threadTypes,
- type RawThreadInfo,
- type ThreadInfo,
-} from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type RawThreadInfo, type ThreadInfo } from 'lib/types/thread-types.js';
import Avatar from './avatar.react.js';
import { useSelector } from '../redux/redux-utils.js';
diff --git a/web/input/input-state-container.react.js b/web/input/input-state-container.react.js
--- a/web/input/input-state-container.react.js
+++ b/web/input/input-state-container.react.js
@@ -75,12 +75,12 @@
import type { RawTextMessageInfo } from 'lib/types/messages/text.js';
import type { Dispatch } from 'lib/types/redux-types.js';
import { reportTypes } from 'lib/types/report-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import {
type ClientNewThreadRequest,
type NewThreadResult,
type ThreadInfo,
type RawThreadInfo,
- threadTypes,
} from 'lib/types/thread-types.js';
import {
type DispatchActionPromise,
diff --git a/web/modals/threads/create/compose-subchannel-modal.react.js b/web/modals/threads/create/compose-subchannel-modal.react.js
--- a/web/modals/threads/create/compose-subchannel-modal.react.js
+++ b/web/modals/threads/create/compose-subchannel-modal.react.js
@@ -4,8 +4,8 @@
import { newThread, newThreadActionTypes } from 'lib/actions/thread-actions.js';
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import type { ThreadInfo } from 'lib/types/thread-types.js';
-import { threadTypes } from 'lib/types/thread-types.js';
import {
useDispatchActionPromise,
useServerCall,
diff --git a/web/modals/threads/create/steps/subchannel-settings.react.js b/web/modals/threads/create/steps/subchannel-settings.react.js
--- a/web/modals/threads/create/steps/subchannel-settings.react.js
+++ b/web/modals/threads/create/steps/subchannel-settings.react.js
@@ -4,7 +4,7 @@
import SWMansionIcon from 'lib/components/SWMansionIcon.react.js';
import { threadTypeDescriptions } from 'lib/shared/thread-utils.js';
-import { threadTypes } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
import css from './subchannel-settings.css';
import CommIcon from '../../../../CommIcon.react.js';
diff --git a/web/modals/threads/members/members-modal.react.js b/web/modals/threads/members/members-modal.react.js
--- a/web/modals/threads/members/members-modal.react.js
+++ b/web/modals/threads/members/members-modal.react.js
@@ -10,10 +10,8 @@
memberIsAdmin,
threadHasPermission,
} from 'lib/shared/thread-utils.js';
-import {
- type RelativeMemberInfo,
- threadPermissions,
-} from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { type RelativeMemberInfo } from 'lib/types/thread-types.js';
import AddMembersModal from './add-members-modal.react.js';
import ThreadMembersList from './members-list.react.js';
diff --git a/web/modals/threads/settings/thread-settings-general-tab.react.js b/web/modals/threads/settings/thread-settings-general-tab.react.js
--- a/web/modals/threads/settings/thread-settings-general-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-general-tab.react.js
@@ -12,11 +12,8 @@
chatNameMaxLength,
} from 'lib/shared/thread-utils.js';
import { type SetState } from 'lib/types/hook-types.js';
-import {
- type ThreadInfo,
- type ThreadChanges,
- threadPermissions,
-} from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { type ThreadInfo, type ThreadChanges } from 'lib/types/thread-types.js';
import {
useDispatchActionPromise,
useServerCall,
diff --git a/web/modals/threads/settings/thread-settings-modal.react.js b/web/modals/threads/settings/thread-settings-modal.react.js
--- a/web/modals/threads/settings/thread-settings-modal.react.js
+++ b/web/modals/threads/settings/thread-settings-modal.react.js
@@ -16,12 +16,9 @@
getSingleOtherUser,
threadUIName,
} from 'lib/shared/thread-utils.js';
-import {
- type ThreadInfo,
- threadTypes,
- threadPermissions,
- type ThreadChanges,
-} from 'lib/types/thread-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type ThreadInfo, type ThreadChanges } from 'lib/types/thread-types.js';
import { useResolvedThreadInfo } from 'lib/utils/entity-helpers.js';
import ThreadSettingsDeleteTab from './thread-settings-delete-tab.react.js';
diff --git a/web/modals/threads/settings/thread-settings-privacy-tab.react.js b/web/modals/threads/settings/thread-settings-privacy-tab.react.js
--- a/web/modals/threads/settings/thread-settings-privacy-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-privacy-tab.react.js
@@ -10,11 +10,8 @@
import SWMansionIcon from 'lib/components/SWMansionIcon.react.js';
import { threadTypeDescriptions } from 'lib/shared/thread-utils.js';
import { type SetState } from 'lib/types/hook-types.js';
-import {
- type ThreadInfo,
- type ThreadChanges,
- threadTypes,
-} from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type ThreadInfo, type ThreadChanges } from 'lib/types/thread-types.js';
import {
useDispatchActionPromise,
useServerCall,
diff --git a/web/utils/thread-utils.js b/web/utils/thread-utils.js
--- a/web/utils/thread-utils.js
+++ b/web/utils/thread-utils.js
@@ -10,7 +10,8 @@
createPendingThread,
useExistingThreadInfoFinder,
} from 'lib/shared/thread-utils.js';
-import { threadTypes, type ThreadInfo } from 'lib/types/thread-types.js';
+import { threadTypes } from 'lib/types/thread-types-enum.js';
+import { type ThreadInfo } from 'lib/types/thread-types.js';
import type { AccountUserInfo } from 'lib/types/user-types.js';
import { useSelector } from '../redux/redux-utils.js';
diff --git a/web/utils/tooltip-action-utils.js b/web/utils/tooltip-action-utils.js
--- a/web/utils/tooltip-action-utils.js
+++ b/web/utils/tooltip-action-utils.js
@@ -14,8 +14,8 @@
} from 'lib/shared/thread-utils.js';
import { messageTypes } from 'lib/types/message-types-enum.js';
import { isComposableMessageType } from 'lib/types/message-types.js';
+import { threadPermissions } from 'lib/types/thread-permission-types.js';
import type { ThreadInfo } from 'lib/types/thread-types.js';
-import { threadPermissions } from 'lib/types/thread-types.js';
import { longAbsoluteDate } from 'lib/utils/date-utils.js';
import {

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 30, 8:03 AM (21 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2600206
Default Alt Text
D7783.id26358.diff (75 KB)

Event Timeline