2018-06-05 21:02:53 +02:00
import { APP_INITIALIZER , Injector , NgModule } from "@angular/core" ;
2021-12-07 20:41:45 +01:00
import { ToastrModule } from "ngx-toastr" ;
2018-06-05 21:02:53 +02:00
2018-06-10 04:40:53 +02:00
import { BroadcasterMessagingService } from "../../services/broadcasterMessaging.service" ;
import { HtmlStorageService } from "../../services/htmlStorage.service" ;
import { I18nService } from "../../services/i18n.service" ;
import { MemoryStorageService } from "../../services/memoryStorage.service" ;
2022-01-10 14:12:35 +01:00
import { PasswordRepromptService } from "../../services/passwordReprompt.service" ;
2022-01-04 17:15:58 +01:00
import { StateService } from "../../services/state.service" ;
2022-02-02 17:20:15 +01:00
import { StateMigrationService } from "../../services/stateMigration.service" ;
2018-06-10 04:40:53 +02:00
import { WebPlatformUtilsService } from "../../services/webPlatformUtils.service" ;
2018-06-05 21:02:53 +02:00
2018-07-07 05:08:10 +02:00
import { EventService } from "./event.service" ;
2021-12-03 03:32:58 +01:00
import { ModalService } from "./modal.service" ;
2018-07-05 21:27:23 +02:00
import { OrganizationGuardService } from "./organization-guard.service" ;
import { OrganizationTypeGuardService } from "./organization-type-guard.service" ;
2021-08-25 16:10:17 +02:00
import { PolicyListService } from "./policy-list.service" ;
2018-06-10 04:40:53 +02:00
import { RouterService } from "./router.service" ;
2018-06-10 04:02:45 +02:00
2021-12-03 03:32:58 +01:00
import { JslibServicesModule } from "jslib-angular/services/jslib-services.module" ;
2021-08-27 14:50:58 +02:00
import { ModalService as ModalServiceAbstraction } from "jslib-angular/services/modal.service" ;
2018-06-05 21:02:53 +02:00
2021-06-07 20:13:58 +02:00
import { AuthService } from "jslib-common/services/auth.service" ;
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 { VaultTimeoutService } from "jslib-common/services/vaultTimeout.service" ;
2018-06-05 21:02:53 +02:00
2021-06-07 20:13:58 +02:00
import { ApiService as ApiServiceAbstraction } from "jslib-common/abstractions/api.service" ;
import { AuthService as AuthServiceAbstraction } from "jslib-common/abstractions/auth.service" ;
import { CipherService as CipherServiceAbstraction } from "jslib-common/abstractions/cipher.service" ;
import { CollectionService as CollectionServiceAbstraction } from "jslib-common/abstractions/collection.service" ;
import { CryptoService as CryptoServiceAbstraction } from "jslib-common/abstractions/crypto.service" ;
import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "jslib-common/abstractions/cryptoFunction.service" ;
2021-08-25 20:15:31 +02:00
import {
EnvironmentService as EnvironmentServiceAbstraction ,
Urls ,
} from "jslib-common/abstractions/environment.service" ;
2021-06-07 20:13:58 +02:00
import { EventService as EventLoggingServiceAbstraction } from "jslib-common/abstractions/event.service" ;
import { FolderService as FolderServiceAbstraction } from "jslib-common/abstractions/folder.service" ;
import { I18nService as I18nServiceAbstraction } from "jslib-common/abstractions/i18n.service" ;
import { ImportService as ImportServiceAbstraction } from "jslib-common/abstractions/import.service" ;
2021-07-23 21:30:04 +02:00
import { LogService } from "jslib-common/abstractions/log.service" ;
2021-06-07 20:13:58 +02:00
import { MessagingService as MessagingServiceAbstraction } from "jslib-common/abstractions/messaging.service" ;
import { NotificationsService as NotificationsServiceAbstraction } from "jslib-common/abstractions/notifications.service" ;
2022-01-10 14:12:35 +01:00
import { PasswordRepromptService as PasswordRepromptServiceAbstraction } from "jslib-common/abstractions/passwordReprompt.service" ;
2021-06-07 20:13:58 +02:00
import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "jslib-common/abstractions/platformUtils.service" ;
2022-02-02 17:20:15 +01:00
import { StateService as BaseStateServiceAbstraction } from "jslib-common/abstractions/state.service" ;
2022-01-04 17:15:58 +01:00
import { StateMigrationService as StateMigrationServiceAbstraction } from "jslib-common/abstractions/stateMigration.service" ;
2021-06-07 20:13:58 +02:00
import { StorageService as StorageServiceAbstraction } from "jslib-common/abstractions/storage.service" ;
import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "jslib-common/abstractions/vaultTimeout.service" ;
2018-06-05 21:02:53 +02:00
2021-09-30 00:06:20 +02:00
import { ThemeType } from "jslib-common/enums/themeType" ;
2022-01-20 15:38:34 +01:00
import { Account } from "../../models/account" ;
2022-01-31 20:53:55 +01:00
import { GlobalState } from "../../models/globalState" ;
import { GlobalStateFactory } from "jslib-common/factories/globalStateFactory" ;
import { StateFactory } from "jslib-common/factories/stateFactory" ;
2022-01-20 15:38:34 +01:00
2022-02-02 17:20:15 +01:00
import { StateService as StateServiceAbstraction } from "../../abstractions/state.service" ;
2021-12-03 03:32:58 +01:00
export function initFactory (
window : Window ,
environmentService : EnvironmentServiceAbstraction ,
notificationsService : NotificationsServiceAbstraction ,
vaultTimeoutService : VaultTimeoutService ,
i18nService : I18nService ,
eventLoggingService : EventLoggingService ,
authService : AuthService ,
stateService : StateServiceAbstraction ,
platformUtilsService : PlatformUtilsServiceAbstraction ,
cryptoService : CryptoServiceAbstraction
) : Function {
2018-06-05 21:02:53 +02:00
return async ( ) = > {
2021-12-14 17:10:26 +01:00
await stateService . init ( ) ;
2021-04-09 09:57:25 +02:00
2021-08-25 20:15:31 +02:00
const urls = process . env . URLS as Urls ;
urls . base ? ? = window . location . origin ;
2022-01-28 15:07:33 +01:00
environmentService . setUrls ( urls ) ;
2021-04-09 09:57:25 +02:00
2021-07-23 20:47:43 +02:00
setTimeout ( ( ) = > notificationsService . init ( ) , 3000 ) ;
2018-06-22 03:32:17 +02:00
2020-03-30 16:59:47 +02:00
vaultTimeoutService . init ( true ) ;
2021-12-14 17:10:26 +01:00
const locale = await stateService . getLocale ( ) ;
2018-06-05 21:02:53 +02:00
await i18nService . init ( locale ) ;
2019-07-12 04:03:12 +02:00
eventLoggingService . init ( true ) ;
2018-10-04 17:58:19 +02:00
authService . init ( ) ;
2018-06-05 21:02:53 +02:00
const htmlEl = window . document . documentElement ;
htmlEl . classList . add ( "locale_" + i18nService . translationLocale ) ;
2021-09-30 00:06:20 +02:00
// Initial theme is set in index.html which must be updated if there are any changes to theming logic
platformUtilsService . onDefaultSystemThemeChange ( async ( sysTheme ) = > {
2021-12-14 17:10:26 +01:00
const bwTheme = await stateService . getTheme ( ) ;
2021-09-30 00:06:20 +02:00
if ( bwTheme === ThemeType . System ) {
htmlEl . classList . remove ( "theme_" + ThemeType . Light , "theme_" + ThemeType . Dark ) ;
htmlEl . classList . add ( "theme_" + sysTheme ) ;
}
} ) ;
2021-12-03 03:32:58 +01:00
const containerService = new ContainerService ( cryptoService ) ;
containerService . attachToWindow ( window ) ;
2018-06-05 21:02:53 +02:00
} ;
}
@NgModule ( {
2021-12-03 03:32:58 +01:00
imports : [ ToastrModule , JslibServicesModule ] ,
2018-06-05 21:02:53 +02:00
declarations : [ ] ,
providers : [
2021-12-03 03:32:58 +01:00
{
provide : APP_INITIALIZER ,
useFactory : initFactory ,
deps : [
"WINDOW" ,
EnvironmentServiceAbstraction ,
NotificationsServiceAbstraction ,
VaultTimeoutServiceAbstraction ,
I18nServiceAbstraction ,
EventLoggingServiceAbstraction ,
AuthServiceAbstraction ,
StateServiceAbstraction ,
PlatformUtilsServiceAbstraction ,
CryptoServiceAbstraction ,
] ,
multi : true ,
} ,
2018-07-05 21:27:23 +02:00
OrganizationGuardService ,
OrganizationTypeGuardService ,
2018-06-10 04:40:53 +02:00
RouterService ,
2018-07-07 05:08:10 +02:00
EventService ,
2021-08-25 16:10:17 +02:00
PolicyListService ,
2021-12-03 03:32:58 +01:00
{
provide : I18nServiceAbstraction ,
useFactory : ( window : Window ) = > new I18nService ( window . navigator . language , "locales" ) ,
deps : [ "WINDOW" ] ,
} ,
{ provide : StorageServiceAbstraction , useClass : HtmlStorageService } ,
2021-12-28 16:47:41 +01:00
{
provide : "SECURE_STORAGE" ,
// 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.
useClass : process.env.NODE_ENV === "development" ? HtmlStorageService : MemoryStorageService ,
} ,
2021-12-03 03:32:58 +01:00
{
provide : PlatformUtilsServiceAbstraction ,
useFactory : (
i18nService : I18nServiceAbstraction ,
messagingService : MessagingServiceAbstraction ,
2021-12-14 17:10:26 +01:00
logService : LogService ,
stateService : StateServiceAbstraction
) = > new WebPlatformUtilsService ( i18nService , messagingService , logService , stateService ) ,
2021-12-03 03:32:58 +01:00
deps : [
I18nServiceAbstraction ,
MessagingServiceAbstraction ,
LogService ,
2021-12-14 17:10:26 +01:00
StateServiceAbstraction ,
2021-12-03 03:32:58 +01:00
] ,
} ,
{ provide : MessagingServiceAbstraction , useClass : BroadcasterMessagingService } ,
2021-08-27 14:50:58 +02:00
{ provide : ModalServiceAbstraction , useClass : ModalService } ,
2018-06-05 21:02:53 +02:00
{
2021-12-03 03:32:58 +01:00
provide : ImportServiceAbstraction ,
useClass : ImportService ,
deps : [
CipherServiceAbstraction ,
FolderServiceAbstraction ,
ApiServiceAbstraction ,
I18nServiceAbstraction ,
CollectionServiceAbstraction ,
PlatformUtilsServiceAbstraction ,
CryptoServiceAbstraction ,
] ,
2018-06-05 21:02:53 +02:00
} ,
2018-07-24 03:47:08 +02:00
{
2021-12-03 03:32:58 +01:00
provide : CryptoServiceAbstraction ,
2021-12-14 17:10:26 +01:00
useClass : CryptoService ,
2021-12-03 03:32:58 +01:00
deps : [
CryptoFunctionServiceAbstraction ,
PlatformUtilsServiceAbstraction ,
LogService ,
2021-12-14 17:10:26 +01:00
StateServiceAbstraction ,
2021-12-03 03:32:58 +01:00
] ,
2018-07-24 03:47:08 +02:00
} ,
2022-01-31 20:53:55 +01:00
{
provide : StateMigrationServiceAbstraction ,
useFactory : (
storageService : StorageServiceAbstraction ,
secureStorageService : StorageServiceAbstraction
) = >
new StateMigrationService (
storageService ,
secureStorageService ,
2022-02-03 19:54:15 +01:00
new StateFactory ( GlobalState , Account )
2022-01-31 20:53:55 +01:00
) ,
deps : [ StorageServiceAbstraction , "SECURE_STORAGE" ] ,
} ,
2022-01-04 17:15:58 +01:00
{
provide : StateServiceAbstraction ,
2022-01-20 15:38:34 +01:00
useFactory : (
storageService : StorageServiceAbstraction ,
secureStorageService : StorageServiceAbstraction ,
logService : LogService ,
stateMigrationService : StateMigrationServiceAbstraction
) = >
new StateService (
storageService ,
secureStorageService ,
logService ,
stateMigrationService ,
2022-01-31 20:53:55 +01:00
new StateFactory ( GlobalState , Account )
2022-01-20 15:38:34 +01:00
) ,
2022-01-04 17:15:58 +01:00
deps : [
StorageServiceAbstraction ,
"SECURE_STORAGE" ,
LogService ,
StateMigrationServiceAbstraction ,
] ,
} ,
2022-02-02 17:20:15 +01:00
{
provide : BaseStateServiceAbstraction ,
useExisting : StateServiceAbstraction ,
} ,
2022-01-10 14:12:35 +01:00
{
provide : PasswordRepromptServiceAbstraction ,
useClass : PasswordRepromptService ,
} ,
2018-06-05 21:02:53 +02:00
] ,
} )
export class ServicesModule { }