@ -1,38 +1,32 @@
import { APP_INITIALIZER , NgModule } from "@angular/core" ;
import { APP_INITIALIZER , NgModule } from "@angular/core" ;
import { ToastrModule } from "ngx-toastr" ;
import { ToastrModule } from "ngx-toastr" ;
import { JslibServicesModule } from "jslib-angular/services/jslib-services.module" ;
import {
JslibServicesModule ,
WINDOW ,
SECURE_STORAGE ,
STATE_FACTORY ,
STATE_SERVICE_USE_CACHE ,
LOCALES_DIRECTORY ,
SYSTEM_LANGUAGE ,
} from "jslib-angular/services/jslib-services.module" ;
import { ModalService as ModalServiceAbstraction } from "jslib-angular/services/modal.service" ;
import { ModalService as ModalServiceAbstraction } from "jslib-angular/services/modal.service" ;
import { ApiService as ApiServiceAbstraction } from "jslib-common/abstractions/api.service" ;
import { ApiService as ApiServiceAbstraction } from "jslib-common/abstractions/api.service" ;
import { CipherService as CipherServiceAbstraction } from "jslib-common/abstractions/cipher.service" ;
import { CipherService as CipherServiceAbstraction } from "jslib-common/abstractions/cipher.service" ;
import { CollectionService as CollectionServiceAbstraction } from "jslib-common/abstractions/collection.service" ;
import { CollectionService as CollectionServiceAbstraction } from "jslib-common/abstractions/collection.service" ;
import { CryptoService as CryptoServiceAbstraction } from "jslib-common/abstractions/crypto.service" ;
import { CryptoService as CryptoServiceAbstraction } from "jslib-common/abstractions/crypto.service" ;
import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "jslib-common/abstractions/cryptoFunction.service" ;
import {
EnvironmentService as EnvironmentServiceAbstraction ,
Urls ,
} from "jslib-common/abstractions/environment.service" ;
import { EventService as EventLoggingServiceAbstraction } from "jslib-common/abstractions/event.service" ;
import { FolderService as FolderServiceAbstraction } from "jslib-common/abstractions/folder.service" ;
import { FolderService as FolderServiceAbstraction } from "jslib-common/abstractions/folder.service" ;
import { I18nService as I18nServiceAbstraction } from "jslib-common/abstractions/i18n.service" ;
import { I18nService as I18nServiceAbstraction } from "jslib-common/abstractions/i18n.service" ;
import { ImportService as ImportServiceAbstraction } from "jslib-common/abstractions/import.service" ;
import { ImportService as ImportServiceAbstraction } from "jslib-common/abstractions/import.service" ;
import { LogService } from "jslib-common/abstractions/log.service" ;
import { LogService } from "jslib-common/abstractions/log.service" ;
import { MessagingService as MessagingServiceAbstraction } from "jslib-common/abstractions/messaging.service" ;
import { MessagingService as MessagingServiceAbstraction } from "jslib-common/abstractions/messaging.service" ;
import { NotificationsService as NotificationsServiceAbstraction } from "jslib-common/abstractions/notifications.service" ;
import { PasswordRepromptService as PasswordRepromptServiceAbstraction } from "jslib-common/abstractions/passwordReprompt.service" ;
import { PasswordRepromptService as PasswordRepromptServiceAbstraction } from "jslib-common/abstractions/passwordReprompt.service" ;
import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "jslib-common/abstractions/platformUtils.service" ;
import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "jslib-common/abstractions/platformUtils.service" ;
import { StateService as BaseStateServiceAbstraction } from "jslib-common/abstractions/state.service" ;
import { StateService as BaseStateServiceAbstraction } from "jslib-common/abstractions/state.service" ;
import { StateMigrationService as StateMigrationServiceAbstraction } from "jslib-common/abstractions/stateMigration.service" ;
import { StateMigrationService as StateMigrationServiceAbstraction } from "jslib-common/abstractions/stateMigration.service" ;
import { StorageService as StorageServiceAbstraction } from "jslib-common/abstractions/storage.service" ;
import { StorageService as StorageServiceAbstraction } from "jslib-common/abstractions/storage.service" ;
import { TwoFactorService as TwoFactorServiceAbstraction } from "jslib-common/abstractions/twoFactor.service" ;
import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "jslib-common/abstractions/vaultTimeout.service" ;
import { ThemeType } from "jslib-common/enums/themeType" ;
import { StateFactory } from "jslib-common/factories/stateFactory" ;
import { StateFactory } from "jslib-common/factories/stateFactory" ;
import { ContainerService } from "jslib-common/services/container.service" ;
import { CryptoService } from "jslib-common/services/crypto.service" ;
import { EventService as EventLoggingService } from "jslib-common/services/event.service" ;
import { ImportService } from "jslib-common/services/import.service" ;
import { ImportService } from "jslib-common/services/import.service" ;
import { VaultTimeoutService } from "jslib-common/services/vaultTimeout.service" ;
import { StateService as StateServiceAbstraction } from "../../abstractions/state.service" ;
import { StateService as StateServiceAbstraction } from "../../abstractions/state.service" ;
import { Account } from "../../models/account" ;
import { Account } from "../../models/account" ;
@ -48,107 +42,52 @@ import { WebPlatformUtilsService } from "../../services/webPlatformUtils.service
import { HomeGuard } from "../guards/home.guard" ;
import { HomeGuard } from "../guards/home.guard" ;
import { EventService } from "./event.service" ;
import { EventService } from "./event.service" ;
import { InitService } from "./init.service" ;
import { ModalService } from "./modal.service" ;
import { ModalService } from "./modal.service" ;
import { OrganizationGuardService } from "./organization-guard.service" ;
import { OrganizationGuardService } from "./organization-guard.service" ;
import { OrganizationTypeGuardService } from "./organization-type-guard.service" ;
import { OrganizationTypeGuardService } from "./organization-type-guard.service" ;
import { PolicyListService } from "./policy-list.service" ;
import { PolicyListService } from "./policy-list.service" ;
import { RouterService } from "./router.service" ;
import { RouterService } from "./router.service" ;
export function initFactory (
window : Window ,
environmentService : EnvironmentServiceAbstraction ,
notificationsService : NotificationsServiceAbstraction ,
vaultTimeoutService : VaultTimeoutService ,
i18nService : I18nService ,
eventLoggingService : EventLoggingService ,
twoFactorService : TwoFactorServiceAbstraction ,
stateService : StateServiceAbstraction ,
platformUtilsService : PlatformUtilsServiceAbstraction ,
cryptoService : CryptoServiceAbstraction
) : ( ) = > void {
return async ( ) = > {
await stateService . init ( ) ;
const urls = process . env . URLS as Urls ;
urls . base ? ? = window . location . origin ;
environmentService . setUrls ( urls ) ;
setTimeout ( ( ) = > notificationsService . init ( ) , 3000 ) ;
vaultTimeoutService . init ( true ) ;
const locale = await stateService . getLocale ( ) ;
await i18nService . init ( locale ) ;
eventLoggingService . init ( true ) ;
twoFactorService . init ( ) ;
const htmlEl = window . document . documentElement ;
htmlEl . classList . add ( "locale_" + i18nService . translationLocale ) ;
// Initial theme is set in index.html which must be updated if there are any changes to theming logic
platformUtilsService . onDefaultSystemThemeChange ( async ( sysTheme ) = > {
const bwTheme = await stateService . getTheme ( ) ;
if ( bwTheme === ThemeType . System ) {
htmlEl . classList . remove ( "theme_" + ThemeType . Light , "theme_" + ThemeType . Dark ) ;
htmlEl . classList . add ( "theme_" + sysTheme ) ;
}
} ) ;
const containerService = new ContainerService ( cryptoService ) ;
containerService . attachToWindow ( window ) ;
} ;
}
@NgModule ( {
@NgModule ( {
imports : [ ToastrModule , JslibServicesModule ] ,
imports : [ ToastrModule , JslibServicesModule ] ,
declarations : [ ] ,
declarations : [ ] ,
providers : [
providers : [
{
InitService ,
provide : APP_INITIALIZER ,
useFactory : initFactory ,
deps : [
"WINDOW" ,
EnvironmentServiceAbstraction ,
NotificationsServiceAbstraction ,
VaultTimeoutServiceAbstraction ,
I18nServiceAbstraction ,
EventLoggingServiceAbstraction ,
TwoFactorServiceAbstraction ,
StateServiceAbstraction ,
PlatformUtilsServiceAbstraction ,
CryptoServiceAbstraction ,
] ,
multi : true ,
} ,
OrganizationGuardService ,
OrganizationGuardService ,
OrganizationTypeGuardService ,
OrganizationTypeGuardService ,
RouterService ,
RouterService ,
EventService ,
EventService ,
PolicyListService ,
PolicyListService ,
{
provide : APP_INITIALIZER ,
useFactory : ( initService : InitService ) = > initService . init ( ) ,
deps : [ InitService ] ,
multi : true ,
} ,
{
provide : STATE_FACTORY ,
useValue : new StateFactory ( GlobalState , Account ) ,
} ,
{
provide : STATE_SERVICE_USE_CACHE ,
useValue : false ,
} ,
{
{
provide : I18nServiceAbstraction ,
provide : I18nServiceAbstraction ,
useFactory : ( window : Window ) = > new I18nService ( window . navigator . language , "locales" ) ,
useClass : I18nService ,
deps : [ "WINDOW" ] ,
deps : [ SYSTEM_LANGUAGE , LOCALES_DIRECTORY ] ,
} ,
} ,
{ provide : StorageServiceAbstraction , useClass : HtmlStorageService } ,
{ provide : StorageServiceAbstraction , useClass : HtmlStorageService } ,
{
{
provide : "SECURE_STORAGE" ,
provide : SECURE_STORAGE ,
// TODO: platformUtilsService.isDev has a helper for this, but using that service here results in a circular dependency.
// TODO: platformUtilsService.isDev has a helper for this, but using that service here results in a circular dependency.
// We have a tech debt item in the backlog to break up platformUtilsService, but in the meantime simply checking the environement here is less cumbersome.
// We have a tech debt item in the backlog to break up platformUtilsService, but in the meantime simply checking the environement here is less cumbersome.
useClass : process.env.NODE_ENV === "development" ? HtmlStorageService : MemoryStorageService ,
useClass : process.env.NODE_ENV === "development" ? HtmlStorageService : MemoryStorageService ,
} ,
} ,
{
{
provide : PlatformUtilsServiceAbstraction ,
provide : PlatformUtilsServiceAbstraction ,
useFactory : (
useClass : WebPlatformUtilsService ,
i18nService : I18nServiceAbstraction ,
messagingService : MessagingServiceAbstraction ,
logService : LogService ,
stateService : StateServiceAbstraction
) = > new WebPlatformUtilsService ( i18nService , messagingService , logService , stateService ) ,
deps : [
I18nServiceAbstraction ,
MessagingServiceAbstraction ,
LogService ,
StateServiceAbstraction ,
] ,
} ,
} ,
{ provide : MessagingServiceAbstraction , useClass : BroadcasterMessagingService } ,
{ provide : MessagingServiceAbstraction , useClass : BroadcasterMessagingService } ,
{ provide : ModalServiceAbstraction , useClass : ModalService } ,
{ provide : ModalServiceAbstraction , useClass : ModalService } ,
@ -165,50 +104,21 @@ export function initFactory(
CryptoServiceAbstraction ,
CryptoServiceAbstraction ,
] ,
] ,
} ,
} ,
{
provide : CryptoServiceAbstraction ,
useClass : CryptoService ,
deps : [
CryptoFunctionServiceAbstraction ,
PlatformUtilsServiceAbstraction ,
LogService ,
StateServiceAbstraction ,
] ,
} ,
{
{
provide : StateMigrationServiceAbstraction ,
provide : StateMigrationServiceAbstraction ,
useFactory : (
useClass : StateMigrationService ,
storageService : StorageServiceAbstraction ,
deps : [ StorageServiceAbstraction , SECURE_STORAGE , STATE_FACTORY ] ,
secureStorageService : StorageServiceAbstraction
) = >
new StateMigrationService (
storageService ,
secureStorageService ,
new StateFactory ( GlobalState , Account )
) ,
deps : [ StorageServiceAbstraction , "SECURE_STORAGE" ] ,
} ,
} ,
{
{
provide : StateServiceAbstraction ,
provide : StateServiceAbstraction ,
useFactory : (
useClass : StateService ,
storageService : StorageServiceAbstraction ,
secureStorageService : StorageServiceAbstraction ,
logService : LogService ,
stateMigrationService : StateMigrationServiceAbstraction
) = >
new StateService (
storageService ,
secureStorageService ,
logService ,
stateMigrationService ,
new StateFactory ( GlobalState , Account ) ,
false
) ,
deps : [
deps : [
StorageServiceAbstraction ,
StorageServiceAbstraction ,
"SECURE_STORAGE" ,
SECURE_STORAGE ,
LogService ,
LogService ,
StateMigrationServiceAbstraction ,
StateMigrationServiceAbstraction ,
STATE_FACTORY ,
STATE_SERVICE_USE_CACHE ,
] ,
] ,
} ,
} ,
{
{