1
0
mirror of https://github.com/bitwarden/jslib synced 2025-12-21 18:53:32 +00:00

[refactor] Expand StateService into a full coverage storage proxy

* Expand StateService to allow it to manage all data points of the application state regardless of memory.
* Expand StateService to allow for storing and managing multiple accounts
This commit is contained in:
addison
2021-11-01 12:45:57 -04:00
parent 4f71c1832c
commit 7e59fdc899
5 changed files with 1745 additions and 18 deletions

View File

@@ -1,6 +1,241 @@
import { BehaviorSubject } from 'rxjs';
import { KdfType } from '../enums/kdfType';
import { UriMatchType } from '../enums/uriMatchType';
import { CipherData } from '../models/data/cipherData';
import { CollectionData } from '../models/data/collectionData';
import { EventData } from '../models/data/eventData';
import { FolderData } from '../models/data/folderData';
import { OrganizationData } from '../models/data/organizationData';
import { PolicyData } from '../models/data/policyData';
import { ProviderData } from '../models/data/providerData';
import { SendData } from '../models/data/sendData';
import { Account } from '../models/domain/account';
import { EncString } from '../models/domain/encString';
import { GeneratedPasswordHistory } from '../models/domain/generatedPasswordHistory';
import { Policy } from '../models/domain/policy';
import { StorageOptions } from '../models/domain/storageOptions';
import { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';
import { CipherView } from '../models/view/cipherView';
import { CollectionView } from '../models/view/collectionView';
import { FolderView } from '../models/view/folderView';
import { SendView } from '../models/view/sendView';
export abstract class StateService {
get: <T>(key: string) => Promise<T>;
save: (key: string, obj: any) => Promise<any>;
remove: (key: string) => Promise<any>;
purge: () => Promise<any>;
accounts: BehaviorSubject<{ [userId: string]: Account }>;
setActiveUser: (userId: string) => Promise<void>;
addAccount: (account: Account) => Promise<void>;
purge: (options?: StorageOptions) => Promise<void>;
getAccessToken: (options?: StorageOptions) => Promise<string>;
getAddEditCipherInfo: (options?: StorageOptions) => Promise<any>;
getAlwaysShowDock: (options?: StorageOptions) => Promise<boolean>;
getApiKeyClientId: (options?: StorageOptions) => Promise<string>;
getApiKeyClientSecret: (options?: StorageOptions) => Promise<string>;
getAutoFillOnPageLoadDefault: (options?: StorageOptions) => Promise<boolean>;
getBiometricAwaitingAcceptance: (options?: StorageOptions) => Promise<boolean>;
getBiometricFingerprintValidated: (options?: StorageOptions) => Promise<boolean>;
getBiometricLocked: (options?: StorageOptions) => Promise<boolean>;
getBiometricText: (options?: StorageOptions) => Promise<string>;
getBiometricUnlock: (options?: StorageOptions) => Promise<boolean>;
getCanAccessPremium: (options?: StorageOptions) => Promise<boolean>;
getClearClipboard: (options?: StorageOptions) => Promise<number>;
getCollapsedGroupings: (options?: StorageOptions) => Promise<Set<string>>;
getCryptoMasterKey: (options?: StorageOptions) => Promise<SymmetricCryptoKey>;
getCryptoMasterKeyB64: (options: StorageOptions) => Promise<string>;
getDecodedToken: (options?: StorageOptions) => Promise<any>;
getDecryptedCiphers: (options?: StorageOptions) => Promise<CipherView[]>;
getDecryptedCollections: (options?: StorageOptions) => Promise<CollectionView[]>;
getDecryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise<SymmetricCryptoKey>;
getDecryptedFolders: (options?: StorageOptions) => Promise<FolderView[]>;
getDecryptedOrganizationKeys: (options?: StorageOptions) => Promise<Map<string, SymmetricCryptoKey>>;
getDecryptedPasswordGenerationHistory: (options?: StorageOptions) => Promise<GeneratedPasswordHistory[]>;
getDecryptedPinProtected: (options?: StorageOptions) => Promise<EncString>;
getDecryptedPolicies: (options?: StorageOptions) => Promise<Policy[]>;
getDecryptedPrivateKey: (options?: StorageOptions) => Promise<ArrayBuffer>;
getDecryptedProviderKeys: (options?: StorageOptions) => Promise<Map<string, SymmetricCryptoKey>>;
getDecryptedSends: (options?: StorageOptions) => Promise<SendView[]>;
getDefaultUriMatch: (options?: StorageOptions) => Promise<UriMatchType>;
getDisableAddLoginNotification: (options?: StorageOptions) => Promise<boolean>;
getDisableAutoBiometricsPrompt: (options?: StorageOptions) => Promise<boolean>;
getDisableAutoTotpCopy: (options?: StorageOptions) => Promise<boolean>;
getDisableBadgeCounter: (options?: StorageOptions) => Promise<boolean>;
getDisableChangedPasswordNotification: (options?: StorageOptions) => Promise<boolean>;
getDisableContextMenuItem: (options?: StorageOptions) => Promise<boolean>;
getDisableFavicon: (options?: StorageOptions) => Promise<boolean>;
getDisableGa: (options?: StorageOptions) => Promise<boolean>;
getDontShowCardsCurrentTab: (options?: StorageOptions) => Promise<boolean>;
getDontShowIdentitiesCurrentTab: (options?: StorageOptions) => Promise<boolean>;
getEmail: (options?: StorageOptions) => Promise<string>;
getEmailVerified: (options?: StorageOptions) => Promise<boolean>;
getEnableAlwaysOnTop: (options?: StorageOptions) => Promise<boolean>;
getEnableAutoFillOnPageLoad: (options?: StorageOptions) => Promise<boolean>;
getEnableBiometric: (options?: StorageOptions) => Promise<boolean>;
getEnableBrowserIntegration: (options?: StorageOptions) => Promise<boolean>;
getEnableBrowserIntegrationFingerprint: (options?: StorageOptions) => Promise<boolean>;
getEnableCloseToTray: (options?: StorageOptions) => Promise<boolean>;
getEnableGravitars: (options?: StorageOptions) => Promise<boolean>;
getEnableMinimizeToTray: (options?: StorageOptions) => Promise<boolean>;
getEnableStartToTray: (options?: StorageOptions) => Promise<boolean>;
getEnableTray: (options?: StorageOptions) => Promise<boolean>;
getEncryptedCiphers: (options?: StorageOptions) => Promise<{ [id: string]: CipherData }>;
getEncryptedCollections: (options?: StorageOptions) => Promise<{ [id: string]: CollectionData }>;
getEncryptedCryptoSymmetricKey: (options?: StorageOptions) => Promise<string>;
getEncryptedFolders: (options?: StorageOptions) => Promise<{ [id: string]: FolderData }>;
getEncryptedOrganizationKeys: (options?: StorageOptions) => Promise<any>;
getEncryptedPasswordGenerationHistory: (options?: StorageOptions) => Promise<GeneratedPasswordHistory[]>;
getEncryptedPinProtected: (options?: StorageOptions) => Promise<string>;
getEncryptedPolicies: (options?: StorageOptions) => Promise<{ [id: string]: PolicyData }>;
getEncryptedPrivateKey: (options?: StorageOptions) => Promise<string>;
getEncryptedProviderKeys: (options?: StorageOptions) => Promise<any>;
getEncryptedSends: (options?: StorageOptions) => Promise<{ [id: string]: SendData }>;
getEntityId: (options?: StorageOptions) => Promise<string>;
getEntityType: (options?: StorageOptions) => Promise<any>;
getEnvironmentUrls: (options?: StorageOptions) => Promise<any>;
getEquivalentDomains: (options?: StorageOptions) => Promise<any>;
getEventCollection: (options?: StorageOptions) => Promise<EventData[]>;
getEverBeenUnlocked: (options?: StorageOptions) => Promise<boolean>;
getForcePasswordReset: (options?: StorageOptions) => Promise<boolean>;
getInstalledVersion: (options?: StorageOptions) => Promise<string>;
getIsAuthenticated: (options?: StorageOptions) => Promise<boolean>;
getKdfIterations: (options?: StorageOptions) => Promise<number>;
getKdfType: (options?: StorageOptions) => Promise<KdfType>;
getKeyHash: (options?: StorageOptions) => Promise<string>;
getLastActive: (options?: StorageOptions) => Promise<number>;
getLastSync: (options?: StorageOptions) => Promise<string>;
getLegacyEtmKey: (options?: StorageOptions) => Promise<SymmetricCryptoKey>;
getLocalData: (options?: StorageOptions) => Promise<any>;
getLocale: (options?: StorageOptions) => Promise<string>;
getMainWindowSize: (options?: StorageOptions) => Promise<number>;
getMinimizeOnCopyToClipboard: (options?: StorageOptions) => Promise<boolean>;
getNeverDomains: (options?: StorageOptions) => Promise<{ [id: string]: any }>;
getNoAutoPromptBiometrics: (options?: StorageOptions) => Promise<boolean>;
getNoAutoPromptBiometricsText: (options?: StorageOptions) => Promise<string>;
getOpenAtLogin: (options?: StorageOptions) => Promise<boolean>;
getOrganizationInvitation: (options?: StorageOptions) => Promise<any>;
getOrganizations: (options?: StorageOptions) => Promise<{ [id: string]: OrganizationData }>;
getPasswordGenerationOptions: (options?: StorageOptions) => Promise<any>;
getProtectedPin: (options?: StorageOptions) => Promise<string>;
getProviders: (options?: StorageOptions) => Promise<{ [id: string]: ProviderData }>;
getPublicKey: (options?: StorageOptions) => Promise<ArrayBuffer>;
getRefreshToken: (options?: StorageOptions) => Promise<string>;
getRememberEmail: (options?: StorageOptions) => Promise<boolean>;
getRememberedEmail: (options?: StorageOptions) => Promise<string>;
getSecurityStamp: (options?: StorageOptions) => Promise<string>;
getSettings: (options?: StorageOptions) => Promise<any>;
getSsoCodeVerifier: (options?: StorageOptions) => Promise<string>;
getSsoOrgIdentifier: (options?: StorageOptions) => Promise<string>;
getSsoState: (options?: StorageOptions) => Promise<string>;
getTheme: (options?: StorageOptions) => Promise<string>;
getTwoFactorToken: (options?: StorageOptions) => Promise<string>;
getUserId: (options?: StorageOptions) => Promise<string>;
getVaultTimeout: (options?: StorageOptions) => Promise<number>;
getVaultTimeoutAction: (options?: StorageOptions) => Promise<string>;
getWindow: () => Promise<Map<string, any>>;
setAccessToken: (value: string, options?: StorageOptions) => Promise<void>;
setAddEditCipherInfo: (value: any, options?: StorageOptions) => Promise<void>;
setAlwaysShowDock: (value: boolean, options?: StorageOptions) => Promise<void>;
setApiKeyClientId: (value: string, options?: StorageOptions) => Promise<void>;
setApiKeyClientSecret: (value: string, options?: StorageOptions) => Promise<void>;
setAutoFillOnPageLoadDefault: (value: boolean, options?: StorageOptions) => Promise<void>;
setBiometricAwaitingAcceptance: (value: boolean, options?: StorageOptions) => Promise<void>;
setBiometricFingerprintValidated: (value: boolean, options?: StorageOptions) => Promise<void>;
setBiometricLocked: (value: boolean, options?: StorageOptions) => Promise<void>;
setBiometricText: (value: string, options?: StorageOptions) => Promise<void>;
setBiometricUnlock: (value: boolean, options?: StorageOptions) => Promise<void>;
setClearClipboard: (value: number, options?: StorageOptions) => Promise<void>;
setCollapsedGroupings: (value: Set<string>, options?: StorageOptions) => Promise<void>;
setCryptoMasterKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise<void>;
setCryptoMasterKeyB64: (value: string, options: StorageOptions) => Promise<void>;
setDecodedToken: (value: any, options?: StorageOptions) => Promise<void>;
setDecryptedCiphers: (value: CipherView[], options?: StorageOptions) => Promise<void>;
setDecryptedCollections: (value: CollectionView[], options?: StorageOptions) => Promise<void>;
setDecryptedCryptoSymmetricKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise<void>;
setDecryptedFolders: (value: FolderView[], options?: StorageOptions) => Promise<void>;
setDecryptedOrganizationKeys: (value: Map<string, SymmetricCryptoKey>, options?: StorageOptions) => Promise<void>;
setDecryptedPasswordGenerationHistory: (value: GeneratedPasswordHistory[], options?: StorageOptions) => Promise<void>;
setDecryptedPinProtected: (value: EncString, options?: StorageOptions) => Promise<void>;
setDecryptedPolicies: (value: Policy[], options?: StorageOptions) => Promise<void>;
setDecryptedPrivateKey: (value: ArrayBuffer, options?: StorageOptions) => Promise<void>;
setDecryptedProviderKeys: (value: Map<string, SymmetricCryptoKey>, options?: StorageOptions) => Promise<void>;
setDecryptedSends: (value: SendView[], options?: StorageOptions) => Promise<void>;
setDefaultUriMatch: (value: UriMatchType, options?: StorageOptions) => Promise<void>;
setDisableAddLoginNotification: (value: boolean, options?: StorageOptions) => Promise<void>;
setDisableAutoBiometricsPrompt: (value: boolean, options?: StorageOptions) => Promise<void>;
setDisableAutoTotpCopy: (value: boolean, options?: StorageOptions) => Promise<void>;
setDisableBadgeCounter: (value: boolean, options?: StorageOptions) => Promise<void>;
setDisableChangedPasswordNotification: (value: boolean, options?: StorageOptions) => Promise<void>;
setDisableContextMenuItem: (value: boolean, options?: StorageOptions) => Promise<void>;
setDisableFavicon: (value: boolean, options?: StorageOptions) => Promise<void>;
setDisableGa: (value: boolean, options?: StorageOptions) => Promise<void>;
setDontShowCardsCurrentTab: (value: boolean, options?: StorageOptions) => Promise<void>;
setDontShowIdentitiesCurrentTab: (value: boolean, options?: StorageOptions) => Promise<void>;
setEmail: (value: string, options?: StorageOptions) => Promise<void>;
setEmailVerified: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableAlwaysOnTop: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableAutoFillOnPageLoad: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableBiometric: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableBrowserIntegration: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableBrowserIntegrationFingerprint: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableCloseToTray: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableGravitars: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableMinimizeToTray: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableStartToTray: (value: boolean, options?: StorageOptions) => Promise<void>;
setEnableTray: (value: boolean, options?: StorageOptions) => Promise<void>;
setEncryptedCiphers: (value: { [id: string]: CipherData }, options?: StorageOptions) => Promise<void>;
setEncryptedCollections: (value: { [id: string]: CollectionData }, options?: StorageOptions) => Promise<void>;
setEncryptedCryptoSymmetricKey: (value: string, options?: StorageOptions) => Promise<void>;
setEncryptedFolders: (value: { [id: string]: FolderData }, options?: StorageOptions) => Promise<void>;
setEncryptedOrganizationKeys: (value: Map<string, SymmetricCryptoKey>, options?: StorageOptions) => Promise<void>;
setEncryptedPasswordGenerationHistory: (value: GeneratedPasswordHistory[], options?: StorageOptions) => Promise<void>;
setEncryptedPinProtected: (value: string, options?: StorageOptions) => Promise<void>;
setEncryptedPolicies: (value: { [id: string]: PolicyData }, options?: StorageOptions) => Promise<void>;
setEncryptedPrivateKey: (value: string, options?: StorageOptions) => Promise<void>;
setEncryptedProviderKeys: (value: any, options?: StorageOptions) => Promise<void>;
setEncryptedSends: (value: { [id: string]: SendData }, options?: StorageOptions) => Promise<void>;
setEntityId: (value: string, options?: StorageOptions) => Promise<void>;
setEntityType: (value: string, options?: StorageOptions) => Promise<void>;
setEnvironmentUrls: (value: any, options?: StorageOptions) => Promise<void>;
setEquivalentDomains: (value: string, options?: StorageOptions) => Promise<void>;
setEventCollection: (value: EventData[], options?: StorageOptions) => Promise<void>;
setEverBeenUnlocked: (value: boolean, options?: StorageOptions) => Promise<void>;
setForcePasswordReset: (value: boolean, options?: StorageOptions) => Promise<void>;
setInstalledVersion: (value: string, options?: StorageOptions) => Promise<void>;
setKdfIterations: (value: number, options?: StorageOptions) => Promise<void>;
setKdfType: (value: KdfType, options?: StorageOptions) => Promise<void>;
setKeyHash: (value: string, options?: StorageOptions) => Promise<void>;
setLastActive: (value: number, options?: StorageOptions) => Promise<void>;
setLastSync: (value: string, options?: StorageOptions) => Promise<void>;
setLegacyEtmKey: (value: SymmetricCryptoKey, options?: StorageOptions) => Promise<void>;
setLocalData: (value: string, options?: StorageOptions) => Promise<void>;
setLocale: (value: string, options?: StorageOptions) => Promise<void>;
setMainWindowSize: (value: number, options?: StorageOptions) => Promise<void>;
setMinimizeOnCopyToClipboard: (value: boolean, options?: StorageOptions) => Promise<void>;
setNeverDomains: (value: { [id: string]: any }, options?: StorageOptions) => Promise<void>;
setNoAutoPromptBiometrics: (value: boolean, options?: StorageOptions) => Promise<void>;
setNoAutoPromptBiometricsText: (value: string, options?: StorageOptions) => Promise<void>;
setOpenAtLogin: (value: boolean, options?: StorageOptions) => Promise<void>;
setOrganizationInvitation: (value: any, options?: StorageOptions) => Promise<void>;
setOrganizations: (value: { [id: string]: OrganizationData }, options?: StorageOptions) => Promise<void>;
setPasswordGenerationOptions: (value: any, options?: StorageOptions) => Promise<void>;
setProtectedPin: (value: string, options?: StorageOptions) => Promise<void>;
setProviders: (value: { [id: string]: ProviderData }, options?: StorageOptions) => Promise<void>;
setPublicKey: (value: ArrayBuffer, options?: StorageOptions) => Promise<void>;
setRefreshToken: (value: string, options?: StorageOptions) => Promise<void>;
setRememberedEmail: (value: string, options?: StorageOptions) => Promise<void>;
setSecurityStamp: (value: string, options?: StorageOptions) => Promise<void>;
setSettings: (value: string, options?: StorageOptions) => Promise<void>;
setSsoCodeVerifier: (value: string, options?: StorageOptions) => Promise<void>;
setSsoOrganizationIdentifier: (value: string, options?: StorageOptions) => Promise<void>;
setSsoState: (value: string, options?: StorageOptions) => Promise<void>;
setTheme: (value: string, options?: StorageOptions) => Promise<void>;
setTwoFactorToken: (value: string, options?: StorageOptions) => Promise<void>;
setVaultTimeout: (value: number, options?: StorageOptions) => Promise<void>;
setVaultTimeoutAction: (value: string, options?: StorageOptions) => Promise<void>;
setWindow: (value: Map<string, any>) => Promise<void>;
}