import { AuthenticationStatus } from "../../enums/authenticationStatus"; import { KdfType } from "../../enums/kdfType"; import { UriMatchType } from "../../enums/uriMatchType"; import { OrganizationData } from "../data/organizationData"; import { ProviderData } from "../data/providerData"; import { EncString } from "./encString"; import { EnvironmentUrls } from "./environmentUrls"; import { SymmetricCryptoKey } from "./symmetricCryptoKey"; export class EncryptionPair { encrypted?: TEncrypted; decrypted?: TDecrypted; } export class DataEncryptionPair { encrypted?: { [id: string]: TEncrypted }; decrypted?: TDecrypted[]; } export class AccountData { ciphers?: any = new DataEncryptionPair(); folders?: DataEncryptionPair = new DataEncryptionPair(); localData?: any; sends?: any = new DataEncryptionPair(); collections?: DataEncryptionPair = new DataEncryptionPair(); policies?: DataEncryptionPair = new DataEncryptionPair(); passwordGenerationHistory?: EncryptionPair = new EncryptionPair(); addEditCipherInfo?: any; eventCollection?: any[]; organizations?: { [id: string]: OrganizationData }; providers?: { [id: string]: ProviderData }; } export class AccountKeys { cryptoMasterKey?: SymmetricCryptoKey; cryptoMasterKeyAuto?: string; cryptoMasterKeyB64?: string; cryptoMasterKeyBiometric?: string; cryptoSymmetricKey?: EncryptionPair = new EncryptionPair< string, SymmetricCryptoKey >(); organizationKeys?: EncryptionPair> = new EncryptionPair< any, Map >(); providerKeys?: EncryptionPair> = new EncryptionPair< any, Map >(); privateKey?: EncryptionPair = new EncryptionPair(); legacyEtmKey?: SymmetricCryptoKey; publicKey?: ArrayBuffer; apiKeyClientSecret?: string; } export class AccountProfile { apiKeyClientId?: string; authenticationStatus?: AuthenticationStatus; convertAccountToKeyConnector?: boolean; email?: string; emailVerified?: boolean; entityId?: string; entityType?: string; everBeenUnlocked?: boolean; forcePasswordReset?: boolean; hasPremiumPersonally?: boolean; lastSync?: string; userId?: string; usesKeyConnector?: boolean; keyHash?: string; kdfIterations?: number; kdfType?: KdfType; } export class AccountSettings { autoConfirmFingerPrints?: boolean; autoFillOnPageLoadDefault?: boolean; biometricLocked?: boolean; biometricUnlock?: boolean; clearClipboard?: number; collapsedGroupings?: string[]; defaultUriMatch?: UriMatchType; disableAddLoginNotification?: boolean; disableAutoBiometricsPrompt?: boolean; disableAutoTotpCopy?: boolean; disableBadgeCounter?: boolean; disableChangedPasswordNotification?: boolean; disableContextMenuItem?: boolean; disableGa?: boolean; dontShowCardsCurrentTab?: boolean; dontShowIdentitiesCurrentTab?: boolean; enableAlwaysOnTop?: boolean; enableAutoFillOnPageLoad?: boolean; enableBiometric?: boolean; enableFullWidth?: boolean; enableGravitars?: boolean; environmentUrls: EnvironmentUrls = new EnvironmentUrls(); equivalentDomains?: any; minimizeOnCopyToClipboard?: boolean; neverDomains?: { [id: string]: any }; passwordGenerationOptions?: any; usernameGenerationOptions?: any; generatorOptions?: any; pinProtected?: EncryptionPair = new EncryptionPair(); protectedPin?: string; settings?: any; // TODO: Merge whatever is going on here into the AccountSettings model properly vaultTimeout?: number; vaultTimeoutAction?: string = "lock"; } export class AccountTokens { accessToken?: string; decodedToken?: any; refreshToken?: string; securityStamp?: string; } export class Account { data?: AccountData = new AccountData(); keys?: AccountKeys = new AccountKeys(); profile?: AccountProfile = new AccountProfile(); settings?: AccountSettings = new AccountSettings(); tokens?: AccountTokens = new AccountTokens(); constructor(init: Partial) { Object.assign(this, { data: { ...new AccountData(), ...init?.data, }, keys: { ...new AccountKeys(), ...init?.keys, }, profile: { ...new AccountProfile(), ...init?.profile, }, settings: { ...new AccountSettings(), ...init?.settings, }, tokens: { ...new AccountTokens(), ...init?.tokens, }, }); } }