diff --git a/jslib b/jslib index 0a0cdaa7fd..92df633040 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit 0a0cdaa7fdfb7322c73258b270105c8fb6552b99 +Subproject commit 92df63304029049891a46d575612222fb9b6c325 diff --git a/package-lock.json b/package-lock.json index b9a8d134e8..8e320d5185 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1335,11 +1335,6 @@ "resolved": "https://registry.npmjs.org/angular2-toaster/-/angular2-toaster-8.0.0.tgz", "integrity": "sha512-MRDswCmhqFLBiot7C7SIq96NyU5aT9pwIVdYgmYJtXHp7N6fXk6QzuMSMhVvK12edUJntgmUft+SZfh45Oq0Wg==" }, - "angulartics2": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/angulartics2/-/angulartics2-9.1.0.tgz", - "integrity": "sha512-RAfHJSHyeRe834e5qCYLtp7fdFuKnz/myFTSVEUZV6nLp4cUotvX8XQhewUEpFv6gkrzJwcuY32JZxstDlNiXQ==" - }, "ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", diff --git a/package.json b/package.json index d429c9d870..16c1a890be 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,6 @@ "@microsoft/signalr": "3.1.13", "@microsoft/signalr-protocol-msgpack": "3.1.13", "angular2-toaster": "8.0.0", - "angulartics2": "9.1.0", "big-integer": "1.6.48", "browser-hrtime": "^1.1.8", "core-js": "2.6.2", diff --git a/src/background/commands.background.ts b/src/background/commands.background.ts index 463862852a..c45d28fda8 100644 --- a/src/background/commands.background.ts +++ b/src/background/commands.background.ts @@ -2,8 +2,6 @@ import { BrowserApi } from '../browser/browserApi'; import MainBackground from './main.background'; -import { Analytics } from 'jslib/misc'; - import { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service'; import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; import { VaultTimeoutService } from 'jslib/abstractions/vaultTimeout.service'; @@ -13,8 +11,7 @@ export default class CommandsBackground { private isVivaldi: boolean; constructor(private main: MainBackground, private passwordGenerationService: PasswordGenerationService, - private platformUtilsService: PlatformUtilsService, private analytics: Analytics, - private vaultTimeoutService: VaultTimeoutService) { + private platformUtilsService: PlatformUtilsService, private vaultTimeoutService: VaultTimeoutService) { this.isSafari = this.platformUtilsService.isSafari(); this.isVivaldi = this.platformUtilsService.isVivaldi(); } @@ -57,11 +54,6 @@ export default class CommandsBackground { const password = await this.passwordGenerationService.generatePassword(options); this.platformUtilsService.copyToClipboard(password, { window: window }); this.passwordGenerationService.addHistory(password); - - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Generated Password From Command', - }); } private async autoFillLogin(tab?: any) { @@ -78,11 +70,6 @@ export default class CommandsBackground { } await this.main.collectPageDetailsForContentScript(tab, 'autofill_cmd'); - - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Autofilled From Command', - }); } private async openPopup() { @@ -92,9 +79,5 @@ export default class CommandsBackground { } this.main.openPopup(); - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Opened Popup From Command', - }); } } diff --git a/src/background/contextMenus.background.ts b/src/background/contextMenus.background.ts index c07ced8d71..ee356a44aa 100644 --- a/src/background/contextMenus.background.ts +++ b/src/background/contextMenus.background.ts @@ -2,8 +2,6 @@ import { BrowserApi } from '../browser/browserApi'; import MainBackground from './main.background'; -import { Analytics } from 'jslib/misc'; - import { CipherService } from 'jslib/abstractions/cipher.service'; import { EventService } from 'jslib/abstractions/event.service'; import { PasswordGenerationService } from 'jslib/abstractions/passwordGeneration.service'; @@ -17,7 +15,7 @@ export default class ContextMenusBackground { private contextMenus: any; constructor(private main: MainBackground, private cipherService: CipherService, - private passwordGenerationService: PasswordGenerationService, private analytics: Analytics, + private passwordGenerationService: PasswordGenerationService, private platformUtilsService: PlatformUtilsService, private vaultTimeoutService: VaultTimeoutService, private eventService: EventService, private totpService: TotpService) { this.contextMenus = chrome.contextMenus; @@ -45,11 +43,6 @@ export default class ContextMenusBackground { const password = await this.passwordGenerationService.generatePassword(options); this.platformUtilsService.copyToClipboard(password, { window: window }); this.passwordGenerationService.addHistory(password); - - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Generated Password From Context Menu', - }); } private async cipherAction(info: any) { @@ -72,29 +65,13 @@ export default class ContextMenusBackground { } if (info.parentMenuItemId === 'autofill') { - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Autofilled From Context Menu', - }); await this.startAutofillPage(cipher); } else if (info.parentMenuItemId === 'copy-username') { - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Copied Username From Context Menu', - }); this.platformUtilsService.copyToClipboard(cipher.login.username, { window: window }); } else if (info.parentMenuItemId === 'copy-password') { - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Copied Password From Context Menu', - }); this.platformUtilsService.copyToClipboard(cipher.login.password, { window: window }); this.eventService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id); } else if (info.parentMenuItemId === 'copy-totp') { - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Copied Totp From Context Menu', - }); const totpValue = await this.totpService.getCode(cipher.login.totp); this.platformUtilsService.copyToClipboard(totpValue, { window: window }); } diff --git a/src/background/main.background.ts b/src/background/main.background.ts index dd027cc5d9..c8a9947fd7 100644 --- a/src/background/main.background.ts +++ b/src/background/main.background.ts @@ -64,7 +64,6 @@ import { SearchService as SearchServiceAbstraction } from 'jslib/abstractions/se import { SendService as SendServiceAbstraction } from 'jslib/abstractions/send.service'; import { SystemService as SystemServiceAbstraction } from 'jslib/abstractions/system.service'; -import { Analytics } from 'jslib/misc'; import { Utils } from 'jslib/misc/utils'; import { BrowserApi } from '../browser/browserApi'; @@ -123,7 +122,6 @@ export default class MainBackground { systemService: SystemServiceAbstraction; eventService: EventServiceAbstraction; policyService: PolicyServiceAbstraction; - analytics: Analytics; popupUtilsService: PopupUtilsService; sendService: SendServiceAbstraction; fileUploadService: FileUploadServiceAbstraction; @@ -227,8 +225,6 @@ export default class MainBackground { this.apiService, this.vaultTimeoutService, () => this.logout(true), this.consoleLogService); this.environmentService = new EnvironmentService(this.apiService, this.storageService, this.notificationsService); - this.analytics = new Analytics(window, () => BrowserApi.gaFilter(), this.platformUtilsService, - this.storageService, this.appIdService); this.popupUtilsService = new PopupUtilsService(this.platformUtilsService); this.systemService = new SystemService(this.storageService, this.vaultTimeoutService, this.messagingService, this.platformUtilsService, () => { @@ -246,18 +242,17 @@ export default class MainBackground { // Background this.runtimeBackground = new RuntimeBackground(this, this.autofillService, this.cipherService, this.platformUtilsService as BrowserPlatformUtilsService, this.storageService, this.i18nService, - this.analytics, this.notificationsService, this.systemService, this.vaultTimeoutService, + this.notificationsService, this.systemService, this.vaultTimeoutService, this.environmentService, this.policyService, this.userService, this.messagingService); this.nativeMessagingBackground = new NativeMessagingBackground(this.storageService, this.cryptoService, this.cryptoFunctionService, this.vaultTimeoutService, this.runtimeBackground, this.i18nService, this.userService, this.messagingService, this.appIdService, this.platformUtilsService); this.commandsBackground = new CommandsBackground(this, this.passwordGenerationService, - this.platformUtilsService, this.analytics, this.vaultTimeoutService); + this.platformUtilsService, this.vaultTimeoutService); this.tabsBackground = new TabsBackground(this); - this.contextMenusBackground = new ContextMenusBackground(this, this.cipherService, - this.passwordGenerationService, this.analytics, this.platformUtilsService, this.vaultTimeoutService, - this.eventService, this.totpService); + this.contextMenusBackground = new ContextMenusBackground(this, this.cipherService, this.passwordGenerationService, + this.platformUtilsService, this.vaultTimeoutService, this.eventService, this.totpService); this.idleBackground = new IdleBackground(this.vaultTimeoutService, this.storageService, this.notificationsService); this.webRequestBackground = new WebRequestBackground(this.platformUtilsService, this.cipherService, @@ -277,7 +272,6 @@ export default class MainBackground { } async bootstrap() { - this.analytics.ga('send', 'pageview', '/background.html'); this.containerService.attachToWindow(window); (this.authService as AuthService).init(); diff --git a/src/background/runtime.background.ts b/src/background/runtime.background.ts index 1bfdbd8b85..81549215ee 100644 --- a/src/background/runtime.background.ts +++ b/src/background/runtime.background.ts @@ -22,7 +22,6 @@ import { BrowserApi } from '../browser/browserApi'; import MainBackground from './main.background'; -import { Analytics } from 'jslib/misc'; import { Utils } from 'jslib/misc/utils'; import { OrganizationUserStatusType } from 'jslib/enums/organizationUserStatusType'; @@ -37,7 +36,7 @@ export default class RuntimeBackground { constructor(private main: MainBackground, private autofillService: AutofillService, private cipherService: CipherService, private platformUtilsService: BrowserPlatformUtilsService, private storageService: StorageService, private i18nService: I18nService, - private analytics: Analytics, private notificationsService: NotificationsService, + private notificationsService: NotificationsService, private systemService: SystemService, private vaultTimeoutService: VaultTimeoutService, private environmentService: EnvironmentService, private policyService: PolicyService, private userService: UserService, private messagingService: MessagingService) { @@ -247,10 +246,6 @@ export default class RuntimeBackground { const cipher = await this.cipherService.encrypt(model); await this.cipherService.saveWithServer(cipher); - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Added Login from Notification Bar', - }); } } @@ -279,10 +274,6 @@ export default class RuntimeBackground { model.login.password = queueMessage.newPassword; const newCipher = await this.cipherService.encrypt(model); await this.cipherService.saveWithServer(newCipher); - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'Changed Password from Notification Bar', - }); } } } @@ -413,10 +404,6 @@ export default class RuntimeBackground { await this.setDefaultSettings(); } - this.analytics.ga('send', { - hitType: 'event', - eventAction: 'onInstalled ' + this.onInstalledReason, - }); this.onInstalledReason = null; } }, 100); diff --git a/src/popup/app.component.ts b/src/popup/app.component.ts index cbf6891fb5..43cba5d5e0 100644 --- a/src/popup/app.component.ts +++ b/src/popup/app.component.ts @@ -4,10 +4,8 @@ import { BodyOutputType, Toast, ToasterConfig, - ToasterContainerComponent, ToasterService, } from 'angular2-toaster'; -import { Angulartics2GoogleAnalytics } from 'angulartics2/ga'; import Swal, { SweetAlertIcon } from 'sweetalert2/src/sweetalert2.js'; import { @@ -24,8 +22,6 @@ import { RouterOutlet, } from '@angular/router'; -import { Angulartics2 } from 'angulartics2'; - import { BroadcasterService } from 'jslib/angular/services/broadcaster.service'; import { AuthService } from 'jslib/abstractions/auth.service'; @@ -61,8 +57,7 @@ export class AppComponent implements OnInit { private lastActivity: number = null; - constructor(private angulartics2GoogleAnalytics: Angulartics2GoogleAnalytics, private analytics: Angulartics2, - private toasterService: ToasterService, private storageService: StorageService, + constructor(private toasterService: ToasterService, private storageService: StorageService, private broadcasterService: BroadcasterService, private authService: AuthService, private i18nService: I18nService, private router: Router, private stateService: StateService, private messagingService: MessagingService, @@ -87,7 +82,6 @@ export class AppComponent implements OnInit { if (msg.command === 'doneLoggingOut') { this.ngZone.run(async () => { this.authService.logOut(() => { - this.analytics.eventTrack.next({ action: 'Logged Out' }); if (msg.expired) { this.showToast({ type: 'warning', @@ -115,11 +109,6 @@ export class AppComponent implements OnInit { this.ngZone.run(() => { this.showToast(msg); }); - } else if (msg.command === 'analyticsEventTrack') { - this.analytics.eventTrack.next({ - action: msg.action, - properties: { label: msg.label }, - }); } else if (msg.command === 'reloadProcess') { const windowReload = this.platformUtilsService.isSafari() || this.platformUtilsService.isFirefox() || this.platformUtilsService.isOpera(); diff --git a/src/popup/app.module.ts b/src/popup/app.module.ts index 7cf73315ca..27806f189c 100644 --- a/src/popup/app.module.ts +++ b/src/popup/app.module.ts @@ -3,8 +3,6 @@ import 'zone.js/dist/zone'; import { DragDropModule } from '@angular/cdk/drag-drop'; import { ToasterModule } from 'angular2-toaster'; -import { Angulartics2Module } from 'angulartics2'; -import { Angulartics2GoogleAnalytics } from 'angulartics2/ga'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { AppRoutingModule } from './app-routing.module'; @@ -166,11 +164,6 @@ registerLocaleData(localeZhTw, 'zh-TW'); FormsModule, AppRoutingModule, ServicesModule, - Angulartics2Module.forRoot({ - pageTracking: { - clearQueryParams: true, - }, - }), ToasterModule.forRoot(), InfiniteScrollModule, DragDropModule, diff --git a/src/popup/components/action-buttons.component.ts b/src/popup/components/action-buttons.component.ts index 8cc92d8842..d1bc61e36e 100644 --- a/src/popup/components/action-buttons.component.ts +++ b/src/popup/components/action-buttons.component.ts @@ -6,9 +6,6 @@ import { } from '@angular/core'; import { ToasterService } from 'angular2-toaster'; -import { Angulartics2 } from 'angulartics2'; - -import { BrowserApi } from '../../browser/browserApi'; import { CipherType } from 'jslib/enums/cipherType'; import { EventType } from 'jslib/enums/eventType'; @@ -36,9 +33,8 @@ export class ActionButtonsComponent { cipherType = CipherType; userHasPremiumAccess = false; - constructor(private analytics: Angulartics2, private toasterService: ToasterService, - private i18nService: I18nService, private platformUtilsService: PlatformUtilsService, - private popupUtilsService: PopupUtilsService, private eventService: EventService, + constructor(private toasterService: ToasterService, private i18nService: I18nService, + private platformUtilsService: PlatformUtilsService, private eventService: EventService, private totpService: TotpService, private userService: UserService) { } async ngOnInit() { @@ -60,7 +56,6 @@ export class ActionButtonsComponent { return; } - this.analytics.eventTrack.next({ action: 'Copied ' + aType }); this.platformUtilsService.copyToClipboard(value, { window: window }); this.toasterService.popAsync('info', null, this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey))); diff --git a/src/popup/components/pop-out.component.ts b/src/popup/components/pop-out.component.ts index df9ceba57f..1f93c8605b 100644 --- a/src/popup/components/pop-out.component.ts +++ b/src/popup/components/pop-out.component.ts @@ -4,8 +4,6 @@ import { OnInit, } from '@angular/core'; -import { Angulartics2 } from 'angulartics2'; - import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; import { PopupUtilsService } from '../services/popup-utils.service'; @@ -17,7 +15,7 @@ import { PopupUtilsService } from '../services/popup-utils.service'; export class PopOutComponent implements OnInit { @Input() show = true; - constructor(private analytics: Angulartics2, private platformUtilsService: PlatformUtilsService, + constructor(private platformUtilsService: PlatformUtilsService, private popupUtilsService: PopupUtilsService) { } ngOnInit() { @@ -29,7 +27,6 @@ export class PopOutComponent implements OnInit { } expand() { - this.analytics.eventTrack.next({ action: 'Pop Out Window' }); this.popupUtilsService.popOut(window); } } diff --git a/src/popup/services/services.module.ts b/src/popup/services/services.module.ts index 1c7a5cd413..634c564dd0 100644 --- a/src/popup/services/services.module.ts +++ b/src/popup/services/services.module.ts @@ -53,8 +53,6 @@ import { ConstantsService } from 'jslib/services/constants.service'; import { SearchService } from 'jslib/services/search.service'; import { StateService } from 'jslib/services/state.service'; -import { Analytics } from 'jslib/misc/analytics'; - import { PopupSearchService } from './popup-search.service'; import { PopupUtilsService } from './popup-utils.service'; @@ -100,14 +98,6 @@ export function initFactory(platformUtilsService: PlatformUtilsService, i18nServ } window.document.documentElement.classList.add('locale_' + i18nService.translationLocale); window.document.documentElement.classList.add('theme_' + theme); - - const analytics = new Analytics(window, () => BrowserApi.gaFilter(), null, null, null, () => { - const bgPage = BrowserApi.getBackgroundPage(); - if (bgPage == null || bgPage.bitwardenMain == null) { - throw new Error('Cannot resolve background page main.'); - } - return bgPage.bitwardenMain; - }); } }; } diff --git a/src/popup/settings/options.component.ts b/src/popup/settings/options.component.ts index dc2bea76ba..f48aafd3f8 100644 --- a/src/popup/settings/options.component.ts +++ b/src/popup/settings/options.component.ts @@ -3,8 +3,6 @@ import { OnInit, } from '@angular/core'; -import { Angulartics2 } from 'angulartics2'; - import { UriMatchType } from 'jslib/enums/uriMatchType'; import { I18nService } from 'jslib/abstractions/i18n.service'; @@ -38,10 +36,8 @@ export class OptionsComponent implements OnInit { clearClipboard: number; clearClipboardOptions: any[]; - constructor(private analytics: Angulartics2, private messagingService: MessagingService, - private platformUtilsService: PlatformUtilsService, private storageService: StorageService, - private stateService: StateService, private totpService: TotpService, - i18nService: I18nService) { + constructor(private messagingService: MessagingService, private storageService: StorageService, + private stateService: StateService, private totpService: TotpService, i18nService: I18nService) { this.themeOptions = [ { name: i18nService.t('default'), value: null }, { name: i18nService.t('light'), value: 'light' }, @@ -100,36 +96,30 @@ export class OptionsComponent implements OnInit { async updateAddLoginNotification() { await this.storageService.save(ConstantsService.disableAddLoginNotificationKey, this.disableAddLoginNotification); - this.callAnalytics('Add Login Notification', !this.disableAddLoginNotification); } async updateChangedPasswordNotification() { await this.storageService.save(ConstantsService.disableChangedPasswordNotificationKey, this.disableChangedPasswordNotification); - this.callAnalytics('Changed Password Notification', !this.disableChangedPasswordNotification); } async updateDisableContextMenuItem() { await this.storageService.save(ConstantsService.disableContextMenuItemKey, this.disableContextMenuItem); this.messagingService.send('bgUpdateContextMenu'); - this.callAnalytics('Context Menu Item', !this.disableContextMenuItem); } async updateAutoTotpCopy() { await this.storageService.save(ConstantsService.disableAutoTotpCopyKey, this.disableAutoTotpCopy); - this.callAnalytics('Auto Copy TOTP', !this.disableAutoTotpCopy); } async updateAutoFillOnPageLoad() { await this.storageService.save(ConstantsService.enableAutoFillOnPageLoadKey, this.enableAutoFillOnPageLoad); - this.callAnalytics('Auto-fill Page Load', this.enableAutoFillOnPageLoad); } async updateDisableFavicon() { await this.storageService.save(ConstantsService.disableFaviconKey, this.disableFavicon); await this.stateService.save(ConstantsService.disableFaviconKey, this.disableFavicon); - this.callAnalytics('Favicon', !this.disableFavicon); } async updateDisableBadgeCounter() { @@ -141,35 +131,23 @@ export class OptionsComponent implements OnInit { async updateShowCards() { await this.storageService.save(ConstantsService.dontShowCardsCurrentTab, this.dontShowCards); await this.stateService.save(ConstantsService.dontShowCardsCurrentTab, this.dontShowCards); - this.callAnalytics('Show Cards on Current Tab', !this.dontShowCards); } async updateShowIdentities() { await this.storageService.save(ConstantsService.dontShowIdentitiesCurrentTab, this.dontShowIdentities); await this.stateService.save(ConstantsService.dontShowIdentitiesCurrentTab, this.dontShowIdentities); - this.callAnalytics('Show Identities on Current Tab', !this.dontShowIdentities); } async saveTheme() { await this.storageService.save(ConstantsService.themeKey, this.theme); - this.analytics.eventTrack.next({ action: 'Set Theme ' + this.theme }); window.setTimeout(() => window.location.reload(), 200); } async saveDefaultUriMatch() { await this.storageService.save(ConstantsService.defaultUriMatch, this.defaultUriMatch); - this.analytics.eventTrack.next({ action: 'Set Default URI Match ' + this.defaultUriMatch }); } async saveClearClipboard() { await this.storageService.save(ConstantsService.clearClipboardKey, this.clearClipboard); - this.analytics.eventTrack.next({ - action: 'Set Clear Clipboard ' + (this.clearClipboard == null ? 'Disabled' : this.clearClipboard), - }); - } - - private callAnalytics(name: string, enabled: boolean) { - const status = enabled ? 'Enabled' : 'Disabled'; - this.analytics.eventTrack.next({ action: `${status} ${name}` }); } } diff --git a/src/popup/settings/settings.component.ts b/src/popup/settings/settings.component.ts index b8923b0ce5..298838e890 100644 --- a/src/popup/settings/settings.component.ts +++ b/src/popup/settings/settings.component.ts @@ -1,4 +1,3 @@ -import { Angulartics2 } from 'angulartics2'; import Swal from 'sweetalert2/src/sweetalert2.js'; import { @@ -57,11 +56,10 @@ export class SettingsComponent implements OnInit { previousVaultTimeout: number = null; constructor(private platformUtilsService: PlatformUtilsService, private i18nService: I18nService, - private analytics: Angulartics2, private vaultTimeoutService: VaultTimeoutService, - private storageService: StorageService, public messagingService: MessagingService, - private router: Router, private environmentService: EnvironmentService, - private cryptoService: CryptoService, private userService: UserService, - private popupUtilsService: PopupUtilsService) { + private vaultTimeoutService: VaultTimeoutService, private storageService: StorageService, + public messagingService: MessagingService, private router: Router, + private environmentService: EnvironmentService, private cryptoService: CryptoService, + private userService: UserService, private popupUtilsService: PopupUtilsService) { } async ngOnInit() { @@ -280,7 +278,6 @@ export class SettingsComponent implements OnInit { } async lock() { - this.analytics.eventTrack.next({ action: 'Lock Now' }); await this.vaultTimeoutService.lock(true); } @@ -294,7 +291,6 @@ export class SettingsComponent implements OnInit { } async changePassword() { - this.analytics.eventTrack.next({ action: 'Clicked Change Password' }); const confirmed = await this.platformUtilsService.showDialog( this.i18nService.t('changeMasterPasswordConfirmation'), this.i18nService.t('changeMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('cancel')); @@ -304,7 +300,6 @@ export class SettingsComponent implements OnInit { } async twoStep() { - this.analytics.eventTrack.next({ action: 'Clicked Two-step Login' }); const confirmed = await this.platformUtilsService.showDialog( this.i18nService.t('twoStepLoginConfirmation'), this.i18nService.t('twoStepLogin'), this.i18nService.t('yes'), this.i18nService.t('cancel')); @@ -314,7 +309,6 @@ export class SettingsComponent implements OnInit { } async share() { - this.analytics.eventTrack.next({ action: 'Clicked Share Vault' }); const confirmed = await this.platformUtilsService.showDialog( this.i18nService.t('shareVaultConfirmation'), this.i18nService.t('shareVault'), this.i18nService.t('yes'), this.i18nService.t('cancel')); @@ -324,7 +318,6 @@ export class SettingsComponent implements OnInit { } async webVault() { - this.analytics.eventTrack.next({ action: 'Clicked Web Vault' }); let url = this.environmentService.getWebVaultUrl(); if (url == null) { url = 'https://vault.bitwarden.com'; @@ -333,7 +326,6 @@ export class SettingsComponent implements OnInit { } import() { - this.analytics.eventTrack.next({ action: 'Clicked Import Items' }); BrowserApi.createNewTab('https://help.bitwarden.com/article/import-data/'); } @@ -342,13 +334,10 @@ export class SettingsComponent implements OnInit { } help() { - this.analytics.eventTrack.next({ action: 'Clicked Help and Feedback' }); BrowserApi.createNewTab('https://help.bitwarden.com/'); } about() { - this.analytics.eventTrack.next({ action: 'Clicked About' }); - const year = (new Date()).getFullYear(); const versionText = document.createTextNode( this.i18nService.t('version') + ': ' + BrowserApi.getApplicationVersion()); @@ -368,8 +357,6 @@ export class SettingsComponent implements OnInit { } async fingerprint() { - this.analytics.eventTrack.next({ action: 'Clicked Fingerprint' }); - const fingerprint = await this.cryptoService.getFingerprint(await this.userService.getUserId()); const p = document.createElement('p'); p.innerText = this.i18nService.t('yourAccountsFingerprint') + ':'; @@ -395,7 +382,6 @@ export class SettingsComponent implements OnInit { } rate() { - this.analytics.eventTrack.next({ action: 'Rate Extension' }); const deviceType = this.platformUtilsService.getDevice(); BrowserApi.createNewTab((RateUrls as any)[deviceType]); } diff --git a/src/popup/settings/sync.component.ts b/src/popup/settings/sync.component.ts index 93df70d826..97aff76e75 100644 --- a/src/popup/settings/sync.component.ts +++ b/src/popup/settings/sync.component.ts @@ -1,11 +1,9 @@ import { ToasterService } from 'angular2-toaster'; -import { Angulartics2 } from 'angulartics2'; import { Component, OnInit, } from '@angular/core'; -import { Router } from '@angular/router'; import { I18nService } from 'jslib/abstractions/i18n.service'; import { SyncService } from 'jslib/abstractions/sync.service'; @@ -18,8 +16,7 @@ export class SyncComponent implements OnInit { lastSync = '--'; syncPromise: Promise; - constructor(private syncService: SyncService, private router: Router, - private toasterService: ToasterService, private analytics: Angulartics2, + constructor(private syncService: SyncService, private toasterService: ToasterService, private i18nService: I18nService) { } @@ -32,7 +29,6 @@ export class SyncComponent implements OnInit { const success = await this.syncPromise; if (success) { await this.setLastSync(); - this.analytics.eventTrack.next({ action: 'Synced Full' }); this.toasterService.popAsync('success', null, this.i18nService.t('syncingComplete')); } else { this.toasterService.popAsync('error', null, this.i18nService.t('syncingFailed')); diff --git a/src/popup/vault/ciphers.component.ts b/src/popup/vault/ciphers.component.ts index 0087347aad..02a07e6467 100644 --- a/src/popup/vault/ciphers.component.ts +++ b/src/popup/vault/ciphers.component.ts @@ -1,5 +1,3 @@ -import { Angulartics2 } from 'angulartics2'; - import { Location } from '@angular/common'; import { ChangeDetectorRef, @@ -63,8 +61,7 @@ export class CiphersComponent extends BaseCiphersComponent implements OnInit, On private changeDetectorRef: ChangeDetectorRef, private stateService: StateService, private popupUtils: PopupUtilsService, private i18nService: I18nService, private folderService: FolderService, private collectionService: CollectionService, - private analytics: Angulartics2, private platformUtilsService: PlatformUtilsService, - private cipherService: CipherService) { + private platformUtilsService: PlatformUtilsService, private cipherService: CipherService) { super(searchService); this.pageSize = 100; this.applySavedState = (window as any).previousPopupUrl != null && @@ -196,7 +193,6 @@ export class CiphersComponent extends BaseCiphersComponent implements OnInit, On window.clearTimeout(this.selectedTimeout); } this.preventSelected = true; - this.analytics.eventTrack.next({ action: 'Launched URI From Listing' }); await this.cipherService.updateLastLaunchedDate(cipher.id); BrowserApi.createNewTab(cipher.login.launchUri); if (this.popupUtils.inPopup(window)) { diff --git a/src/popup/vault/current-tab.component.ts b/src/popup/vault/current-tab.component.ts index 501734930b..78701b5f66 100644 --- a/src/popup/vault/current-tab.component.ts +++ b/src/popup/vault/current-tab.component.ts @@ -9,7 +9,6 @@ import { import { Router } from '@angular/router'; import { ToasterService } from 'angular2-toaster'; -import { Angulartics2 } from 'angulartics2'; import { BrowserApi } from '../../browser/browserApi'; @@ -59,8 +58,7 @@ export class CurrentTabComponent implements OnInit, OnDestroy { constructor(private platformUtilsService: PlatformUtilsService, private cipherService: CipherService, private popupUtilsService: PopupUtilsService, private autofillService: AutofillService, - private analytics: Angulartics2, private toasterService: ToasterService, - private i18nService: I18nService, private router: Router, + private toasterService: ToasterService, private i18nService: I18nService, private router: Router, private ngZone: NgZone, private broadcasterService: BroadcasterService, private changeDetectorRef: ChangeDetectorRef, private syncService: SyncService, private searchService: SearchService, private storageService: StorageService) { @@ -136,7 +134,6 @@ export class CurrentTabComponent implements OnInit, OnDestroy { } if (this.pageDetails == null || this.pageDetails.length === 0) { - this.analytics.eventTrack.next({ action: 'Autofilled Error' }); this.toasterService.popAsync('error', null, this.i18nService.t('autofillError')); return; } @@ -148,7 +145,6 @@ export class CurrentTabComponent implements OnInit, OnDestroy { doc: window.document, fillNewPassword: true, }); - this.analytics.eventTrack.next({ action: 'Autofilled' }); if (this.totpCode != null) { this.platformUtilsService.copyToClipboard(this.totpCode, { window: window }); } @@ -157,7 +153,6 @@ export class CurrentTabComponent implements OnInit, OnDestroy { } } catch { this.ngZone.run(() => { - this.analytics.eventTrack.next({ action: 'Autofilled Error' }); this.toasterService.popAsync('error', null, this.i18nService.t('autofillError')); this.changeDetectorRef.detectChanges(); }); diff --git a/src/popup/vault/groupings.component.ts b/src/popup/vault/groupings.component.ts index 0e755a2fa5..cb83095a35 100644 --- a/src/popup/vault/groupings.component.ts +++ b/src/popup/vault/groupings.component.ts @@ -1,5 +1,3 @@ -import { Angulartics2 } from 'angulartics2'; - import { Location } from '@angular/common'; import { ChangeDetectorRef, @@ -74,9 +72,8 @@ export class GroupingsComponent extends BaseGroupingsComponent implements OnInit private ngZone: NgZone, private broadcasterService: BroadcasterService, private changeDetectorRef: ChangeDetectorRef, private route: ActivatedRoute, private stateService: StateService, private popupUtils: PopupUtilsService, - private syncService: SyncService, private analytics: Angulartics2, - private platformUtilsService: PlatformUtilsService, private searchService: SearchService, - private location: Location) { + private syncService: SyncService, private platformUtilsService: PlatformUtilsService, + private searchService: SearchService, private location: Location) { super(collectionService, folderService, storageService, userService); this.noFolderListSize = 100; } @@ -284,7 +281,6 @@ export class GroupingsComponent extends BaseGroupingsComponent implements OnInit window.clearTimeout(this.selectedTimeout); } this.preventSelected = true; - this.analytics.eventTrack.next({ action: 'Launched URI From Listing' }); await this.cipherService.updateLastLaunchedDate(cipher.id); BrowserApi.createNewTab(cipher.login.launchUri); if (this.popupUtils.inPopup(window)) { diff --git a/src/services/browserPlatformUtils.service.ts b/src/services/browserPlatformUtils.service.ts index b770f91147..08f847933f 100644 --- a/src/services/browserPlatformUtils.service.ts +++ b/src/services/browserPlatformUtils.service.ts @@ -6,8 +6,6 @@ import { DeviceType } from 'jslib/enums/deviceType'; import { MessagingService } from 'jslib/abstractions/messaging.service'; import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; -import { AnalyticsIds } from 'jslib/misc/analytics'; - const DialogPromiseExpiration = 600000; // 10 minutes export default class BrowserPlatformUtilsService implements PlatformUtilsService { @@ -15,7 +13,6 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService private showDialogResolves = new Map void, date: Date }>(); private deviceCache: DeviceType = null; - private analyticsIdCache: string = null; private prefersColorSchemeDark = window.matchMedia('(prefers-color-scheme: dark)'); constructor(private messagingService: MessagingService, @@ -82,15 +79,6 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService return false; } - analyticsId(): string { - if (this.analyticsIdCache) { - return this.analyticsIdCache; - } - - this.analyticsIdCache = (AnalyticsIds as any)[this.getDevice()]; - return this.analyticsIdCache; - } - async isViewOpen(): Promise { if (await BrowserApi.isPopupOpen()) { return true; @@ -161,14 +149,6 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService }); } - eventTrack(action: string, label?: string, options?: any) { - this.messagingService.send('analyticsEventTrack', { - action: action, - label: label, - options: options, - }); - } - isDev(): boolean { return process.env.ENV === 'development'; }