diff --git a/apps/browser/src/tools/popup/achievements/achievements.component.html b/apps/browser/src/tools/popup/achievements/achievements.component.html index 7a096853173..c5b90026d83 100644 --- a/apps/browser/src/tools/popup/achievements/achievements.component.html +++ b/apps/browser/src/tools/popup/achievements/achievements.component.html @@ -6,8 +6,8 @@ - diff --git a/apps/browser/src/tools/popup/achievements/achievements.component.ts b/apps/browser/src/tools/popup/achievements/achievements.component.ts index e8c5392c50f..2d7d6968669 100644 --- a/apps/browser/src/tools/popup/achievements/achievements.component.ts +++ b/apps/browser/src/tools/popup/achievements/achievements.component.ts @@ -1,15 +1,12 @@ import { CommonModule } from "@angular/common"; import { Component, OnInit } from "@angular/core"; -import { firstValueFrom } from "rxjs"; +import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; +import { Subject, combineLatestWith, filter, map } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { AchievementsListComponent } from "@bitwarden/angular/tools/achievements/achievements-list.component"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { AchievementHub } from "@bitwarden/common/tools/achievements/achievement-hub"; -import { EventStoreAbstraction } from "@bitwarden/common/tools/achievements/event-store.abstraction.service"; -import { LoginItems_50_Added_Achievement } from "@bitwarden/common/tools/achievements/examples/achievements/login-item-added"; -import { AchievementEarnedEvent, AchievementId } from "@bitwarden/common/tools/achievements/types"; -import { UserId } from "@bitwarden/common/types/guid"; +import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { EventInfo, UserEventLogProvider } from "@bitwarden/common/tools/log/logger"; import { ButtonModule, IconModule } from "@bitwarden/components"; import { PopOutComponent } from "../../../platform/popup/components/pop-out.component"; @@ -33,39 +30,30 @@ import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.co ], }) export class AchievementsComponent implements OnInit { - private currentUserId: UserId; - constructor( - private eventStore: EventStoreAbstraction, private accountService: AccountService, - private achievementHub: AchievementHub, - ) {} - - async ngOnInit() { - this.currentUserId = (await firstValueFrom(this.accountService.activeAccount$)).id; + private readonly eventLogs: UserEventLogProvider, + ) { + // FIXME: add a subscription to this service and feed the data somewhere + this.accountService.activeAccount$ + .pipe( + filter((account): account is Account => !!account), + map((account) => this.eventLogs.capture(account)), + combineLatestWith(this._addEvent), + takeUntilDestroyed(), + ) + .subscribe(([capture, event]) => capture.info(event)); } - testAchievement() { - const earnedAchievement: AchievementEarnedEvent = { - "@timestamp": Date.now(), - event: { - kind: "alert", - category: "session", - }, - service: { - name: "web", - type: "client", - node: { - name: "an-installation-identifier-for-this-client-instance", - }, - environment: "local", - version: "2025.3.1-innovation-sprint", - }, - user: { id: this.currentUserId }, - achievement: { type: "earned", name: LoginItems_50_Added_Achievement.name as AchievementId }, - }; + private _addEvent = new Subject(); - this.eventStore.addEvent(earnedAchievement); - // this.achievementHub.addEvent(earnedAchievement); + async ngOnInit() {} + + addEvent() { + this._addEvent.next({ + action: "vault-item-added", + labels: { "vault-item-type": "login", "vault-item-uri-quantity": 1 }, + tags: ["with-attachment"], + }); } } diff --git a/libs/common/src/tools/log/logger.ts b/libs/common/src/tools/log/logger.ts index 6ce0d645b2e..50055c284e3 100644 --- a/libs/common/src/tools/log/logger.ts +++ b/libs/common/src/tools/log/logger.ts @@ -17,7 +17,7 @@ export abstract class UserEventLogProvider { type BaselineType = Omit; -type EventInfo = { +export type EventInfo = { action: string; labels?: Record; tags?: Array;