mirror of
https://github.com/bitwarden/browser
synced 2026-02-26 17:43:22 +00:00
* Add creationDate of account to AccountInfo * Added initialization of creationDate. * Removed extra changes. * Fixed tests to initialize creation date * Added helper method to abstract account initialization in tests. * More test updates. * Linting * Additional test fixes. * Fixed spec reference * Fixed imports * Linting. * Fixed browser test. * Modified tsconfig to reference spec file. * Fixed import. * Removed dependency on os. This is necessary so that the @bitwarden/common/spec lib package can be referenced in tests without node. * Revert "Removed dependency on os. This is necessary so that the @bitwarden/common/spec lib package can be referenced in tests without node." This reverts commit669f6557b6. * Updated stories to hard-code new field. * Removed changes to tsconfig * Revert "Removed changes to tsconfig" This reverts commitb7d916e8dc. * Updated to use Date * Updated to use Date on sync. * Changes to tests that can't use mock function * Prettier updates * Update equality to handle Date type. * Change to type comparison. * Simplified equality comparison to just use properties. * Added comment. * Updated comment to reference Date. * Added back in internal method tests.
110 lines
3.7 KiB
TypeScript
110 lines
3.7 KiB
TypeScript
import { Observable } from "rxjs";
|
|
|
|
import { UserId } from "../../types/guid";
|
|
|
|
/**
|
|
* Holds state that represents a user's account with Bitwarden.
|
|
* Any additions here should be added to the equality check in the AccountService
|
|
* to ensure that emissions are done on every change.
|
|
*
|
|
* @property email - User's email address.
|
|
* @property emailVerified - Whether the email has been verified.
|
|
* @property name - User's display name (optional).
|
|
* @property creationDate - Date when the account was created.
|
|
* Will be undefined immediately after login until the first sync completes.
|
|
*/
|
|
export type AccountInfo = {
|
|
email: string;
|
|
emailVerified: boolean;
|
|
name: string | undefined;
|
|
creationDate: Date | undefined;
|
|
};
|
|
|
|
export type Account = { id: UserId } & AccountInfo;
|
|
export abstract class AccountService {
|
|
abstract accounts$: Observable<Record<UserId, AccountInfo>>;
|
|
|
|
abstract activeAccount$: Observable<Account | null>;
|
|
|
|
/**
|
|
* Observable of the last activity time for each account.
|
|
*/
|
|
abstract accountActivity$: Observable<Record<UserId, Date>>;
|
|
/** Observable of the new device login verification property for the account. */
|
|
abstract accountVerifyNewDeviceLogin$: Observable<boolean>;
|
|
/** Account list in order of descending recency */
|
|
abstract sortedUserIds$: Observable<UserId[]>;
|
|
/** Next account that is not the current active account */
|
|
abstract nextUpAccount$: Observable<Account>;
|
|
/** Observable to display the header */
|
|
abstract showHeader$: Observable<boolean>;
|
|
/**
|
|
* Updates the `accounts$` observable with the new account data.
|
|
*
|
|
* @note Also sets the last active date of the account to `now`.
|
|
* @param userId
|
|
* @param accountData
|
|
*/
|
|
abstract addAccount(userId: UserId, accountData: AccountInfo): Promise<void>;
|
|
/**
|
|
* updates the `accounts$` observable with the new preferred name for the account.
|
|
* @param userId
|
|
* @param name
|
|
*/
|
|
abstract setAccountName(userId: UserId, name: string): Promise<void>;
|
|
/**
|
|
* updates the `accounts$` observable with the new email for the account.
|
|
* @param userId
|
|
* @param email
|
|
*/
|
|
abstract setAccountEmail(userId: UserId, email: string): Promise<void>;
|
|
/**
|
|
* updates the `accounts$` observable with the new email verification status for the account.
|
|
* @param userId
|
|
* @param emailVerified
|
|
*/
|
|
abstract setAccountEmailVerified(userId: UserId, emailVerified: boolean): Promise<void>;
|
|
/**
|
|
* updates the `accounts$` observable with the creation date for the account.
|
|
* @param userId
|
|
* @param creationDate
|
|
*/
|
|
abstract setAccountCreationDate(userId: UserId, creationDate: Date): Promise<void>;
|
|
/**
|
|
* updates the `accounts$` observable with the new VerifyNewDeviceLogin property for the account.
|
|
* @param userId
|
|
* @param VerifyNewDeviceLogin
|
|
*/
|
|
abstract setAccountVerifyNewDeviceLogin(
|
|
userId: UserId,
|
|
verifyNewDeviceLogin: boolean,
|
|
): Promise<void>;
|
|
/**
|
|
* Updates the `activeAccount$` observable with the new active account.
|
|
* @param userId
|
|
*/
|
|
abstract switchAccount(userId: UserId | null): Promise<void>;
|
|
/**
|
|
* Cleans personal information for the given account from the `accounts$` observable. Does not remove the userId from the observable.
|
|
*
|
|
* @note Also sets the last active date of the account to `null`.
|
|
* @param userId
|
|
*/
|
|
abstract clean(userId: UserId): Promise<void>;
|
|
/**
|
|
* Updates the given user's last activity time.
|
|
* @param userId
|
|
* @param lastActivity
|
|
*/
|
|
abstract setAccountActivity(userId: UserId, lastActivity: Date): Promise<void>;
|
|
/**
|
|
* Show the account switcher.
|
|
* @param value
|
|
*/
|
|
abstract setShowHeader(visible: boolean): Promise<void>;
|
|
}
|
|
|
|
export abstract class InternalAccountService extends AccountService {
|
|
abstract delete(): void;
|
|
}
|