mirror of
https://github.com/bitwarden/browser
synced 2026-02-20 19:34:03 +00:00
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { Injectable, inject } from "@angular/core";
|
|
|
|
import { ApiService } from "@bitwarden/common/abstractions/api.service";
|
|
import { ProfileResponse } from "@bitwarden/common/models/response/profile.response";
|
|
|
|
@Injectable({
|
|
providedIn: "root",
|
|
})
|
|
/**
|
|
* Class to provide profile level details to vault entities without having to call the API each time.
|
|
*/
|
|
export class VaultProfileService {
|
|
private apiService = inject(ApiService);
|
|
|
|
private userId: string | null = null;
|
|
|
|
/** Profile creation stored as a string. */
|
|
private profileCreatedDate: string | null = null;
|
|
|
|
/**
|
|
* Returns the creation date of the profile.
|
|
* Note: `Date`s are mutable in JS, creating a new
|
|
* instance is important to avoid unwanted changes.
|
|
*
|
|
* @deprecated use `creationDate` directly from the `AccountService.activeAccount$` instead,
|
|
* PM-31409 will replace all usages of this service.
|
|
*/
|
|
async getProfileCreationDate(userId: string): Promise<Date> {
|
|
if (this.profileCreatedDate && userId === this.userId) {
|
|
return Promise.resolve(new Date(this.profileCreatedDate));
|
|
}
|
|
|
|
const profile = await this.fetchAndCacheProfile();
|
|
|
|
return new Date(profile.creationDate);
|
|
}
|
|
|
|
private async fetchAndCacheProfile(): Promise<ProfileResponse> {
|
|
const profile = await this.apiService.getProfile();
|
|
|
|
this.userId = profile.id;
|
|
this.profileCreatedDate = profile.creationDate;
|
|
|
|
return profile;
|
|
}
|
|
}
|