diff --git a/apps/browser/src/background/contextMenus.background.ts b/apps/browser/src/background/contextMenus.background.ts index 76fbfd78a9..98223280a2 100644 --- a/apps/browser/src/background/contextMenus.background.ts +++ b/apps/browser/src/background/contextMenus.background.ts @@ -1,6 +1,6 @@ import { AuthService } from "@bitwarden/common/abstractions/auth.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { PasswordGenerationService } from "@bitwarden/common/abstractions/passwordGeneration.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; import { TotpService } from "@bitwarden/common/abstractions/totp.service"; @@ -24,7 +24,7 @@ export default class ContextMenusBackground { private passwordGenerationService: PasswordGenerationService, private platformUtilsService: PlatformUtilsService, private authService: AuthService, - private eventService: EventService, + private eventCollectionService: EventCollectionService, private totpService: TotpService ) { this.contextMenus = chrome.contextMenus; @@ -124,7 +124,7 @@ export default class ContextMenusBackground { this.platformUtilsService.copyToClipboard(cipher.login.username, { window: window }); } else if (info.parentMenuItemId === "copy-password") { this.platformUtilsService.copyToClipboard(cipher.login.password, { window: window }); - this.eventService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id); } else if (info.parentMenuItemId === "copy-totp") { const totpValue = await this.totpService.getCode(cipher.login.totp); this.platformUtilsService.copyToClipboard(totpValue, { window: window }); diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 2d370c91bb..bd70ef57c9 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -7,7 +7,8 @@ import { CollectionService as CollectionServiceAbstraction } from "@bitwarden/co import { CryptoService as CryptoServiceAbstraction } from "@bitwarden/common/abstractions/crypto.service"; import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "@bitwarden/common/abstractions/cryptoFunction.service"; import { EncryptService } from "@bitwarden/common/abstractions/encrypt.service"; -import { EventService as EventServiceAbstraction } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService as EventCollectionServiceAbstraction } from "@bitwarden/common/abstractions/event/event-collection.service"; +import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service"; import { ExportService as ExportServiceAbstraction } from "@bitwarden/common/abstractions/export.service"; import { FileUploadService as FileUploadServiceAbstraction } from "@bitwarden/common/abstractions/fileUpload.service"; import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; @@ -54,7 +55,8 @@ import { ConsoleLogService } from "@bitwarden/common/services/consoleLog.service import { ContainerService } from "@bitwarden/common/services/container.service"; import { EncryptServiceImplementation } from "@bitwarden/common/services/cryptography/encrypt.service.implementation"; import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/services/cryptography/multithread-encrypt.service.implementation"; -import { EventService } from "@bitwarden/common/services/event.service"; +import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service"; +import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; import { ExportService } from "@bitwarden/common/services/export.service"; import { FileUploadService } from "@bitwarden/common/services/fileUpload.service"; import { FolderApiService } from "@bitwarden/common/services/folder/folder-api.service"; @@ -148,7 +150,8 @@ export default class MainBackground { stateService: StateServiceAbstraction; stateMigrationService: StateMigrationService; systemService: SystemServiceAbstraction; - eventService: EventServiceAbstraction; + eventCollectionService: EventCollectionServiceAbstraction; + eventUploadService: EventUploadServiceAbstraction; policyService: InternalPolicyServiceAbstraction; popupUtilsService: PopupUtilsService; sendService: SendServiceAbstraction; @@ -412,12 +415,16 @@ export default class MainBackground { this.organizationService, logoutCallback ); - this.eventService = new EventService( + this.eventUploadService = new EventUploadService( this.apiService, + this.stateService, + this.logService + ); + this.eventCollectionService = new EventCollectionService( this.cipherService, this.stateService, - this.logService, - this.organizationService + this.organizationService, + this.eventUploadService ); this.passwordGenerationService = new PasswordGenerationService( this.cryptoService, @@ -429,7 +436,7 @@ export default class MainBackground { this.cipherService, this.stateService, this.totpService, - this.eventService, + this.eventCollectionService, this.logService ); this.containerService = new ContainerService(this.cryptoService, this.encryptService); @@ -532,7 +539,7 @@ export default class MainBackground { this.passwordGenerationService, this.platformUtilsService, this.authService, - this.eventService, + this.eventCollectionService, this.totpService ); this.idleBackground = new IdleBackground( @@ -560,7 +567,7 @@ export default class MainBackground { await (this.vaultTimeoutService as VaultTimeoutService).init(true); await (this.i18nService as I18nService).init(); - await (this.eventService as EventService).init(true); + await (this.eventUploadService as EventUploadService).init(true); await this.runtimeBackground.init(); await this.notificationBackground.init(); await this.commandsBackground.init(); @@ -626,10 +633,9 @@ export default class MainBackground { } async logout(expired: boolean, userId?: string) { - await this.eventService.uploadEvents(userId); + await this.eventUploadService.uploadEvents(userId); await Promise.all([ - this.eventService.clearEvents(userId), this.syncService.setLastSync(new Date(0), userId), this.cryptoService.clearKeys(userId), this.settingsService.clear(userId), diff --git a/apps/browser/src/background/service_factories/autofill-service.factory.ts b/apps/browser/src/background/service_factories/autofill-service.factory.ts index a14cd1dd8c..1df2ec9bbd 100644 --- a/apps/browser/src/background/service_factories/autofill-service.factory.ts +++ b/apps/browser/src/background/service_factories/autofill-service.factory.ts @@ -2,7 +2,10 @@ import { AutofillService as AbstractAutoFillService } from "../../services/abstr import AutofillService from "../../services/autofill.service"; import { cipherServiceFactory, CipherServiceInitOptions } from "./cipher-service.factory"; -import { EventServiceInitOptions, eventServiceFactory } from "./event-service.factory"; +import { + EventCollectionServiceInitOptions, + eventCollectionServiceFactory, +} from "./event-collection-service.factory"; import { CachedServices, factory, FactoryOptions } from "./factory-options"; import { logServiceFactory, LogServiceInitOptions } from "./log-service.factory"; import { stateServiceFactory, StateServiceInitOptions } from "./state-service.factory"; @@ -14,7 +17,7 @@ export type AutoFillServiceInitOptions = AutoFillServiceOptions & CipherServiceInitOptions & StateServiceInitOptions & TotpServiceInitOptions & - EventServiceInitOptions & + EventCollectionServiceInitOptions & LogServiceInitOptions; export function autofillServiceFactory( @@ -30,7 +33,7 @@ export function autofillServiceFactory( await cipherServiceFactory(cache, opts), await stateServiceFactory(cache, opts), await totpServiceFactory(cache, opts), - await eventServiceFactory(cache, opts), + await eventCollectionServiceFactory(cache, opts), await logServiceFactory(cache, opts) ) ); diff --git a/apps/browser/src/background/service_factories/event-collection-service.factory.ts b/apps/browser/src/background/service_factories/event-collection-service.factory.ts new file mode 100644 index 0000000000..477797d1b4 --- /dev/null +++ b/apps/browser/src/background/service_factories/event-collection-service.factory.ts @@ -0,0 +1,40 @@ +import { EventCollectionService as AbstractEventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; +import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service"; + +import { cipherServiceFactory, CipherServiceInitOptions } from "./cipher-service.factory"; +import { + eventUploadServiceFactory, + EventUploadServiceInitOptions, +} from "./event-upload-service.factory"; +import { FactoryOptions, CachedServices, factory } from "./factory-options"; +import { + organizationServiceFactory, + OrganizationServiceInitOptions, +} from "./organization-service.factory"; +import { stateServiceFactory, StateServiceInitOptions } from "./state-service.factory"; + +type EventCollectionServiceOptions = FactoryOptions; + +export type EventCollectionServiceInitOptions = EventCollectionServiceOptions & + CipherServiceInitOptions & + StateServiceInitOptions & + OrganizationServiceInitOptions & + EventUploadServiceInitOptions; + +export function eventCollectionServiceFactory( + cache: { eventCollectionService?: AbstractEventCollectionService } & CachedServices, + opts: EventCollectionServiceInitOptions +): Promise { + return factory( + cache, + "eventCollectionService", + opts, + async () => + new EventCollectionService( + await cipherServiceFactory(cache, opts), + await stateServiceFactory(cache, opts), + await organizationServiceFactory(cache, opts), + await eventUploadServiceFactory(cache, opts) + ) + ); +} diff --git a/apps/browser/src/background/service_factories/event-service.factory.ts b/apps/browser/src/background/service_factories/event-service.factory.ts deleted file mode 100644 index 61a82ebeb1..0000000000 --- a/apps/browser/src/background/service_factories/event-service.factory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { EventService as AbstractEventService } from "@bitwarden/common/abstractions/event.service"; -import { EventService } from "@bitwarden/common/services/event.service"; - -import { apiServiceFactory, ApiServiceInitOptions } from "./api-service.factory"; -import { cipherServiceFactory, CipherServiceInitOptions } from "./cipher-service.factory"; -import { FactoryOptions, CachedServices, factory } from "./factory-options"; -import { logServiceFactory, LogServiceInitOptions } from "./log-service.factory"; -import { - organizationServiceFactory, - OrganizationServiceInitOptions, -} from "./organization-service.factory"; -import { stateServiceFactory, StateServiceInitOptions } from "./state-service.factory"; - -type EventServiceOptions = FactoryOptions; - -export type EventServiceInitOptions = EventServiceOptions & - ApiServiceInitOptions & - CipherServiceInitOptions & - StateServiceInitOptions & - LogServiceInitOptions & - OrganizationServiceInitOptions; - -export function eventServiceFactory( - cache: { eventService?: AbstractEventService } & CachedServices, - opts: EventServiceInitOptions -): Promise { - return factory( - cache, - "eventService", - opts, - async () => - new EventService( - await apiServiceFactory(cache, opts), - await cipherServiceFactory(cache, opts), - await stateServiceFactory(cache, opts), - await logServiceFactory(cache, opts), - await organizationServiceFactory(cache, opts) - ) - ); -} diff --git a/apps/browser/src/background/service_factories/event-upload-service.factory.ts b/apps/browser/src/background/service_factories/event-upload-service.factory.ts new file mode 100644 index 0000000000..c0ed0e5426 --- /dev/null +++ b/apps/browser/src/background/service_factories/event-upload-service.factory.ts @@ -0,0 +1,31 @@ +import { EventUploadService as AbstractEventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; +import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; + +import { apiServiceFactory, ApiServiceInitOptions } from "./api-service.factory"; +import { FactoryOptions, CachedServices, factory } from "./factory-options"; +import { logServiceFactory, LogServiceInitOptions } from "./log-service.factory"; +import { stateServiceFactory, StateServiceInitOptions } from "./state-service.factory"; + +type EventUploadServiceOptions = FactoryOptions; + +export type EventUploadServiceInitOptions = EventUploadServiceOptions & + ApiServiceInitOptions & + StateServiceInitOptions & + LogServiceInitOptions; + +export function eventUploadServiceFactory( + cache: { eventUploadService?: AbstractEventUploadService } & CachedServices, + opts: EventUploadServiceInitOptions +): Promise { + return factory( + cache, + "eventUploadService", + opts, + async () => + new EventUploadService( + await apiServiceFactory(cache, opts), + await stateServiceFactory(cache, opts), + await logServiceFactory(cache, opts) + ) + ); +} diff --git a/apps/browser/src/popup/components/action-buttons.component.ts b/apps/browser/src/popup/components/action-buttons.component.ts index 3df8e0d4cd..60bc0051fb 100644 --- a/apps/browser/src/popup/components/action-buttons.component.ts +++ b/apps/browser/src/popup/components/action-buttons.component.ts @@ -1,6 +1,6 @@ import { Component, EventEmitter, Input, Output } from "@angular/core"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { PasswordRepromptService } from "@bitwarden/common/abstractions/passwordReprompt.service"; import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -27,7 +27,7 @@ export class ActionButtonsComponent { constructor( private i18nService: I18nService, private platformUtilsService: PlatformUtilsService, - private eventService: EventService, + private eventCollectionService: EventCollectionService, private totpService: TotpService, private stateService: StateService, private passwordRepromptService: PasswordRepromptService @@ -68,9 +68,12 @@ export class ActionButtonsComponent { ); if (typeI18nKey === "password" || typeI18nKey === "verificationCodeTotp") { - this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledHiddenFieldVisible, + cipher.id + ); } else if (typeI18nKey === "securityCode") { - this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id); } } diff --git a/apps/browser/src/popup/services/services.module.ts b/apps/browser/src/popup/services/services.module.ts index 0acd8c785d..b2039ba599 100644 --- a/apps/browser/src/popup/services/services.module.ts +++ b/apps/browser/src/popup/services/services.module.ts @@ -15,7 +15,8 @@ import { CollectionService } from "@bitwarden/common/abstractions/collection.ser import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { CryptoFunctionService } from "@bitwarden/common/abstractions/cryptoFunction.service"; import { EnvironmentService } from "@bitwarden/common/abstractions/environment.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; +import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { FileUploadService } from "@bitwarden/common/abstractions/fileUpload.service"; @@ -195,7 +196,16 @@ function getBgService(service: keyof MainBackground) { { provide: TokenService, useFactory: getBgService("tokenService"), deps: [] }, { provide: I18nService, useFactory: getBgService("i18nService"), deps: [] }, { provide: CryptoService, useFactory: getBgService("cryptoService"), deps: [] }, - { provide: EventService, useFactory: getBgService("eventService"), deps: [] }, + { + provide: EventUploadService, + useFactory: getBgService("eventUploadService"), + deps: [], + }, + { + provide: EventCollectionService, + useFactory: getBgService("eventCollectionService"), + deps: [], + }, { provide: PolicyService, useFactory: ( diff --git a/apps/browser/src/popup/settings/export.component.ts b/apps/browser/src/popup/settings/export.component.ts index 47301b5fde..c13a495bc5 100644 --- a/apps/browser/src/popup/settings/export.component.ts +++ b/apps/browser/src/popup/settings/export.component.ts @@ -4,7 +4,7 @@ import { Router } from "@angular/router"; import { ExportComponent as BaseExportComponent } from "@bitwarden/angular/components/export.component"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -23,7 +23,7 @@ export class ExportComponent extends BaseExportComponent { i18nService: I18nService, platformUtilsService: PlatformUtilsService, exportService: ExportService, - eventService: EventService, + eventCollectionService: EventCollectionService, policyService: PolicyService, private router: Router, logService: LogService, @@ -36,7 +36,7 @@ export class ExportComponent extends BaseExportComponent { i18nService, platformUtilsService, exportService, - eventService, + eventCollectionService, policyService, window, logService, diff --git a/apps/browser/src/popup/vault/add-edit-custom-fields.component.ts b/apps/browser/src/popup/vault/add-edit-custom-fields.component.ts index 7e6e91686f..44f9e9539a 100644 --- a/apps/browser/src/popup/vault/add-edit-custom-fields.component.ts +++ b/apps/browser/src/popup/vault/add-edit-custom-fields.component.ts @@ -1,7 +1,7 @@ import { Component } from "@angular/core"; import { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from "@bitwarden/angular/components/add-edit-custom-fields.component"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @Component({ @@ -9,7 +9,7 @@ import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; templateUrl: "add-edit-custom-fields.component.html", }) export class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent { - constructor(i18nService: I18nService, eventService: EventService) { - super(i18nService, eventService); + constructor(i18nService: I18nService, eventCollectionService: EventCollectionService) { + super(i18nService, eventCollectionService); } } diff --git a/apps/browser/src/popup/vault/add-edit.component.ts b/apps/browser/src/popup/vault/add-edit.component.ts index b890766f6b..54d8fb1ade 100644 --- a/apps/browser/src/popup/vault/add-edit.component.ts +++ b/apps/browser/src/popup/vault/add-edit.component.ts @@ -7,7 +7,7 @@ import { AddEditComponent as BaseAddEditComponent } from "@bitwarden/angular/com import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; @@ -46,7 +46,7 @@ export class AddEditComponent extends BaseAddEditComponent { private route: ActivatedRoute, private router: Router, private location: Location, - eventService: EventService, + eventCollectionService: EventCollectionService, policyService: PolicyService, private popupUtilsService: PopupUtilsService, organizationService: OrganizationService, @@ -62,7 +62,7 @@ export class AddEditComponent extends BaseAddEditComponent { stateService, collectionService, messagingService, - eventService, + eventCollectionService, policyService, logService, passwordRepromptService, diff --git a/apps/browser/src/popup/vault/view-custom-fields.component.ts b/apps/browser/src/popup/vault/view-custom-fields.component.ts index 7d9b338f0f..3ea41db713 100644 --- a/apps/browser/src/popup/vault/view-custom-fields.component.ts +++ b/apps/browser/src/popup/vault/view-custom-fields.component.ts @@ -1,14 +1,14 @@ import { Component } from "@angular/core"; import { ViewCustomFieldsComponent as BaseViewCustomFieldsComponent } from "@bitwarden/angular/components/view-custom-fields.component"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; @Component({ selector: "app-vault-view-custom-fields", templateUrl: "view-custom-fields.component.html", }) export class ViewCustomFieldsComponent extends BaseViewCustomFieldsComponent { - constructor(eventService: EventService) { - super(eventService); + constructor(eventCollectionService: EventCollectionService) { + super(eventCollectionService); } } diff --git a/apps/browser/src/popup/vault/view.component.ts b/apps/browser/src/popup/vault/view.component.ts index 75ab73b6dd..9a6aa03f18 100644 --- a/apps/browser/src/popup/vault/view.component.ts +++ b/apps/browser/src/popup/vault/view.component.ts @@ -9,7 +9,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -58,7 +58,7 @@ export class ViewComponent extends BaseViewComponent { ngZone: NgZone, changeDetectorRef: ChangeDetectorRef, stateService: StateService, - eventService: EventService, + eventCollectionService: EventCollectionService, private autofillService: AutofillService, private messagingService: MessagingService, private popupUtilsService: PopupUtilsService, @@ -80,7 +80,7 @@ export class ViewComponent extends BaseViewComponent { broadcasterService, ngZone, changeDetectorRef, - eventService, + eventCollectionService, apiService, passwordRepromptService, logService, diff --git a/apps/browser/src/services/autofill.service.ts b/apps/browser/src/services/autofill.service.ts index f458279de4..60bcf3100f 100644 --- a/apps/browser/src/services/autofill.service.ts +++ b/apps/browser/src/services/autofill.service.ts @@ -1,5 +1,5 @@ import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { TotpService } from "@bitwarden/common/abstractions/totp.service"; import { CipherRepromptType } from "@bitwarden/common/enums/cipherRepromptType"; @@ -41,7 +41,7 @@ export default class AutofillService implements AutofillServiceInterface { private cipherService: CipherService, private stateService: BrowserStateService, private totpService: TotpService, - private eventService: EventService, + private eventCollectionService: EventCollectionService, private logService: LogService ) {} @@ -148,7 +148,7 @@ export default class AutofillService implements AutofillServiceInterface { }); if (didAutofill) { - this.eventService.collect(EventType.Cipher_ClientAutofilled, options.cipher.id); + this.eventCollectionService.collect(EventType.Cipher_ClientAutofilled, options.cipher.id); if (totpPromise != null) { return await totpPromise; } else { diff --git a/apps/desktop/src/app/app.component.ts b/apps/desktop/src/app/app.component.ts index 82753a1776..3d6d864f67 100644 --- a/apps/desktop/src/app/app.component.ts +++ b/apps/desktop/src/app/app.component.ts @@ -20,7 +20,7 @@ import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.s import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; import { InternalFolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { KeyConnectorService } from "@bitwarden/common/abstractions/keyConnector.service"; @@ -125,7 +125,7 @@ export class AppComponent implements OnInit, OnDestroy { private platformUtilsService: PlatformUtilsService, private systemService: SystemService, private stateService: StateService, - private eventService: EventService, + private eventUploadService: EventUploadService, private policyService: InternalPolicyService, private modalService: ModalService, private keyConnectorService: KeyConnectorService @@ -465,7 +465,7 @@ export class AppComponent implements OnInit, OnDestroy { private async logOut(expired: boolean, userId?: string) { const userBeingLoggedOut = await this.stateService.getUserId({ userId: userId }); await Promise.all([ - this.eventService.uploadEvents(userBeingLoggedOut), + this.eventUploadService.uploadEvents(userBeingLoggedOut), this.syncService.setLastSync(new Date(0), userBeingLoggedOut), this.cryptoService.clearKeys(userBeingLoggedOut), this.settingsService.clear(userBeingLoggedOut), diff --git a/apps/desktop/src/app/services/init.service.ts b/apps/desktop/src/app/services/init.service.ts index c706136a75..fd29631ab4 100644 --- a/apps/desktop/src/app/services/init.service.ts +++ b/apps/desktop/src/app/services/init.service.ts @@ -5,7 +5,7 @@ import { AbstractThemingService } from "@bitwarden/angular/services/theming/them import { CryptoService as CryptoServiceAbstraction } from "@bitwarden/common/abstractions/crypto.service"; import { EncryptService } from "@bitwarden/common/abstractions/encrypt.service"; import { EnvironmentService as EnvironmentServiceAbstraction } from "@bitwarden/common/abstractions/environment.service"; -import { EventService as EventServiceAbstraction } from "@bitwarden/common/abstractions/event.service"; +import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/abstractions/i18n.service"; import { NotificationsService as NotificationsServiceAbstraction } from "@bitwarden/common/abstractions/notifications.service"; import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "@bitwarden/common/abstractions/platformUtils.service"; @@ -14,7 +14,7 @@ import { SyncService as SyncServiceAbstraction } from "@bitwarden/common/abstrac import { TwoFactorService as TwoFactorServiceAbstraction } from "@bitwarden/common/abstractions/twoFactor.service"; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; import { ContainerService } from "@bitwarden/common/services/container.service"; -import { EventService } from "@bitwarden/common/services/event.service"; +import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; import { VaultTimeoutService } from "@bitwarden/common/services/vaultTimeout/vaultTimeout.service"; import { I18nService } from "../../services/i18n.service"; @@ -28,7 +28,7 @@ export class InitService { private syncService: SyncServiceAbstraction, private vaultTimeoutService: VaultTimeoutServiceAbstraction, private i18nService: I18nServiceAbstraction, - private eventService: EventServiceAbstraction, + private eventUploadService: EventUploadServiceAbstraction, private twoFactorService: TwoFactorServiceAbstraction, private notificationsService: NotificationsServiceAbstraction, private platformUtilsService: PlatformUtilsServiceAbstraction, @@ -48,7 +48,7 @@ export class InitService { (this.vaultTimeoutService as VaultTimeoutService).init(true); const locale = await this.stateService.getLocale(); await (this.i18nService as I18nService).init(locale); - (this.eventService as EventService).init(true); + (this.eventUploadService as EventUploadService).init(true); this.twoFactorService.init(); setTimeout(() => this.notificationsService.init(), 3000); const htmlEl = this.win.document.documentElement; diff --git a/apps/desktop/src/app/vault/add-edit-custom-fields.component.ts b/apps/desktop/src/app/vault/add-edit-custom-fields.component.ts index 7e6e91686f..44f9e9539a 100644 --- a/apps/desktop/src/app/vault/add-edit-custom-fields.component.ts +++ b/apps/desktop/src/app/vault/add-edit-custom-fields.component.ts @@ -1,7 +1,7 @@ import { Component } from "@angular/core"; import { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from "@bitwarden/angular/components/add-edit-custom-fields.component"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @Component({ @@ -9,7 +9,7 @@ import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; templateUrl: "add-edit-custom-fields.component.html", }) export class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent { - constructor(i18nService: I18nService, eventService: EventService) { - super(i18nService, eventService); + constructor(i18nService: I18nService, eventCollectionService: EventCollectionService) { + super(i18nService, eventCollectionService); } } diff --git a/apps/desktop/src/app/vault/add-edit.component.ts b/apps/desktop/src/app/vault/add-edit.component.ts index 38f49f9bc6..3cf9475b6b 100644 --- a/apps/desktop/src/app/vault/add-edit.component.ts +++ b/apps/desktop/src/app/vault/add-edit.component.ts @@ -6,7 +6,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; @@ -35,7 +35,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnChanges, stateService: StateService, collectionService: CollectionService, messagingService: MessagingService, - eventService: EventService, + eventCollectionService: EventCollectionService, policyService: PolicyService, passwordRepromptService: PasswordRepromptService, private broadcasterService: BroadcasterService, @@ -52,7 +52,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnChanges, stateService, collectionService, messagingService, - eventService, + eventCollectionService, policyService, logService, passwordRepromptService, diff --git a/apps/desktop/src/app/vault/export.component.ts b/apps/desktop/src/app/vault/export.component.ts index 4793a70b75..01859f4c4e 100644 --- a/apps/desktop/src/app/vault/export.component.ts +++ b/apps/desktop/src/app/vault/export.component.ts @@ -6,7 +6,7 @@ import { UntypedFormBuilder } from "@angular/forms"; import { ExportComponent as BaseExportComponent } from "@bitwarden/angular/components/export.component"; import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -27,7 +27,7 @@ export class ExportComponent extends BaseExportComponent implements OnInit { i18nService: I18nService, platformUtilsService: PlatformUtilsService, exportService: ExportService, - eventService: EventService, + eventCollectionService: EventCollectionService, policyService: PolicyService, userVerificationService: UserVerificationService, formBuilder: UntypedFormBuilder, @@ -40,7 +40,7 @@ export class ExportComponent extends BaseExportComponent implements OnInit { i18nService, platformUtilsService, exportService, - eventService, + eventCollectionService, policyService, window, logService, diff --git a/apps/desktop/src/app/vault/vault.component.ts b/apps/desktop/src/app/vault/vault.component.ts index 5681535e24..930e557a89 100644 --- a/apps/desktop/src/app/vault/vault.component.ts +++ b/apps/desktop/src/app/vault/vault.component.ts @@ -14,7 +14,7 @@ import { ModalRef } from "@bitwarden/angular/components/modal/modal.ref"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { VaultFilter } from "@bitwarden/angular/vault/vault-filter/models/vault-filter.model"; import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/abstractions/messaging.service"; import { PasswordRepromptService } from "@bitwarden/common/abstractions/passwordReprompt.service"; @@ -94,7 +94,7 @@ export class VaultComponent implements OnInit, OnDestroy { private syncService: SyncService, private messagingService: MessagingService, private platformUtilsService: PlatformUtilsService, - private eventService: EventService, + private eventCollectionService: EventCollectionService, private totpService: TotpService, private passwordRepromptService: PasswordRepromptService, private stateService: StateService, @@ -309,7 +309,7 @@ export class VaultComponent implements OnInit, OnDestroy { label: this.i18nService.t("copyPassword"), click: () => { this.copyValue(cipher, cipher.login.password, "password", "Password"); - this.eventService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id); }, }); } @@ -338,7 +338,7 @@ export class VaultComponent implements OnInit, OnDestroy { label: this.i18nService.t("copySecurityCode"), click: () => { this.copyValue(cipher, cipher.card.code, "securityCode", "Security Code"); - this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id); }, }); } diff --git a/apps/desktop/src/app/vault/view-custom-fields.component.ts b/apps/desktop/src/app/vault/view-custom-fields.component.ts index 7d9b338f0f..3ea41db713 100644 --- a/apps/desktop/src/app/vault/view-custom-fields.component.ts +++ b/apps/desktop/src/app/vault/view-custom-fields.component.ts @@ -1,14 +1,14 @@ import { Component } from "@angular/core"; import { ViewCustomFieldsComponent as BaseViewCustomFieldsComponent } from "@bitwarden/angular/components/view-custom-fields.component"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; @Component({ selector: "app-vault-view-custom-fields", templateUrl: "view-custom-fields.component.html", }) export class ViewCustomFieldsComponent extends BaseViewCustomFieldsComponent { - constructor(eventService: EventService) { - super(eventService); + constructor(eventCollectionService: EventCollectionService) { + super(eventCollectionService); } } diff --git a/apps/desktop/src/app/vault/view.component.ts b/apps/desktop/src/app/vault/view.component.ts index 52db3e22bc..70f55d400a 100644 --- a/apps/desktop/src/app/vault/view.component.ts +++ b/apps/desktop/src/app/vault/view.component.ts @@ -13,7 +13,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -47,7 +47,7 @@ export class ViewComponent extends BaseViewComponent implements OnChanges { broadcasterService: BroadcasterService, ngZone: NgZone, changeDetectorRef: ChangeDetectorRef, - eventService: EventService, + eventCollectionService: EventCollectionService, apiService: ApiService, private messagingService: MessagingService, passwordRepromptService: PasswordRepromptService, @@ -68,7 +68,7 @@ export class ViewComponent extends BaseViewComponent implements OnChanges { broadcasterService, ngZone, changeDetectorRef, - eventService, + eventCollectionService, apiService, passwordRepromptService, logService, diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index 9bd0fda6fc..008ed5106f 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -12,7 +12,7 @@ import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.s import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; import { InternalFolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { KeyConnectorService } from "@bitwarden/common/abstractions/keyConnector.service"; @@ -74,7 +74,7 @@ export class AppComponent implements OnDestroy, OnInit { private notificationsService: NotificationsService, private routerService: RouterService, private stateService: StateService, - private eventService: EventService, + private eventUploadService: EventUploadService, private policyService: InternalPolicyService, protected policyListService: PolicyListService, private keyConnectorService: KeyConnectorService @@ -221,10 +221,9 @@ export class AppComponent implements OnDestroy, OnInit { } private async logOut(expired: boolean) { - await this.eventService.uploadEvents(); + await this.eventUploadService.uploadEvents(); const userId = await this.stateService.getUserId(); await Promise.all([ - this.eventService.clearEvents(), this.syncService.setLastSync(new Date(0)), this.cryptoService.clearKeys(), this.settingsService.clear(userId), diff --git a/apps/web/src/app/core/init.service.ts b/apps/web/src/app/core/init.service.ts index 75089529f2..8baa7c0ddc 100644 --- a/apps/web/src/app/core/init.service.ts +++ b/apps/web/src/app/core/init.service.ts @@ -8,14 +8,14 @@ import { EnvironmentService as EnvironmentServiceAbstraction, Urls, } from "@bitwarden/common/abstractions/environment.service"; -import { EventService as EventLoggingServiceAbstraction } from "@bitwarden/common/abstractions/event.service"; +import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/abstractions/i18n.service"; import { NotificationsService as NotificationsServiceAbstraction } from "@bitwarden/common/abstractions/notifications.service"; import { StateService as StateServiceAbstraction } from "@bitwarden/common/abstractions/state.service"; import { TwoFactorService as TwoFactorServiceAbstraction } from "@bitwarden/common/abstractions/twoFactor.service"; import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; import { ContainerService } from "@bitwarden/common/services/container.service"; -import { EventService as EventLoggingService } from "@bitwarden/common/services/event.service"; +import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; import { VaultTimeoutService as VaultTimeoutService } from "@bitwarden/common/services/vaultTimeout/vaultTimeout.service"; import { I18nService } from "./i18n.service"; @@ -28,7 +28,7 @@ export class InitService { private notificationsService: NotificationsServiceAbstraction, private vaultTimeoutService: VaultTimeoutServiceAbstraction, private i18nService: I18nServiceAbstraction, - private eventLoggingService: EventLoggingServiceAbstraction, + private eventUploadService: EventUploadServiceAbstraction, private twoFactorService: TwoFactorServiceAbstraction, private stateService: StateServiceAbstraction, private cryptoService: CryptoServiceAbstraction, @@ -48,7 +48,7 @@ export class InitService { (this.vaultTimeoutService as VaultTimeoutService).init(true); const locale = await this.stateService.getLocale(); await (this.i18nService as I18nService).init(locale); - (this.eventLoggingService as EventLoggingService).init(true); + (this.eventUploadService as EventUploadService).init(true); this.twoFactorService.init(); const htmlEl = this.win.document.documentElement; htmlEl.classList.add("locale_" + this.i18nService.translationLocale); diff --git a/apps/web/src/app/organizations/tools/import-export/org-export.component.ts b/apps/web/src/app/organizations/tools/import-export/org-export.component.ts index 626b3ef2bc..a7ab72edfa 100644 --- a/apps/web/src/app/organizations/tools/import-export/org-export.component.ts +++ b/apps/web/src/app/organizations/tools/import-export/org-export.component.ts @@ -4,7 +4,7 @@ import { ActivatedRoute } from "@angular/router"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -27,7 +27,7 @@ export class OrganizationExportComponent extends ExportComponent { i18nService: I18nService, platformUtilsService: PlatformUtilsService, exportService: ExportService, - eventService: EventService, + eventCollectionService: EventCollectionService, private route: ActivatedRoute, policyService: PolicyService, logService: LogService, @@ -41,7 +41,7 @@ export class OrganizationExportComponent extends ExportComponent { i18nService, platformUtilsService, exportService, - eventService, + eventCollectionService, policyService, logService, userVerificationService, @@ -76,7 +76,7 @@ export class OrganizationExportComponent extends ExportComponent { } async collectEvent(): Promise { - await this.eventService.collect( + await this.eventCollectionService.collect( EventType.Organization_ClientExportedVault, null, null, diff --git a/apps/web/src/app/organizations/vault/add-edit.component.ts b/apps/web/src/app/organizations/vault/add-edit.component.ts index 27a2b9a11d..dbbbf42dd0 100644 --- a/apps/web/src/app/organizations/vault/add-edit.component.ts +++ b/apps/web/src/app/organizations/vault/add-edit.component.ts @@ -4,7 +4,7 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; @@ -42,7 +42,7 @@ export class AddEditComponent extends BaseAddEditComponent { passwordGenerationService: PasswordGenerationService, private apiService: ApiService, messagingService: MessagingService, - eventService: EventService, + eventCollectionService: EventCollectionService, policyService: PolicyService, logService: LogService, passwordRepromptService: PasswordRepromptService, @@ -59,7 +59,7 @@ export class AddEditComponent extends BaseAddEditComponent { totpService, passwordGenerationService, messagingService, - eventService, + eventCollectionService, policyService, organizationService, logService, diff --git a/apps/web/src/app/organizations/vault/vault-items.component.ts b/apps/web/src/app/organizations/vault/vault-items.component.ts index 044b3d6d75..e7ee2cb28e 100644 --- a/apps/web/src/app/organizations/vault/vault-items.component.ts +++ b/apps/web/src/app/organizations/vault/vault-items.component.ts @@ -2,7 +2,7 @@ import { Component, EventEmitter, Output } from "@angular/core"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { OrganizationService } from "@bitwarden/common/abstractions/organization/organization.service.abstraction"; @@ -30,7 +30,7 @@ export class VaultItemsComponent extends BaseVaultItemsComponent { i18nService: I18nService, platformUtilsService: PlatformUtilsService, cipherService: CipherService, - eventService: EventService, + eventCollectionService: EventCollectionService, totpService: TotpService, passwordRepromptService: PasswordRepromptService, logService: LogService, @@ -44,7 +44,7 @@ export class VaultItemsComponent extends BaseVaultItemsComponent { i18nService, platformUtilsService, cipherService, - eventService, + eventCollectionService, totpService, stateService, passwordRepromptService, diff --git a/apps/web/src/app/settings/emergency-add-edit.component.ts b/apps/web/src/app/settings/emergency-add-edit.component.ts index ca7997eaa4..c709f4a929 100644 --- a/apps/web/src/app/settings/emergency-add-edit.component.ts +++ b/apps/web/src/app/settings/emergency-add-edit.component.ts @@ -3,7 +3,7 @@ import { Component } from "@angular/core"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; @@ -38,7 +38,7 @@ export class EmergencyAddEditComponent extends BaseAddEditComponent { totpService: TotpService, passwordGenerationService: PasswordGenerationService, messagingService: MessagingService, - eventService: EventService, + eventCollectionService: EventCollectionService, policyService: PolicyService, passwordRepromptService: PasswordRepromptService, organizationService: OrganizationService, @@ -55,7 +55,7 @@ export class EmergencyAddEditComponent extends BaseAddEditComponent { totpService, passwordGenerationService, messagingService, - eventService, + eventCollectionService, policyService, organizationService, logService, diff --git a/apps/web/src/app/tools/import-export/export.component.ts b/apps/web/src/app/tools/import-export/export.component.ts index 5d704bb5f6..6087d7a202 100644 --- a/apps/web/src/app/tools/import-export/export.component.ts +++ b/apps/web/src/app/tools/import-export/export.component.ts @@ -4,7 +4,7 @@ import { UntypedFormBuilder } from "@angular/forms"; import { ExportComponent as BaseExportComponent } from "@bitwarden/angular/components/export.component"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -29,7 +29,7 @@ export class ExportComponent extends BaseExportComponent { i18nService: I18nService, platformUtilsService: PlatformUtilsService, exportService: ExportService, - eventService: EventService, + eventCollectionService: EventCollectionService, policyService: PolicyService, logService: LogService, userVerificationService: UserVerificationService, @@ -42,7 +42,7 @@ export class ExportComponent extends BaseExportComponent { i18nService, platformUtilsService, exportService, - eventService, + eventCollectionService, policyService, window, logService, diff --git a/apps/web/src/app/vault/add-edit-custom-fields.component.ts b/apps/web/src/app/vault/add-edit-custom-fields.component.ts index 796e42592d..aa51edaf9b 100644 --- a/apps/web/src/app/vault/add-edit-custom-fields.component.ts +++ b/apps/web/src/app/vault/add-edit-custom-fields.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from "@angular/core"; import { AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent } from "@bitwarden/angular/components/add-edit-custom-fields.component"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @Component({ @@ -12,7 +12,7 @@ export class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsCompone @Input() viewOnly: boolean; @Input() copy: (value: string, typeI18nKey: string, aType: string) => void; - constructor(i18nService: I18nService, eventService: EventService) { - super(i18nService, eventService); + constructor(i18nService: I18nService, eventCollectionService: EventCollectionService) { + super(i18nService, eventCollectionService); } } diff --git a/apps/web/src/app/vault/add-edit.component.ts b/apps/web/src/app/vault/add-edit.component.ts index af75e4e99a..1847be254e 100644 --- a/apps/web/src/app/vault/add-edit.component.ts +++ b/apps/web/src/app/vault/add-edit.component.ts @@ -4,7 +4,7 @@ import { AddEditComponent as BaseAddEditComponent } from "@bitwarden/angular/com import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; @@ -49,7 +49,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On protected totpService: TotpService, protected passwordGenerationService: PasswordGenerationService, protected messagingService: MessagingService, - eventService: EventService, + eventCollectionService: EventCollectionService, protected policyService: PolicyService, organizationService: OrganizationService, logService: LogService, @@ -64,7 +64,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On stateService, collectionService, messagingService, - eventService, + eventCollectionService, policyService, logService, passwordRepromptService, @@ -125,11 +125,17 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On if (this.editMode) { if (typeI18nKey === "password") { - this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledHiddenFieldVisible, + this.cipherId + ); } else if (typeI18nKey === "securityCode") { - this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId); } else if (aType === "H_Field") { - this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientCopiedHiddenField, + this.cipherId + ); } } } diff --git a/apps/web/src/app/vault/vault-items.component.ts b/apps/web/src/app/vault/vault-items.component.ts index 9027c53d8c..e82007523c 100644 --- a/apps/web/src/app/vault/vault-items.component.ts +++ b/apps/web/src/app/vault/vault-items.component.ts @@ -2,7 +2,7 @@ import { Component, EventEmitter, Input, OnDestroy, Output } from "@angular/core import { VaultItemsComponent as BaseVaultItemsComponent } from "@bitwarden/angular/components/vault-items.component"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { OrganizationService } from "@bitwarden/common/abstractions/organization/organization.service.abstraction"; @@ -51,7 +51,7 @@ export class VaultItemsComponent extends BaseVaultItemsComponent implements OnDe protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService, protected cipherService: CipherService, - protected eventService: EventService, + protected eventCollectionService: EventCollectionService, protected totpService: TotpService, protected stateService: StateService, protected passwordRepromptService: PasswordRepromptService, @@ -241,9 +241,12 @@ export class VaultItemsComponent extends BaseVaultItemsComponent implements OnDe ); if (typeI18nKey === "password" || typeI18nKey === "verificationCodeTotp") { - this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledHiddenFieldVisible, + cipher.id + ); } else if (typeI18nKey === "securityCode") { - this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id); } } diff --git a/libs/angular/src/components/add-edit-custom-fields.component.ts b/libs/angular/src/components/add-edit-custom-fields.component.ts index fdea9b0596..2be5e7d5a5 100644 --- a/libs/angular/src/components/add-edit-custom-fields.component.ts +++ b/libs/angular/src/components/add-edit-custom-fields.component.ts @@ -1,7 +1,7 @@ import { CdkDragDrop, moveItemInArray } from "@angular/cdk/drag-drop"; import { Directive, Input, OnChanges, SimpleChanges } from "@angular/core"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { CipherType } from "@bitwarden/common/enums/cipherType"; import { EventType } from "@bitwarden/common/enums/eventType"; @@ -25,7 +25,10 @@ export class AddEditCustomFieldsComponent implements OnChanges { fieldType = FieldType; eventType = EventType; - constructor(private i18nService: I18nService, private eventService: EventService) { + constructor( + private i18nService: I18nService, + private eventCollectionService: EventCollectionService + ) { this.addFieldTypeOptions = [ { name: i18nService.t("cfTypeText"), value: FieldType.Text }, { name: i18nService.t("cfTypeHidden"), value: FieldType.Hidden }, @@ -74,7 +77,10 @@ export class AddEditCustomFieldsComponent implements OnChanges { const f = field as any; f.showValue = !f.showValue; if (this.editMode && f.showValue) { - this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledHiddenFieldVisible, + this.cipher.id + ); } } diff --git a/libs/angular/src/components/add-edit.component.ts b/libs/angular/src/components/add-edit.component.ts index 7194b88295..2d59ac475f 100644 --- a/libs/angular/src/components/add-edit.component.ts +++ b/libs/angular/src/components/add-edit.component.ts @@ -4,7 +4,7 @@ import { Observable, Subject, takeUntil, concatMap } from "rxjs"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CollectionService } from "@bitwarden/common/abstractions/collection.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; @@ -91,7 +91,7 @@ export class AddEditComponent implements OnInit, OnDestroy { protected stateService: StateService, protected collectionService: CollectionService, protected messagingService: MessagingService, - protected eventService: EventService, + protected eventCollectionService: EventCollectionService, protected policyService: PolicyService, private logService: LogService, protected passwordRepromptService: PasswordRepromptService, @@ -266,7 +266,7 @@ export class AddEditComponent implements OnInit, OnDestroy { this.folders$ = this.folderService.folderViews$; if (this.editMode && this.previousCipherId !== this.cipherId) { - this.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId); + this.eventCollectionService.collect(EventType.Cipher_ClientViewed, this.cipherId); } this.previousCipherId = this.cipherId; this.reprompt = this.cipher.reprompt !== CipherRepromptType.None; @@ -489,14 +489,20 @@ export class AddEditComponent implements OnInit, OnDestroy { this.showPassword = !this.showPassword; document.getElementById("loginPassword").focus(); if (this.editMode && this.showPassword) { - this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledPasswordVisible, + this.cipherId + ); } } async toggleCardNumber() { this.showCardNumber = !this.showCardNumber; if (this.showCardNumber) { - this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledCardNumberVisible, + this.cipherId + ); } } @@ -504,7 +510,10 @@ export class AddEditComponent implements OnInit, OnDestroy { this.showCardCode = !this.showCardCode; document.getElementById("cardCode").focus(); if (this.editMode && this.showCardCode) { - this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledCardCodeVisible, + this.cipherId + ); } } diff --git a/libs/angular/src/components/export.component.ts b/libs/angular/src/components/export.component.ts index f25d8fdaf3..b38b176271 100644 --- a/libs/angular/src/components/export.component.ts +++ b/libs/angular/src/components/export.component.ts @@ -3,7 +3,7 @@ import { UntypedFormBuilder, Validators } from "@angular/forms"; import { merge, takeUntil, Subject, startWith } from "rxjs"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { ExportService } from "@bitwarden/common/abstractions/export.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -45,7 +45,7 @@ export class ExportComponent implements OnInit, OnDestroy { protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService, protected exportService: ExportService, - protected eventService: EventService, + protected eventCollectionService: EventCollectionService, private policyService: PolicyService, protected win: Window, private logService: LogService, @@ -180,7 +180,7 @@ export class ExportComponent implements OnInit, OnDestroy { } protected async collectEvent(): Promise { - await this.eventService.collect(EventType.User_ClientExportedVault); + await this.eventCollectionService.collect(EventType.User_ClientExportedVault); } get format() { diff --git a/libs/angular/src/components/view-custom-fields.component.ts b/libs/angular/src/components/view-custom-fields.component.ts index b661e76a19..46289fbc5e 100644 --- a/libs/angular/src/components/view-custom-fields.component.ts +++ b/libs/angular/src/components/view-custom-fields.component.ts @@ -1,6 +1,6 @@ import { Directive, Input } from "@angular/core"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { EventType } from "@bitwarden/common/enums/eventType"; import { FieldType } from "@bitwarden/common/enums/fieldType"; import { CipherView } from "@bitwarden/common/models/view/cipher.view"; @@ -14,7 +14,7 @@ export class ViewCustomFieldsComponent { fieldType = FieldType; - constructor(private eventService: EventService) {} + constructor(private eventCollectionService: EventCollectionService) {} async toggleFieldValue(field: FieldView) { if (!(await this.promptPassword())) { @@ -25,7 +25,10 @@ export class ViewCustomFieldsComponent { f.showValue = !f.showValue; f.showCount = false; if (f.showValue) { - this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledHiddenFieldVisible, + this.cipher.id + ); } } diff --git a/libs/angular/src/components/view.component.ts b/libs/angular/src/components/view.component.ts index 8e724b9186..243ca85ff9 100644 --- a/libs/angular/src/components/view.component.ts +++ b/libs/angular/src/components/view.component.ts @@ -15,7 +15,7 @@ import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { BroadcasterService } from "@bitwarden/common/abstractions/broadcaster.service"; import { CipherService } from "@bitwarden/common/abstractions/cipher.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; -import { EventService } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { FileDownloadService } from "@bitwarden/common/abstractions/fileDownload/fileDownload.service"; import { FolderService } from "@bitwarden/common/abstractions/folder/folder.service.abstraction"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; @@ -80,7 +80,7 @@ export class ViewComponent implements OnDestroy, OnInit { protected broadcasterService: BroadcasterService, protected ngZone: NgZone, protected changeDetectorRef: ChangeDetectorRef, - protected eventService: EventService, + protected eventCollectionService: EventCollectionService, protected apiService: ApiService, protected passwordRepromptService: PasswordRepromptService, private logService: LogService, @@ -138,7 +138,7 @@ export class ViewComponent implements OnDestroy, OnInit { } if (this.previousCipherId !== this.cipherId) { - this.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId); + this.eventCollectionService.collect(EventType.Cipher_ClientViewed, this.cipherId); } this.previousCipherId = this.cipherId; } @@ -238,7 +238,10 @@ export class ViewComponent implements OnDestroy, OnInit { this.showPassword = !this.showPassword; this.showPasswordCount = false; if (this.showPassword) { - this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledPasswordVisible, + this.cipherId + ); } } @@ -257,7 +260,10 @@ export class ViewComponent implements OnDestroy, OnInit { this.showCardNumber = !this.showCardNumber; if (this.showCardNumber) { - this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledCardNumberVisible, + this.cipherId + ); } } @@ -268,7 +274,10 @@ export class ViewComponent implements OnDestroy, OnInit { this.showCardCode = !this.showCardCode; if (this.showCardCode) { - this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledCardCodeVisible, + this.cipherId + ); } } @@ -328,11 +337,14 @@ export class ViewComponent implements OnDestroy, OnInit { ); if (typeI18nKey === "password") { - this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId); + this.eventCollectionService.collect( + EventType.Cipher_ClientToggledHiddenFieldVisible, + this.cipherId + ); } else if (typeI18nKey === "securityCode") { - this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId); } else if (aType === "H_Field") { - this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId); } } diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 5399c90e63..736190e819 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -19,7 +19,8 @@ import { CryptoService as CryptoServiceAbstraction } from "@bitwarden/common/abs import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "@bitwarden/common/abstractions/cryptoFunction.service"; import { EncryptService } from "@bitwarden/common/abstractions/encrypt.service"; import { EnvironmentService as EnvironmentServiceAbstraction } from "@bitwarden/common/abstractions/environment.service"; -import { EventService as EventServiceAbstraction } from "@bitwarden/common/abstractions/event.service"; +import { EventCollectionService as EventCollectionServiceAbstraction } from "@bitwarden/common/abstractions/event/event-collection.service"; +import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service"; import { ExportService as ExportServiceAbstraction } from "@bitwarden/common/abstractions/export.service"; import { FileUploadService as FileUploadServiceAbstraction } from "@bitwarden/common/abstractions/fileUpload.service"; import { FolderApiServiceAbstraction } from "@bitwarden/common/abstractions/folder/folder-api.service.abstraction"; @@ -85,7 +86,8 @@ import { CryptoService } from "@bitwarden/common/services/crypto.service"; import { EncryptServiceImplementation } from "@bitwarden/common/services/cryptography/encrypt.service.implementation"; import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/services/cryptography/multithread-encrypt.service.implementation"; import { EnvironmentService } from "@bitwarden/common/services/environment.service"; -import { EventService } from "@bitwarden/common/services/event.service"; +import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service"; +import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; import { ExportService } from "@bitwarden/common/services/export.service"; import { FileUploadService } from "@bitwarden/common/services/fileUpload.service"; import { FolderApiService } from "@bitwarden/common/services/folder/folder-api.service"; @@ -457,14 +459,18 @@ import { AbstractThemingService } from "./theming/theming.service.abstraction"; deps: [CryptoFunctionServiceAbstraction, LogService, LOG_MAC_FAILURES], }, { - provide: EventServiceAbstraction, - useClass: EventService, + provide: EventUploadServiceAbstraction, + useClass: EventUploadService, + deps: [ApiServiceAbstraction, StateServiceAbstraction, LogService], + }, + { + provide: EventCollectionServiceAbstraction, + useClass: EventCollectionService, deps: [ - ApiServiceAbstraction, CipherServiceAbstraction, StateServiceAbstraction, - LogService, OrganizationServiceAbstraction, + EventUploadServiceAbstraction, ], }, { diff --git a/libs/common/src/abstractions/event.service.ts b/libs/common/src/abstractions/event.service.ts deleted file mode 100644 index d774eb5e2e..0000000000 --- a/libs/common/src/abstractions/event.service.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { EventType } from "../enums/eventType"; - -export abstract class EventService { - collect: ( - eventType: EventType, - cipherId?: string, - uploadImmediately?: boolean, - organizationId?: string - ) => Promise; - uploadEvents: (userId?: string) => Promise; - clearEvents: (userId?: string) => Promise; -} diff --git a/libs/common/src/abstractions/event/event-collection.service.ts b/libs/common/src/abstractions/event/event-collection.service.ts new file mode 100644 index 0000000000..ca6c545026 --- /dev/null +++ b/libs/common/src/abstractions/event/event-collection.service.ts @@ -0,0 +1,10 @@ +import { EventType } from "../../enums/eventType"; + +export abstract class EventCollectionService { + collect: ( + eventType: EventType, + cipherId?: string, + uploadImmediately?: boolean, + organizationId?: string + ) => Promise; +} diff --git a/libs/common/src/abstractions/event/event-upload.service.ts b/libs/common/src/abstractions/event/event-upload.service.ts new file mode 100644 index 0000000000..b68f6f718d --- /dev/null +++ b/libs/common/src/abstractions/event/event-upload.service.ts @@ -0,0 +1,3 @@ +export abstract class EventUploadService { + uploadEvents: (userId?: string) => Promise; +} diff --git a/libs/common/src/services/event.service.ts b/libs/common/src/services/event.service.ts deleted file mode 100644 index 3221741a22..0000000000 --- a/libs/common/src/services/event.service.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { ApiService } from "../abstractions/api.service"; -import { CipherService } from "../abstractions/cipher.service"; -import { EventService as EventServiceAbstraction } from "../abstractions/event.service"; -import { LogService } from "../abstractions/log.service"; -import { OrganizationService } from "../abstractions/organization/organization.service.abstraction"; -import { StateService } from "../abstractions/state.service"; -import { EventType } from "../enums/eventType"; -import { EventData } from "../models/data/event.data"; -import { EventRequest } from "../models/request/event.request"; - -export class EventService implements EventServiceAbstraction { - private inited = false; - - constructor( - private apiService: ApiService, - private cipherService: CipherService, - private stateService: StateService, - private logService: LogService, - private organizationService: OrganizationService - ) {} - - init(checkOnInterval: boolean) { - if (this.inited) { - return; - } - - this.inited = true; - if (checkOnInterval) { - this.uploadEvents(); - setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds - } - } - - async collect( - eventType: EventType, - cipherId: string = null, - uploadImmediately = false, - organizationId: string = null - ): Promise { - const authed = await this.stateService.getIsAuthenticated(); - if (!authed) { - return; - } - const organizations = await this.organizationService.getAll(); - if (organizations == null) { - return; - } - const orgIds = new Set(organizations.filter((o) => o.useEvents).map((o) => o.id)); - if (orgIds.size === 0) { - return; - } - if (cipherId != null) { - const cipher = await this.cipherService.get(cipherId); - if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) { - return; - } - } - if (organizationId != null) { - if (!orgIds.has(organizationId)) { - return; - } - } - let eventCollection = await this.stateService.getEventCollection(); - if (eventCollection == null) { - eventCollection = []; - } - const event = new EventData(); - event.type = eventType; - event.cipherId = cipherId; - event.date = new Date().toISOString(); - event.organizationId = organizationId; - eventCollection.push(event); - await this.stateService.setEventCollection(eventCollection); - if (uploadImmediately) { - await this.uploadEvents(); - } - } - - async uploadEvents(userId?: string): Promise { - const authed = await this.stateService.getIsAuthenticated({ userId: userId }); - if (!authed) { - return; - } - const eventCollection = await this.stateService.getEventCollection({ userId: userId }); - if (eventCollection == null || eventCollection.length === 0) { - return; - } - const request = eventCollection.map((e) => { - const req = new EventRequest(); - req.type = e.type; - req.cipherId = e.cipherId; - req.date = e.date; - req.organizationId = e.organizationId; - return req; - }); - try { - await this.apiService.postEventsCollect(request); - this.clearEvents(userId); - } catch (e) { - this.logService.error(e); - } - } - - async clearEvents(userId?: string): Promise { - await this.stateService.setEventCollection(null, { userId: userId }); - } -} diff --git a/libs/common/src/services/event/event-collection.service.ts b/libs/common/src/services/event/event-collection.service.ts new file mode 100644 index 0000000000..52285f8577 --- /dev/null +++ b/libs/common/src/services/event/event-collection.service.ts @@ -0,0 +1,61 @@ +import { CipherService } from "../../abstractions/cipher.service"; +import { EventCollectionService as EventCollectionServiceAbstraction } from "../../abstractions/event/event-collection.service"; +import { EventUploadService } from "../../abstractions/event/event-upload.service"; +import { OrganizationService } from "../../abstractions/organization/organization.service.abstraction"; +import { StateService } from "../../abstractions/state.service"; +import { EventType } from "../../enums/eventType"; +import { EventData } from "../../models/data/event.data"; + +export class EventCollectionService implements EventCollectionServiceAbstraction { + constructor( + private cipherService: CipherService, + private stateService: StateService, + private organizationService: OrganizationService, + private eventUploadService: EventUploadService + ) {} + + async collect( + eventType: EventType, + cipherId: string = null, + uploadImmediately = false, + organizationId: string = null + ): Promise { + const authed = await this.stateService.getIsAuthenticated(); + if (!authed) { + return; + } + const organizations = await this.organizationService.getAll(); + if (organizations == null) { + return; + } + const orgIds = new Set(organizations.filter((o) => o.useEvents).map((o) => o.id)); + if (orgIds.size === 0) { + return; + } + if (cipherId != null) { + const cipher = await this.cipherService.get(cipherId); + if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) { + return; + } + } + if (organizationId != null) { + if (!orgIds.has(organizationId)) { + return; + } + } + let eventCollection = await this.stateService.getEventCollection(); + if (eventCollection == null) { + eventCollection = []; + } + const event = new EventData(); + event.type = eventType; + event.cipherId = cipherId; + event.date = new Date().toISOString(); + event.organizationId = organizationId; + eventCollection.push(event); + await this.stateService.setEventCollection(eventCollection); + if (uploadImmediately) { + await this.eventUploadService.uploadEvents(); + } + } +} diff --git a/libs/common/src/services/event/event-upload.service.ts b/libs/common/src/services/event/event-upload.service.ts new file mode 100644 index 0000000000..ca118ea7e8 --- /dev/null +++ b/libs/common/src/services/event/event-upload.service.ts @@ -0,0 +1,55 @@ +import { ApiService } from "../../abstractions/api.service"; +import { EventUploadService as EventUploadServiceAbstraction } from "../../abstractions/event/event-upload.service"; +import { LogService } from "../../abstractions/log.service"; +import { StateService } from "../../abstractions/state.service"; +import { EventRequest } from "../../models/request/event.request"; + +export class EventUploadService implements EventUploadServiceAbstraction { + private inited = false; + constructor( + private apiService: ApiService, + private stateService: StateService, + private logService: LogService + ) {} + + init(checkOnInterval: boolean) { + if (this.inited) { + return; + } + + this.inited = true; + if (checkOnInterval) { + this.uploadEvents(); + setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds + } + } + + async uploadEvents(userId?: string): Promise { + const authed = await this.stateService.getIsAuthenticated({ userId: userId }); + if (!authed) { + return; + } + const eventCollection = await this.stateService.getEventCollection({ userId: userId }); + if (eventCollection == null || eventCollection.length === 0) { + return; + } + const request = eventCollection.map((e) => { + const req = new EventRequest(); + req.type = e.type; + req.cipherId = e.cipherId; + req.date = e.date; + req.organizationId = e.organizationId; + return req; + }); + try { + await this.apiService.postEventsCollect(request); + this.clearEvents(userId); + } catch (e) { + this.logService.error(e); + } + } + + private async clearEvents(userId?: string): Promise { + await this.stateService.setEventCollection(null, { userId: userId }); + } +}