Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3388623
D9775.id33774.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D9775.id33774.diff
View Options
diff --git a/web/crypto/aes-gcm-crypto-utils.js b/web/crypto/aes-gcm-crypto-utils.js
--- a/web/crypto/aes-gcm-crypto-utils.js
+++ b/web/crypto/aes-gcm-crypto-utils.js
@@ -6,7 +6,7 @@
'decrypt',
];
-type EncryptedData = {
+export type EncryptedData = {
+iv: BufferSource,
+ciphertext: Uint8Array,
};
diff --git a/web/database/database-module-provider.js b/web/database/database-module-provider.js
--- a/web/database/database-module-provider.js
+++ b/web/database/database-module-provider.js
@@ -131,7 +131,9 @@
}
async function getSafariEncryptionKey(): Promise<SubtleCrypto$JsonWebKey> {
- const encryptionKey = await localforage.getItem(SQLITE_ENCRYPTION_KEY);
+ const encryptionKey = await localforage.getItem<CryptoKey>(
+ SQLITE_ENCRYPTION_KEY,
+ );
if (encryptionKey) {
return await exportKeyToJWK(encryptionKey);
}
diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js
--- a/web/database/worker/db-worker.js
+++ b/web/database/worker/db-worker.js
@@ -11,6 +11,7 @@
encryptData,
generateCryptoKey,
importJWKKey,
+ type EncryptedData,
} from '../../crypto/aes-gcm-crypto-utils.js';
import {
type SharedWorkerMessageEvent,
@@ -74,7 +75,9 @@
}
}
- const encryptedContent = await localforage.getItem(SQLITE_CONTENT);
+ const encryptedContent = await localforage.getItem<EncryptedData>(
+ SQLITE_CONTENT,
+ );
let dbContent = null;
try {
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
@@ -233,7 +233,7 @@
}
static completedMessageIDs(state: State): Set<string> {
- const completed = new Map();
+ const completed = new Map<string, boolean>();
for (const threadID in state.pendingUploads) {
const pendingUploads = state.pendingUploads[threadID];
for (const localUploadID in pendingUploads) {
@@ -251,7 +251,7 @@
}
}
}
- const messageIDs = new Set();
+ const messageIDs = new Set<string>();
for (const [messageID, isCompleted] of completed) {
if (isCompleted) {
messageIDs.add(messageID);
@@ -266,7 +266,7 @@
return;
}
- const previouslyAssignedMessageIDs = new Set();
+ const previouslyAssignedMessageIDs = new Set<string>();
for (const threadID in prevState.pendingUploads) {
const pendingUploads = prevState.pendingUploads[threadID];
for (const localUploadID in pendingUploads) {
@@ -277,7 +277,14 @@
}
}
- const newlyAssignedUploads = new Map();
+ const newlyAssignedUploads = new Map<
+ string,
+ {
+ +threadID: string,
+ +shouldEncrypt: boolean,
+ +uploads: PendingMultimediaUpload[],
+ },
+ >();
for (const threadID in this.state.pendingUploads) {
const pendingUploads = this.state.pendingUploads[threadID];
for (const localUploadID in pendingUploads) {
@@ -307,7 +314,7 @@
}
}
- const newMessageInfos = new Map();
+ const newMessageInfos = new Map<string, RawMultimediaMessageInfo>();
for (const [messageID, assignedUploads] of newlyAssignedUploads) {
const { uploads, threadID, shouldEncrypt } = assignedUploads;
const creatorID = this.props.viewerID;
@@ -1537,7 +1544,7 @@
payload: newRawMessageInfo,
});
- const uploadIDsToRetry = new Set();
+ const uploadIDsToRetry = new Set<string>();
const uploadsToRetry = [];
for (const pendingUpload of pendingUploads) {
const { serverID, messageID, localID, abort } = pendingUpload;
@@ -1670,7 +1677,7 @@
[],
);
const textMessageCreationSideEffectsFunc =
- useMessageCreationSideEffectsFunc(messageTypes.TEXT);
+ useMessageCreationSideEffectsFunc<RawTextMessageInfo>(messageTypes.TEXT);
return (
<InputStateContainer
diff --git a/web/media/aes-crypto-utils.test.js b/web/media/aes-crypto-utils.test.js
--- a/web/media/aes-crypto-utils.test.js
+++ b/web/media/aes-crypto-utils.test.js
@@ -19,7 +19,7 @@
]);
const randomData = new Uint8Array(
- new Array(100).fill(0).map(() => Math.floor(Math.random() * 255)),
+ new Array<number>(100).fill(0).map(() => Math.floor(Math.random() * 255)),
);
describe('generateKey', () => {
diff --git a/web/modals/chat/message-results-modal.react.js b/web/modals/chat/message-results-modal.react.js
--- a/web/modals/chat/message-results-modal.react.js
+++ b/web/modals/chat/message-results-modal.react.js
@@ -90,7 +90,10 @@
// By the nature of using messageListData and passing in
// the desired translatedMessageResults as additional
// messages, we will have duplicate ChatMessageInfoItems.
- const uniqueChatMessageInfoItemsMap = new Map();
+ const uniqueChatMessageInfoItemsMap = new Map<
+ string,
+ ChatMessageInfoItem,
+ >();
chatMessageInfoItems.forEach(
item =>
item.messageInfo &&
@@ -103,8 +106,12 @@
// in the order of pin_time (newest first).
const sortedChatMessageInfoItems = [];
for (let i = 0; i < rawMessageResults.length; i++) {
+ const rawMessageID = rawMessageResults[i].id;
+ if (!rawMessageID) {
+ continue;
+ }
sortedChatMessageInfoItems.push(
- uniqueChatMessageInfoItemsMap.get(rawMessageResults[i].id),
+ uniqueChatMessageInfoItemsMap.get(rawMessageID),
);
}
diff --git a/web/push-notif/notif-crypto-utils.js b/web/push-notif/notif-crypto-utils.js
--- a/web/push-notif/notif-crypto-utils.js
+++ b/web/push-notif/notif-crypto-utils.js
@@ -17,6 +17,7 @@
decryptData,
encryptData,
importJWKKey,
+ type EncryptedData,
} from '../crypto/aes-gcm-crypto-utils.js';
import {
NOTIFICATIONS_OLM_DATA_CONTENT,
@@ -51,7 +52,7 @@
const { id, encryptedPayload } = encryptedNotification;
const retrieveEncryptionKeyPromise: Promise<?CryptoKey> = (async () => {
- const persistedCryptoKey = await localforage.getItem(
+ const persistedCryptoKey = await localforage.getItem<CryptoKey>(
NOTIFICATIONS_OLM_DATA_ENCRYPTION_KEY,
);
if (isDesktopSafari && persistedCryptoKey) {
@@ -63,9 +64,11 @@
})();
const [encryptedOlmData, encryptionKey, utilsData] = await Promise.all([
- localforage.getItem(NOTIFICATIONS_OLM_DATA_CONTENT),
+ localforage.getItem<EncryptedData>(NOTIFICATIONS_OLM_DATA_CONTENT),
retrieveEncryptionKeyPromise,
- localforage.getItem(WEB_NOTIFS_SERVICE_UTILS_KEY),
+ localforage.getItem<WebNotifsServiceUtilsData>(
+ WEB_NOTIFS_SERVICE_UTILS_KEY,
+ ),
]);
if (!utilsData) {
diff --git a/web/roles/community-roles-modal.react.js b/web/roles/community-roles-modal.react.js
--- a/web/roles/community-roles-modal.react.js
+++ b/web/roles/community-roles-modal.react.js
@@ -5,6 +5,7 @@
import { useModalContext } from 'lib/components/modal-provider.react.js';
import { threadInfoSelector } from 'lib/selectors/thread-selectors.js';
import { useRoleMemberCountsForCommunity } from 'lib/shared/thread-utils.js';
+import type { UserSurfacedPermission } from 'lib/types/thread-permission-types.js';
import type { ThreadInfo } from 'lib/types/thread-types.js';
import css from './community-roles-modal.css';
@@ -49,7 +50,10 @@
[roleNamesToMembers, threadInfo],
);
- const rolePermissionsForNewRole = React.useMemo(() => new Set(), []);
+ const rolePermissionsForNewRole = React.useMemo(
+ () => new Set<UserSurfacedPermission>(),
+ [],
+ );
const onClickCreateRole = React.useCallback(
() =>
diff --git a/web/search/message-search-state-provider.react.js b/web/search/message-search-state-provider.react.js
--- a/web/search/message-search-state-provider.react.js
+++ b/web/search/message-search-state-provider.react.js
@@ -37,7 +37,7 @@
[threadID: string]: $ReadOnlyArray<RawMessageInfo>,
}>({});
- const endsReached = React.useRef(new Set());
+ const endsReached = React.useRef(new Set<string>());
const lastIDs = React.useRef<{
[threadID: string]: string,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 30, 3:14 PM (21 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2601226
Default Alt Text
D9775.id33774.diff (7 KB)
Attached To
Mode
D9775: [Flow202][web][skip-ci] [9/x] Fix Flow issues with types being underconstrained
Attached
Detach File
Event Timeline
Log In to Comment