diff --git a/keyserver/src/fetchers/link-fetchers.js b/keyserver/src/fetchers/link-fetchers.js --- a/keyserver/src/fetchers/link-fetchers.js +++ b/keyserver/src/fetchers/link-fetchers.js @@ -51,7 +51,8 @@ threadID, threadRole, } = result[0]; - const communityStatus = communityRole > 0 ? 'already_joined' : 'valid'; + const communityStatus: 'already_joined' | 'valid' = + communityRole > 0 ? 'already_joined' : 'valid'; const communityResult = { status: communityStatus, community: { 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 @@ -538,7 +538,7 @@ const messages = parseMessageSQLResult(result, derivedMessages, viewer); const rawMessageInfos = []; - let currentThreadID = null; + let currentThreadID: ?string = null; let numMessagesForCurrentThreadID = 0; for (const message of messages) { const { rawMessageInfo } = message; 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 @@ -118,7 +118,7 @@ return positiveRoles.length > 0; } -type Check = +export type Check = | { +check: 'is_member' } | { +check: 'permission', +permission: ThreadPermission }; @@ -400,7 +400,7 @@ const fetchMembersPromise = fetchKnownUserInfos(viewer, allCandidates); const parentPermissionsPromise = (async () => { - const parentPermissions = {}; + const parentPermissions: { [string]: ThreadPermissionsBlob } = {}; if (!params.parentThreadID || allCandidates.length === 0) { return parentPermissions; } 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 @@ -122,7 +122,9 @@ const deliveryPromises: { [string]: Promise | Promise, } = {}; - const notifInfo = {}; + const notifInfo: { + [string]: { userID: string, threadID: string, messageID: string }, + } = {}; const rescindedIDs = []; for (const row of fetchResult) { diff --git a/keyserver/src/responders/entry-responders.js b/keyserver/src/responders/entry-responders.js --- a/keyserver/src/responders/entry-responders.js +++ b/keyserver/src/responders/entry-responders.js @@ -68,7 +68,7 @@ filters: input.filters, }; } - const filters = []; + const filters: Array = []; if (!input.includeDeleted) { filters.push({ type: calendarThreadFilterTypes.NOT_DELETED }); } diff --git a/keyserver/src/responders/redux-state-responders.js b/keyserver/src/responders/redux-state-responders.js --- a/keyserver/src/responders/redux-state-responders.js +++ b/keyserver/src/responders/redux-state-responders.js @@ -25,7 +25,10 @@ import type { ServerWebInitialReduxStateResponse } from 'lib/types/redux-types.js'; import { threadPermissions } from 'lib/types/thread-permission-types.js'; import { threadTypes } from 'lib/types/thread-types-enum.js'; -import { type GlobalAccountUserInfo } from 'lib/types/user-types.js'; +import { + type GlobalAccountUserInfo, + type UserInfos, +} from 'lib/types/user-types.js'; import { currentDateInTimeZone } from 'lib/utils/date-utils.js'; import { ServerError } from 'lib/utils/errors.js'; import { promiseAll } from 'lib/utils/promises.js'; @@ -221,7 +224,7 @@ } return await entryStorePromise; })(); - const userInfosPromise = (async () => { + const userInfosPromise = (async (): Promise => { const [userInfos, hasNotAcknowledgedPolicies] = await Promise.all([ userInfoPromise, hasNotAcknowledgedPoliciesPromise, 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 @@ -397,7 +397,7 @@ viewer: Viewer, request: RelationshipRequest, userIDs: $ReadOnlyArray, -) { +): Promise<{ +[string]: string }> { // If you add another RelationshipAction to the supported list below, you'll // probably want to add it to the FRIEND / FARCASTER_MUTUAL special cases in // useUpdateRelationships as well 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 @@ -56,6 +56,7 @@ rawThreadInfosFromServerThreadInfos, determineThreadAncestryForPossibleMemberResolution, } from '../fetchers/thread-fetchers.js'; +import { type Check } from '../fetchers/thread-permission-fetchers.js'; import { checkThreadPermission, viewerHasPositiveRole, @@ -420,7 +421,7 @@ if (ignorePermissions) { return; } - const checks = []; + const checks: Array = []; if (sqlUpdate.name !== undefined) { checks.push({ check: 'permission', diff --git a/lib/push/utils.js b/lib/push/utils.js --- a/lib/push/utils.js +++ b/lib/push/utils.js @@ -125,7 +125,8 @@ const { type } = messageInfo; const { getMessageNotifyType } = messageSpecs[type]; - let messageNotifyType = messageNotifyTypes.SET_UNREAD; + let messageNotifyType: MessageNotifyType = + messageNotifyTypes.SET_UNREAD; if (messageInfo.creatorID === userID) { // We don't need to notify the message author about their message messageNotifyType = messageNotifyTypes.NONE; diff --git a/lib/shared/dm-ops/process-dm-ops.js b/lib/shared/dm-ops/process-dm-ops.js --- a/lib/shared/dm-ops/process-dm-ops.js +++ b/lib/shared/dm-ops/process-dm-ops.js @@ -461,7 +461,8 @@ invariant(id, 'Thick thread RawMessageInfos should always have ID'); const { getMessageNotifyType } = messageSpecs[type]; - let messageNotifyType = messageNotifyTypes.SET_UNREAD; + let messageNotifyType: MessageNotifyType = + messageNotifyTypes.SET_UNREAD; if (getMessageNotifyType) { messageNotifyType = await getMessageNotifyType(rawMessageInfo, { notifTargetUserID: viewerID, 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 @@ -1070,7 +1070,7 @@ const disabledPermissions: ThreadPermissionsInfo = permissionsDisabledByBlockArray.reduce( - (permissions: ThreadPermissionsInfo, permission: string) => ({ + (permissions: ThreadPermissionsInfo, permission: ThreadPermission) => ({ ...permissions, [permission]: { value: false, source: null }, }), diff --git a/lib/types/message-types.js b/lib/types/message-types.js --- a/lib/types/message-types.js +++ b/lib/types/message-types.js @@ -158,7 +158,7 @@ thickIDRegExp, } from '../utils/validation-utils.js'; -const composableMessageTypes = new Set([ +const composableMessageTypes = new Set([ messageTypes.TEXT, messageTypes.IMAGES, messageTypes.MULTIMEDIA, @@ -200,7 +200,7 @@ return messageData.localID; } -const mediaMessageTypes = new Set([ +const mediaMessageTypes = new Set([ messageTypes.IMAGES, messageTypes.MULTIMEDIA, ]); 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 @@ -15,7 +15,7 @@ describe('Validation utils', () => { describe('tNumEnum validator', () => { it('Should discard when accepted set is empty', () => { - expect(tNumEnum([]).is(1)).toBe(false); + expect(tNumEnum(([]: Array)).is(1)).toBe(false); }); it('Should accept when array contains number', () => { diff --git a/native/roles/community-roles-screen.react.js b/native/roles/community-roles-screen.react.js --- a/native/roles/community-roles-screen.react.js +++ b/native/roles/community-roles-screen.react.js @@ -11,6 +11,7 @@ useRoleUserSurfacedPermissions, } from 'lib/shared/thread-utils.js'; import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js'; +import type { UserSurfacedPermission } from 'lib/types/thread-permission-types'; import RolePanelEntry from './role-panel-entry.react.js'; import type { RolesNavigationProp } from './roles-navigator.react.js'; @@ -89,7 +90,7 @@ threadInfo, action: 'create_role', roleName: 'New role', - rolePermissions: new Set(), + rolePermissions: new Set(), }), [threadInfo, props.navigation], ); diff --git a/web/url-utils.js b/web/url-utils.js --- a/web/url-utils.js +++ b/web/url-utils.js @@ -135,7 +135,8 @@ if (urlInfo.selectedUserList) { const selectedUsers = _keyBy('id')(navInfo?.selectedUserList ?? []); - const userInfos = backupInfo.userInfos ?? {}; + const userInfos: { +[id: string]: AccountUserInfo } = + backupInfo.userInfos ?? {}; newNavInfo.selectedUserList = urlInfo.selectedUserList ?.map(id => selectedUsers[id] ?? userInfos[id]) ?.filter(Boolean);