From 063acfef404b9a97b11b16d9a34c09db12522ab7 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Fri, 2 Sep 2022 06:09:06 +1000 Subject: [PATCH] Add typing to localData object (#3368) --- libs/common/src/abstractions/state.service.ts | 8 ++++++-- libs/common/src/models/data/localData.ts | 4 ++++ libs/common/src/models/domain/cipher.ts | 5 +++-- libs/common/src/models/view/cipherView.ts | 3 ++- libs/common/src/services/state.service.ts | 9 +++++++-- 5 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 libs/common/src/models/data/localData.ts diff --git a/libs/common/src/abstractions/state.service.ts b/libs/common/src/abstractions/state.service.ts index 737a51c10b..b976a6195a 100644 --- a/libs/common/src/abstractions/state.service.ts +++ b/libs/common/src/abstractions/state.service.ts @@ -8,6 +8,7 @@ import { CollectionData } from "../models/data/collectionData"; import { EncryptedOrganizationKeyData } from "../models/data/encryptedOrganizationKeyData"; import { EventData } from "../models/data/eventData"; import { FolderData } from "../models/data/folderData"; +import { LocalData } from "../models/data/localData"; import { OrganizationData } from "../models/data/organizationData"; import { PolicyData } from "../models/data/policyData"; import { ProviderData } from "../models/data/providerData"; @@ -245,8 +246,11 @@ export abstract class StateService { setLastActive: (value: number, options?: StorageOptions) => Promise; getLastSync: (options?: StorageOptions) => Promise; setLastSync: (value: string, options?: StorageOptions) => Promise; - getLocalData: (options?: StorageOptions) => Promise; - setLocalData: (value: string, options?: StorageOptions) => Promise; + getLocalData: (options?: StorageOptions) => Promise<{ [cipherId: string]: LocalData }>; + setLocalData: ( + value: { [cipherId: string]: LocalData }, + options?: StorageOptions + ) => Promise; getLocale: (options?: StorageOptions) => Promise; setLocale: (value: string, options?: StorageOptions) => Promise; getMainWindowSize: (options?: StorageOptions) => Promise; diff --git a/libs/common/src/models/data/localData.ts b/libs/common/src/models/data/localData.ts new file mode 100644 index 0000000000..9ba820a58a --- /dev/null +++ b/libs/common/src/models/data/localData.ts @@ -0,0 +1,4 @@ +export type LocalData = { + lastUsedDate?: number; + lastLaunched?: number; +}; diff --git a/libs/common/src/models/domain/cipher.ts b/libs/common/src/models/domain/cipher.ts index b25be35520..132bcaf3bd 100644 --- a/libs/common/src/models/domain/cipher.ts +++ b/libs/common/src/models/domain/cipher.ts @@ -1,6 +1,7 @@ import { CipherRepromptType } from "../../enums/cipherRepromptType"; import { CipherType } from "../../enums/cipherType"; import { CipherData } from "../data/cipherData"; +import { LocalData } from "../data/localData"; import { CipherView } from "../view/cipherView"; import { Attachment } from "./attachment"; @@ -26,7 +27,7 @@ export class Cipher extends Domain { edit: boolean; viewPassword: boolean; revisionDate: Date; - localData: any; + localData: LocalData; login: Login; identity: Identity; card: Card; @@ -38,7 +39,7 @@ export class Cipher extends Domain { deletedDate: Date; reprompt: CipherRepromptType; - constructor(obj?: CipherData, localData: any = null) { + constructor(obj?: CipherData, localData: LocalData = null) { super(); if (obj == null) { return; diff --git a/libs/common/src/models/view/cipherView.ts b/libs/common/src/models/view/cipherView.ts index 7471be89b6..4181c11d35 100644 --- a/libs/common/src/models/view/cipherView.ts +++ b/libs/common/src/models/view/cipherView.ts @@ -3,6 +3,7 @@ import { Jsonify } from "type-fest"; import { CipherRepromptType } from "../../enums/cipherRepromptType"; import { CipherType } from "../../enums/cipherType"; import { LinkedIdType } from "../../enums/linkedIdType"; +import { LocalData } from "../data/localData"; import { Cipher } from "../domain/cipher"; import { AttachmentView } from "./attachmentView"; @@ -25,7 +26,7 @@ export class CipherView implements View { organizationUseTotp = false; edit = false; viewPassword = true; - localData: any; + localData: LocalData; login = new LoginView(); identity = new IdentityView(); card = new CardView(); diff --git a/libs/common/src/services/state.service.ts b/libs/common/src/services/state.service.ts index f2c5a5618d..6dd6187cc9 100644 --- a/libs/common/src/services/state.service.ts +++ b/libs/common/src/services/state.service.ts @@ -16,6 +16,7 @@ import { CollectionData } from "../models/data/collectionData"; import { EncryptedOrganizationKeyData } from "../models/data/encryptedOrganizationKeyData"; import { EventData } from "../models/data/eventData"; import { FolderData } from "../models/data/folderData"; +import { LocalData } from "../models/data/localData"; import { OrganizationData } from "../models/data/organizationData"; import { PolicyData } from "../models/data/policyData"; import { ProviderData } from "../models/data/providerData"; @@ -1747,12 +1748,16 @@ export class StateService< ); } - async getLocalData(options?: StorageOptions): Promise { + async getLocalData(options?: StorageOptions): Promise<{ [cipherId: string]: LocalData }> { return ( await this.getAccount(this.reconcileOptions(options, await this.defaultOnDiskLocalOptions())) )?.data?.localData; } - async setLocalData(value: string, options?: StorageOptions): Promise { + + async setLocalData( + value: { [cipherId: string]: LocalData }, + options?: StorageOptions + ): Promise { const account = await this.getAccount( this.reconcileOptions(options, await this.defaultOnDiskLocalOptions()) );