From 3cd0d1f423785a3f01454f570413a85d3adf45a1 Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Wed, 11 Aug 2021 16:44:38 -0700 Subject: [PATCH] Migrate DeviceIdentityStore to TypeScript --- src/matrix/storage/idb/Transaction.js | 2 +- ...dentityStore.js => DeviceIdentityStore.ts} | 43 ++++++++++++------- 2 files changed, 29 insertions(+), 16 deletions(-) rename src/matrix/storage/idb/stores/{DeviceIdentityStore.js => DeviceIdentityStore.ts} (62%) diff --git a/src/matrix/storage/idb/Transaction.js b/src/matrix/storage/idb/Transaction.js index f1d0eb3b..a99dae7a 100644 --- a/src/matrix/storage/idb/Transaction.js +++ b/src/matrix/storage/idb/Transaction.js @@ -27,7 +27,7 @@ import {RoomMemberStore} from "./stores/RoomMemberStore"; import {TimelineFragmentStore} from "./stores/TimelineFragmentStore"; import {PendingEventStore} from "./stores/PendingEventStore"; import {UserIdentityStore} from "./stores/UserIdentityStore"; -import {DeviceIdentityStore} from "./stores/DeviceIdentityStore.js"; +import {DeviceIdentityStore} from "./stores/DeviceIdentityStore"; import {OlmSessionStore} from "./stores/OlmSessionStore.js"; import {InboundGroupSessionStore} from "./stores/InboundGroupSessionStore.js"; import {OutboundGroupSessionStore} from "./stores/OutboundGroupSessionStore"; diff --git a/src/matrix/storage/idb/stores/DeviceIdentityStore.js b/src/matrix/storage/idb/stores/DeviceIdentityStore.ts similarity index 62% rename from src/matrix/storage/idb/stores/DeviceIdentityStore.js rename to src/matrix/storage/idb/stores/DeviceIdentityStore.ts index 207cfb20..b04ce6d7 100644 --- a/src/matrix/storage/idb/stores/DeviceIdentityStore.js +++ b/src/matrix/storage/idb/stores/DeviceIdentityStore.ts @@ -15,33 +15,46 @@ limitations under the License. */ import {MAX_UNICODE, MIN_UNICODE} from "./common"; +import {Store} from "../Store"; -function encodeKey(userId, deviceId) { +interface DeviceIdentity { + userId: string; + deviceId: string; + ed25519Key: string; + curve25519Key: string; + algorithms: string[]; + displayName: string; + key: string; +} + +function encodeKey(userId: string, deviceId: string): string { return `${userId}|${deviceId}`; } -function decodeKey(key) { +function decodeKey(key: string): { userId: string, deviceId: string } { const [userId, deviceId] = key.split("|"); return {userId, deviceId}; } export class DeviceIdentityStore { - constructor(store) { + private _store: Store; + + constructor(store: Store) { this._store = store; } - getAllForUserId(userId) { + getAllForUserId(userId: string): Promise { const range = this._store.IDBKeyRange.lowerBound(encodeKey(userId, "")); return this._store.selectWhile(range, device => { return device.userId === userId; }); } - async getAllDeviceIds(userId) { - const deviceIds = []; + async getAllDeviceIds(userId: string): Promise { + const deviceIds: string[] = []; const range = this._store.IDBKeyRange.lowerBound(encodeKey(userId, "")); await this._store.iterateKeys(range, key => { - const decodedKey = decodeKey(key); + const decodedKey = decodeKey(key as string); // prevent running into the next room if (decodedKey.userId === userId) { deviceIds.push(decodedKey.deviceId); @@ -52,27 +65,27 @@ export class DeviceIdentityStore { return deviceIds; } - get(userId, deviceId) { + get(userId: string, deviceId: string): Promise { return this._store.get(encodeKey(userId, deviceId)); } - set(deviceIdentity) { + set(deviceIdentity: DeviceIdentity): Promise { deviceIdentity.key = encodeKey(deviceIdentity.userId, deviceIdentity.deviceId); - this._store.put(deviceIdentity); + return this._store.put(deviceIdentity); } - getByCurve25519Key(curve25519Key) { + getByCurve25519Key(curve25519Key: string): Promise { return this._store.index("byCurve25519Key").get(curve25519Key); } - remove(userId, deviceId) { - this._store.delete(encodeKey(userId, deviceId)); + remove(userId: string, deviceId: string): Promise { + return this._store.delete(encodeKey(userId, deviceId)); } - removeAllForUser(userId) { + removeAllForUser(userId: string): Promise { // exclude both keys as they are theoretical min and max, // but we should't have a match for just the room id, or room id with max const range = this._store.IDBKeyRange.bound(encodeKey(userId, MIN_UNICODE), encodeKey(userId, MAX_UNICODE), true, true); - this._store.delete(range); + return this._store.delete(range); } }