import * as winston from 'winston' import { Container, interfaces } from 'inversify' import { Env } from './Env' import TYPES from './Types' import { AppDataSource } from './DataSource' import { SNSClient, SNSClientConfig } from '@aws-sdk/client-sns' import { ItemRepositoryInterface } from '../Domain/Item/ItemRepositoryInterface' import { Repository } from 'typeorm' import { Item } from '../Domain/Item/Item' import { DirectCallDomainEventPublisher, DirectCallEventMessageHandler, SNSOpenTelemetryDomainEventPublisher, SQSEventMessageHandler, SQSOpenTelemetryDomainEventSubscriber, } from '@standardnotes/domain-events-infra' import { DomainEventFactoryInterface } from '../Domain/Event/DomainEventFactoryInterface' import { DomainEventFactory } from '../Domain/Event/DomainEventFactory' import { Timer, TimerInterface } from '@standardnotes/time' import { ItemTransferCalculatorInterface } from '../Domain/Item/ItemTransferCalculatorInterface' import { ItemTransferCalculator } from '../Domain/Item/ItemTransferCalculator' import { ItemConflict } from '../Domain/Item/ItemConflict' import { ContentFilter } from '../Domain/Item/SaveRule/ContentFilter' import { ContentTypeFilter } from '../Domain/Item/SaveRule/ContentTypeFilter' import { OwnershipFilter } from '../Domain/Item/SaveRule/OwnershipFilter' import { TimeDifferenceFilter } from '../Domain/Item/SaveRule/TimeDifferenceFilter' import { ItemSaveValidator } from '../Domain/Item/SaveValidator/ItemSaveValidator' import { ItemSaveValidatorInterface } from '../Domain/Item/SaveValidator/ItemSaveValidatorInterface' import { SyncResponseFactory20161215 } from '../Domain/Item/SyncResponse/SyncResponseFactory20161215' import { SyncResponseFactory20200115 } from '../Domain/Item/SyncResponse/SyncResponseFactory20200115' import { SyncResponseFactoryResolver } from '../Domain/Item/SyncResponse/SyncResponseFactoryResolver' import { SyncResponseFactoryResolverInterface } from '../Domain/Item/SyncResponse/SyncResponseFactoryResolverInterface' import { CheckIntegrity } from '../Domain/UseCase/Syncing/CheckIntegrity/CheckIntegrity' import { GetItem } from '../Domain/UseCase/Syncing/GetItem/GetItem' import { SyncItems } from '../Domain/UseCase/Syncing/SyncItems/SyncItems' import { InversifyExpressAuthMiddleware } from '../Infra/InversifyExpressUtils/Middleware/InversifyExpressAuthMiddleware' import { S3Client } from '@aws-sdk/client-s3' import { SQSClient, SQSClientConfig } from '@aws-sdk/client-sqs' import { ContentDecoder, ContentDecoderInterface } from '@standardnotes/common' import { DomainEventMessageHandlerInterface, DomainEventHandlerInterface, DomainEventPublisherInterface, DomainEventSubscriberInterface, } from '@standardnotes/domain-events' import axios, { AxiosInstance } from 'axios' import { ExtensionsHttpService } from '../Domain/Extension/ExtensionsHttpService' import { ExtensionsHttpServiceInterface } from '../Domain/Extension/ExtensionsHttpServiceInterface' import { AccountDeletionRequestedEventHandler } from '../Domain/Handler/AccountDeletionRequestedEventHandler' import { DuplicateItemSyncedEventHandler } from '../Domain/Handler/DuplicateItemSyncedEventHandler' import { EmailBackupRequestedEventHandler } from '../Domain/Handler/EmailBackupRequestedEventHandler' import { ItemRevisionCreationRequestedEventHandler } from '../Domain/Handler/ItemRevisionCreationRequestedEventHandler' import { ItemBackupServiceInterface } from '../Domain/Item/ItemBackupServiceInterface' import { FSItemBackupService } from '../Infra/FS/FSItemBackupService' import { S3ItemBackupService } from '../Infra/S3/S3ItemBackupService' import { ControllerContainer, ControllerContainerInterface, MapperInterface, ServiceIdentifier, SharedVaultUser, } from '@standardnotes/domain-core' import { BaseItemsController } from '../Infra/InversifyExpressUtils/Base/BaseItemsController' import { Transform } from 'stream' import { ItemHttpRepresentation } from '../Mapping/Http/ItemHttpRepresentation' import { ItemHttpMapper } from '../Mapping/Http/ItemHttpMapper' import { SavedItemHttpRepresentation } from '../Mapping/Http/SavedItemHttpRepresentation' import { SavedItemHttpMapper } from '../Mapping/Http/SavedItemHttpMapper' import { ItemConflictHttpRepresentation } from '../Mapping/Http/ItemConflictHttpRepresentation' import { ItemConflictHttpMapper } from '../Mapping/Http/ItemConflictHttpMapper' import { ItemBackupRepresentation } from '../Mapping/Backup/ItemBackupRepresentation' import { ItemBackupMapper } from '../Mapping/Backup/ItemBackupMapper' import { SaveNewItem } from '../Domain/UseCase/Syncing/SaveNewItem/SaveNewItem' import { UpdateExistingItem } from '../Domain/UseCase/Syncing/UpdateExistingItem/UpdateExistingItem' import { GetItems } from '../Domain/UseCase/Syncing/GetItems/GetItems' import { SaveItems } from '../Domain/UseCase/Syncing/SaveItems/SaveItems' import { ItemHashHttpMapper } from '../Mapping/Http/ItemHashHttpMapper' import { ItemHash } from '../Domain/Item/ItemHash' import { ItemHashHttpRepresentation } from '../Mapping/Http/ItemHashHttpRepresentation' import { BaseSharedVaultInvitesController } from '../Infra/InversifyExpressUtils/Base/BaseSharedVaultInvitesController' import { InviteUserToSharedVault } from '../Domain/UseCase/SharedVaults/InviteUserToSharedVault/InviteUserToSharedVault' import { TypeORMSharedVaultRepository } from '../Infra/TypeORM/TypeORMSharedVaultRepository' import { TypeORMSharedVault } from '../Infra/TypeORM/TypeORMSharedVault' import { TypeORMSharedVaultInvite } from '../Infra/TypeORM/TypeORMSharedVaultInvite' import { TypeORMSharedVaultUser } from '../Infra/TypeORM/TypeORMSharedVaultUser' import { SharedVaultRepositoryInterface } from '../Domain/SharedVault/SharedVaultRepositoryInterface' import { SharedVaultPersistenceMapper } from '../Mapping/Persistence/SharedVaultPersistenceMapper' import { SharedVault } from '../Domain/SharedVault/SharedVault' import { SharedVaultUserPersistenceMapper } from '../Mapping/Persistence/SharedVaultUserPersistenceMapper' import { SharedVaultInvite } from '../Domain/SharedVault/User/Invite/SharedVaultInvite' import { SharedVaultInvitePersistenceMapper } from '../Mapping/Persistence/SharedVaultInvitePersistenceMapper' import { SharedVaultUserRepositoryInterface } from '../Domain/SharedVault/User/SharedVaultUserRepositoryInterface' import { TypeORMSharedVaultUserRepository } from '../Infra/TypeORM/TypeORMSharedVaultUserRepository' import { SharedVaultInviteRepositoryInterface } from '../Domain/SharedVault/User/Invite/SharedVaultInviteRepositoryInterface' import { TypeORMSharedVaultInviteRepository } from '../Infra/TypeORM/TypeORMSharedVaultInviteRepository' import { UpdateSharedVaultInvite } from '../Domain/UseCase/SharedVaults/UpdateSharedVaultInvite/UpdateSharedVaultInvite' import { AcceptInviteToSharedVault } from '../Domain/UseCase/SharedVaults/AcceptInviteToSharedVault/AcceptInviteToSharedVault' import { AddUserToSharedVault } from '../Domain/UseCase/SharedVaults/AddUserToSharedVault/AddUserToSharedVault' import { CancelInviteToSharedVault } from '../Domain/UseCase/SharedVaults/CancelInviteToSharedVault/CancelInviteToSharedVault' import { DeleteSharedVaultInvitesToUser } from '../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesToUser/DeleteSharedVaultInvitesToUser' import { DeleteSharedVaultInvitesSentByUser } from '../Domain/UseCase/SharedVaults/DeleteSharedVaultInvitesSentByUser/DeleteSharedVaultInvitesSentByUser' import { GetSharedVaultInvitesSentByUser } from '../Domain/UseCase/SharedVaults/GetSharedVaultInvitesSentByUser/GetSharedVaultInvitesSentByUser' import { GetSharedVaultInvitesSentToUser } from '../Domain/UseCase/SharedVaults/GetSharedVaultInvitesSentToUser/GetSharedVaultInvitesSentToUser' import { BaseSharedVaultUsersController } from '../Infra/InversifyExpressUtils/Base/BaseSharedVaultUsersController' import { GetSharedVaultUsers } from '../Domain/UseCase/SharedVaults/GetSharedVaultUsers/GetSharedVaultUsers' import { RemoveUserFromSharedVault } from '../Domain/UseCase/SharedVaults/RemoveUserFromSharedVault/RemoveUserFromSharedVault' import { AddNotificationForUser } from '../Domain/UseCase/Messaging/AddNotificationForUser/AddNotificationForUser' import { TypeORMNotification } from '../Infra/TypeORM/TypeORMNotification' import { NotificationRepositoryInterface } from '../Domain/Notifications/NotificationRepositoryInterface' import { TypeORMNotificationRepository } from '../Infra/TypeORM/TypeORMNotificationRepository' import { NotificationPersistenceMapper } from '../Mapping/Persistence/NotificationPersistenceMapper' import { Notification } from '../Domain/Notifications/Notification' import { SharedVaultUserHttpRepresentation } from '../Mapping/Http/SharedVaultUserHttpRepresentation' import { SharedVaultUserHttpMapper } from '../Mapping/Http/SharedVaultUserHttpMapper' import { BaseSharedVaultsController } from '../Infra/InversifyExpressUtils/Base/BaseSharedVaultsController' import { GetSharedVaults } from '../Domain/UseCase/SharedVaults/GetSharedVaults/GetSharedVaults' import { CreateSharedVault } from '../Domain/UseCase/SharedVaults/CreateSharedVault/CreateSharedVault' import { DeleteSharedVault } from '../Domain/UseCase/SharedVaults/DeleteSharedVault/DeleteSharedVault' import { CreateSharedVaultFileValetToken } from '../Domain/UseCase/SharedVaults/CreateSharedVaultFileValetToken/CreateSharedVaultFileValetToken' import { SharedVaultValetTokenData, TokenEncoder, TokenEncoderInterface } from '@standardnotes/security' import { SharedVaultHttpRepresentation } from '../Mapping/Http/SharedVaultHttpRepresentation' import { SharedVaultHttpMapper } from '../Mapping/Http/SharedVaultHttpMapper' import { SharedVaultInviteHttpRepresentation } from '../Mapping/Http/SharedVaultInviteHttpRepresentation' import { SharedVaultInviteHttpMapper } from '../Mapping/Http/SharedVaultInviteHttpMapper' import { BaseMessagesController } from '../Infra/InversifyExpressUtils/Base/BaseMessagesController' import { GetMessagesSentToUser } from '../Domain/UseCase/Messaging/GetMessagesSentToUser/GetMessagesSentToUser' import { TypeORMMessage } from '../Infra/TypeORM/TypeORMMessage' import { MessageRepositoryInterface } from '../Domain/Message/MessageRepositoryInterface' import { TypeORMMessageRepository } from '../Infra/TypeORM/TypeORMMessageRepository' import { Message } from '../Domain/Message/Message' import { MessagePersistenceMapper } from '../Mapping/Persistence/MessagePersistenceMapper' import { GetMessagesSentByUser } from '../Domain/UseCase/Messaging/GetMessagesSentByUser/GetMessagesSentByUser' import { SendMessageToUser } from '../Domain/UseCase/Messaging/SendMessageToUser/SendMessageToUser' import { DeleteAllMessagesSentToUser } from '../Domain/UseCase/Messaging/DeleteAllMessagesSentToUser/DeleteAllMessagesSentToUser' import { DeleteMessage } from '../Domain/UseCase/Messaging/DeleteMessage/DeleteMessage' import { MessageHttpRepresentation } from '../Mapping/Http/MessageHttpRepresentation' import { MessageHttpMapper } from '../Mapping/Http/MessageHttpMapper' import { GetUserNotifications } from '../Domain/UseCase/Messaging/GetUserNotifications/GetUserNotifications' import { NotificationHttpMapper } from '../Mapping/Http/NotificationHttpMapper' import { NotificationHttpRepresentation } from '../Mapping/Http/NotificationHttpRepresentation' import { DetermineSharedVaultOperationOnItem } from '../Domain/UseCase/SharedVaults/DetermineSharedVaultOperationOnItem/DetermineSharedVaultOperationOnItem' import { SharedVaultFilter } from '../Domain/Item/SaveRule/SharedVaultFilter' import { RemoveNotificationsForUser } from '../Domain/UseCase/Messaging/RemoveNotificationsForUser/RemoveNotificationsForUser' import { SharedVaultSnjsFilter } from '../Domain/Item/SaveRule/SharedVaultSnjsFilter' import { UpdateStorageQuotaUsedInSharedVault } from '../Domain/UseCase/SharedVaults/UpdateStorageQuotaUsedInSharedVault/UpdateStorageQuotaUsedInSharedVault' import { SharedVaultFileUploadedEventHandler } from '../Domain/Handler/SharedVaultFileUploadedEventHandler' import { SharedVaultFileRemovedEventHandler } from '../Domain/Handler/SharedVaultFileRemovedEventHandler' import { AddNotificationsForUsers } from '../Domain/UseCase/Messaging/AddNotificationsForUsers/AddNotificationsForUsers' import { Logger } from 'winston' import { SharedVaultFileMovedEventHandler } from '../Domain/Handler/SharedVaultFileMovedEventHandler' import { SQLItem } from '../Infra/TypeORM/SQLItem' import { SQLItemPersistenceMapper } from '../Mapping/Persistence/SQLItemPersistenceMapper' import { SQLItemRepository } from '../Infra/TypeORM/SQLItemRepository' import { SendEventToClient } from '../Domain/UseCase/Syncing/SendEventToClient/SendEventToClient' import { DeleteSharedVaults } from '../Domain/UseCase/SharedVaults/DeleteSharedVaults/DeleteSharedVaults' import { RemoveItemsFromSharedVault } from '../Domain/UseCase/SharedVaults/RemoveItemsFromSharedVault/RemoveItemsFromSharedVault' import { SharedVaultRemovedEventHandler } from '../Domain/Handler/SharedVaultRemovedEventHandler' import { DesignateSurvivor } from '../Domain/UseCase/SharedVaults/DesignateSurvivor/DesignateSurvivor' import { RemoveUserFromSharedVaults } from '../Domain/UseCase/SharedVaults/RemoveUserFromSharedVaults/RemoveUserFromSharedVaults' import { TransferSharedVault } from '../Domain/UseCase/SharedVaults/TransferSharedVault/TransferSharedVault' import { TransferSharedVaultItems } from '../Domain/UseCase/SharedVaults/TransferSharedVaultItems/TransferSharedVaultItems' import { DumpItem } from '../Domain/UseCase/Syncing/DumpItem/DumpItem' export class ContainerConfigLoader { private readonly DEFAULT_CONTENT_SIZE_TRANSFER_LIMIT = 10_000_000 private readonly DEFAULT_MAX_ITEMS_LIMIT = 300 private readonly DEFAULT_FILE_UPLOAD_PATH = `${__dirname}/../../uploads` constructor(private mode: 'server' | 'worker' = 'server') {} async load(configuration?: { controllerConatiner?: ControllerContainerInterface directCallDomainEventPublisher?: DirectCallDomainEventPublisher logger?: Transform environmentOverrides?: { [name: string]: string } }): Promise { const directCallDomainEventPublisher = configuration?.directCallDomainEventPublisher ?? new DirectCallDomainEventPublisher() const env: Env = new Env(configuration?.environmentOverrides) env.load() const container = new Container({ defaultScope: 'Singleton', }) let logger: winston.Logger if (configuration?.logger) { logger = configuration.logger as winston.Logger } else { const winstonFormatters = [winston.format.splat(), winston.format.json()] logger = winston.createLogger({ level: env.get('LOG_LEVEL', true) || 'info', format: winston.format.combine(...winstonFormatters), transports: [new winston.transports.Console({ level: env.get('LOG_LEVEL', true) || 'info' })], defaultMeta: { service: 'syncing-server' }, }) } container.bind(TYPES.Sync_Logger).toConstantValue(logger) const appDataSource = new AppDataSource({ env, runMigrations: this.mode === 'server' }) await appDataSource.initialize() logger.debug('Database initialized') container.bind(TYPES.Sync_Timer).toConstantValue(new Timer()) const isConfiguredForHomeServer = env.get('MODE', true) === 'home-server' const isConfiguredForSelfHosting = env.get('MODE', true) === 'self-hosted' const isConfiguredForHomeServerOrSelfHosting = isConfiguredForHomeServer || isConfiguredForSelfHosting container .bind(TYPES.Sync_IS_CONFIGURED_FOR_HOME_SERVER_OR_SELF_HOSTING) .toConstantValue(isConfiguredForHomeServerOrSelfHosting) container.bind(TYPES.Sync_Env).toConstantValue(env) if (isConfiguredForHomeServer) { container .bind(TYPES.Sync_DomainEventPublisher) .toConstantValue(directCallDomainEventPublisher) } else { container.bind(TYPES.Sync_SNS_TOPIC_ARN).toConstantValue(env.get('SNS_TOPIC_ARN')) container.bind(TYPES.Sync_SNS_AWS_REGION).toConstantValue(env.get('SNS_AWS_REGION', true)) container.bind(TYPES.Sync_SQS_QUEUE_URL).toConstantValue(env.get('SQS_QUEUE_URL')) container.bind(TYPES.Sync_S3_AWS_REGION).toConstantValue(env.get('S3_AWS_REGION', true)) container.bind(TYPES.Sync_S3_BACKUP_BUCKET_NAME).toConstantValue(env.get('S3_BACKUP_BUCKET_NAME', true)) container.bind(TYPES.Sync_EXTENSIONS_SERVER_URL).toConstantValue(env.get('EXTENSIONS_SERVER_URL', true)) container.bind(TYPES.Sync_SNS).toDynamicValue((context: interfaces.Context) => { const env: Env = context.container.get(TYPES.Sync_Env) const snsConfig: SNSClientConfig = { apiVersion: 'latest', region: env.get('SNS_AWS_REGION', true), } if (env.get('SNS_ENDPOINT', true)) { snsConfig.endpoint = env.get('SNS_ENDPOINT', true) } if (env.get('SNS_ACCESS_KEY_ID', true) && env.get('SNS_SECRET_ACCESS_KEY', true)) { snsConfig.credentials = { accessKeyId: env.get('SNS_ACCESS_KEY_ID', true), secretAccessKey: env.get('SNS_SECRET_ACCESS_KEY', true), } } return new SNSClient(snsConfig) }) container .bind(TYPES.Sync_DomainEventPublisher) .toDynamicValue((context: interfaces.Context) => { return new SNSOpenTelemetryDomainEventPublisher( context.container.get(TYPES.Sync_SNS), context.container.get(TYPES.Sync_SNS_TOPIC_ARN), ) }) const sqsConfig: SQSClientConfig = { region: env.get('SQS_AWS_REGION', true), } if (env.get('SQS_ENDPOINT', true)) { sqsConfig.endpoint = env.get('SQS_ENDPOINT', true) } if (env.get('SQS_ACCESS_KEY_ID', true) && env.get('SQS_SECRET_ACCESS_KEY', true)) { sqsConfig.credentials = { accessKeyId: env.get('SQS_ACCESS_KEY_ID', true), secretAccessKey: env.get('SQS_SECRET_ACCESS_KEY', true), } } const sqsClient = new SQSClient(sqsConfig) container.bind(TYPES.Sync_SQS).toConstantValue(sqsClient) container.bind(TYPES.Sync_S3).toDynamicValue((context: interfaces.Context) => { const env: Env = context.container.get(TYPES.Sync_Env) let s3Client = undefined if (env.get('S3_AWS_REGION', true)) { s3Client = new S3Client({ apiVersion: 'latest', region: env.get('S3_AWS_REGION', true), }) } return s3Client }) } container .bind(TYPES.Sync_EMAIL_ATTACHMENT_MAX_BYTE_SIZE) .toConstantValue( env.get('EMAIL_ATTACHMENT_MAX_BYTE_SIZE', true) ? +env.get('EMAIL_ATTACHMENT_MAX_BYTE_SIZE', true) : 10485760, ) container .bind(TYPES.Sync_FILE_UPLOAD_PATH) .toConstantValue( env.get('FILE_UPLOAD_PATH', true) ? env.get('FILE_UPLOAD_PATH', true) : this.DEFAULT_FILE_UPLOAD_PATH, ) // Mapping container .bind>(TYPES.Sync_SQLItemPersistenceMapper) .toConstantValue(new SQLItemPersistenceMapper()) container .bind>(TYPES.Sync_ItemHashHttpMapper) .toConstantValue(new ItemHashHttpMapper()) container .bind>(TYPES.Sync_ItemHttpMapper) .toConstantValue(new ItemHttpMapper(container.get(TYPES.Sync_Timer))) container .bind>(TYPES.Sync_SavedItemHttpMapper) .toConstantValue(new SavedItemHttpMapper(container.get(TYPES.Sync_Timer))) container .bind>(TYPES.Sync_ItemConflictHttpMapper) .toConstantValue( new ItemConflictHttpMapper( container.get(TYPES.Sync_ItemHttpMapper), container.get(TYPES.Sync_ItemHashHttpMapper), ), ) container .bind>(TYPES.Sync_ItemBackupMapper) .toConstantValue(new ItemBackupMapper(container.get(TYPES.Sync_Timer))) container .bind>(TYPES.Sync_SharedVaultPersistenceMapper) .toConstantValue(new SharedVaultPersistenceMapper()) container .bind>(TYPES.Sync_SharedVaultUserPersistenceMapper) .toConstantValue(new SharedVaultUserPersistenceMapper()) container .bind>(TYPES.Sync_SharedVaultInvitePersistenceMapper) .toConstantValue(new SharedVaultInvitePersistenceMapper()) container .bind>(TYPES.Sync_NotificationPersistenceMapper) .toConstantValue(new NotificationPersistenceMapper()) container .bind>(TYPES.Sync_SharedVaultUserHttpMapper) .toConstantValue(new SharedVaultUserHttpMapper()) container .bind>(TYPES.Sync_SharedVaultHttpMapper) .toConstantValue(new SharedVaultHttpMapper()) container .bind>( TYPES.Sync_SharedVaultInviteHttpMapper, ) .toConstantValue(new SharedVaultInviteHttpMapper()) container .bind>(TYPES.Sync_MessagePersistenceMapper) .toConstantValue(new MessagePersistenceMapper()) container .bind>(TYPES.Sync_MessageHttpMapper) .toConstantValue(new MessageHttpMapper()) container .bind>(TYPES.Sync_NotificationHttpMapper) .toConstantValue(new NotificationHttpMapper()) // ORM container .bind>(TYPES.Sync_ORMItemRepository) .toConstantValue(appDataSource.getRepository(SQLItem)) container .bind>(TYPES.Sync_ORMSharedVaultRepository) .toConstantValue(appDataSource.getRepository(TypeORMSharedVault)) container .bind>(TYPES.Sync_ORMSharedVaultInviteRepository) .toConstantValue(appDataSource.getRepository(TypeORMSharedVaultInvite)) container .bind>(TYPES.Sync_ORMSharedVaultUserRepository) .toConstantValue(appDataSource.getRepository(TypeORMSharedVaultUser)) container .bind>(TYPES.Sync_ORMNotificationRepository) .toConstantValue(appDataSource.getRepository(TypeORMNotification)) container .bind>(TYPES.Sync_ORMMessageRepository) .toConstantValue(appDataSource.getRepository(TypeORMMessage)) // Repositories container .bind(TYPES.Sync_SQLItemRepository) .toConstantValue( new SQLItemRepository( container.get>(TYPES.Sync_ORMItemRepository), container.get>(TYPES.Sync_SQLItemPersistenceMapper), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_SharedVaultRepository) .toConstantValue( new TypeORMSharedVaultRepository( container.get(TYPES.Sync_ORMSharedVaultRepository), container.get(TYPES.Sync_SharedVaultPersistenceMapper), ), ) container .bind(TYPES.Sync_SharedVaultUserRepository) .toConstantValue( new TypeORMSharedVaultUserRepository( container.get(TYPES.Sync_ORMSharedVaultUserRepository), container.get(TYPES.Sync_SharedVaultUserPersistenceMapper), ), ) container .bind(TYPES.Sync_SharedVaultInviteRepository) .toConstantValue( new TypeORMSharedVaultInviteRepository( container.get(TYPES.Sync_ORMSharedVaultInviteRepository), container.get(TYPES.Sync_SharedVaultInvitePersistenceMapper), ), ) container .bind(TYPES.Sync_NotificationRepository) .toConstantValue( new TypeORMNotificationRepository( container.get(TYPES.Sync_ORMNotificationRepository), container.get(TYPES.Sync_NotificationPersistenceMapper), ), ) container .bind(TYPES.Sync_MessageRepository) .toConstantValue( new TypeORMMessageRepository( container.get(TYPES.Sync_ORMMessageRepository), container.get(TYPES.Sync_MessagePersistenceMapper), ), ) container .bind(TYPES.Sync_DomainEventFactory) .toDynamicValue((context: interfaces.Context) => { return new DomainEventFactory(context.container.get(TYPES.Sync_Timer)) }) container .bind(TYPES.Sync_ItemTransferCalculator) .toDynamicValue((context: interfaces.Context) => { return new ItemTransferCalculator(context.container.get(TYPES.Sync_Logger)) }) // Middleware container .bind(TYPES.Sync_AuthMiddleware) .toDynamicValue((context: interfaces.Context) => { return new InversifyExpressAuthMiddleware( context.container.get(TYPES.Sync_AUTH_JWT_SECRET), context.container.get(TYPES.Sync_Logger), ) }) // env vars container.bind(TYPES.Sync_AUTH_JWT_SECRET).toConstantValue(env.get('AUTH_JWT_SECRET')) container .bind(TYPES.Sync_REVISIONS_FREQUENCY) .toConstantValue(env.get('REVISIONS_FREQUENCY', true) ? +env.get('REVISIONS_FREQUENCY', true) : 300) container.bind(TYPES.Sync_VERSION).toConstantValue(env.get('VERSION', true) ?? 'development') container .bind(TYPES.Sync_CONTENT_SIZE_TRANSFER_LIMIT) .toConstantValue( env.get('CONTENT_SIZE_TRANSFER_LIMIT', true) ? +env.get('CONTENT_SIZE_TRANSFER_LIMIT', true) : this.DEFAULT_CONTENT_SIZE_TRANSFER_LIMIT, ) container .bind(TYPES.Sync_MAX_ITEMS_LIMIT) .toConstantValue( env.get('MAX_ITEMS_LIMIT', true) ? +env.get('MAX_ITEMS_LIMIT', true) : this.DEFAULT_MAX_ITEMS_LIMIT, ) container.bind(TYPES.Sync_VALET_TOKEN_SECRET).toConstantValue(env.get('VALET_TOKEN_SECRET', true)) container .bind(TYPES.Sync_VALET_TOKEN_TTL) .toConstantValue(env.get('VALET_TOKEN_TTL', true) ? +env.get('VALET_TOKEN_TTL', true) : 7200) container .bind>(TYPES.Sync_SharedVaultValetTokenEncoder) .toConstantValue(new TokenEncoder(container.get(TYPES.Sync_VALET_TOKEN_SECRET))) container .bind(TYPES.Sync_DetermineSharedVaultOperationOnItem) .toConstantValue(new DetermineSharedVaultOperationOnItem()) container.bind(TYPES.Sync_OwnershipFilter).toConstantValue(new OwnershipFilter()) container .bind(TYPES.Sync_TimeDifferenceFilter) .toConstantValue(new TimeDifferenceFilter(container.get(TYPES.Sync_Timer))) container.bind(TYPES.Sync_ContentTypeFilter).toConstantValue(new ContentTypeFilter()) container.bind(TYPES.Sync_ContentFilter).toConstantValue(new ContentFilter()) container .bind(TYPES.Sync_SharedVaultFilter) .toConstantValue( new SharedVaultFilter( container.get(TYPES.Sync_DetermineSharedVaultOperationOnItem), container.get(TYPES.Sync_SharedVaultUserRepository), ), ) container.bind(TYPES.Sync_SharedVaultSnjsFilter).toConstantValue(new SharedVaultSnjsFilter()) container .bind(TYPES.Sync_ItemSaveValidator) .toConstantValue( new ItemSaveValidator([ container.get(TYPES.Sync_OwnershipFilter), container.get(TYPES.Sync_TimeDifferenceFilter), container.get(TYPES.Sync_ContentTypeFilter), container.get(TYPES.Sync_ContentFilter), container.get(TYPES.Sync_SharedVaultFilter), container.get(TYPES.Sync_SharedVaultSnjsFilter), ]), ) container .bind(TYPES.Sync_ItemBackupService) .toConstantValue( env.get('S3_AWS_REGION', true) ? new S3ItemBackupService( container.get(TYPES.Sync_S3_BACKUP_BUCKET_NAME), container.get(TYPES.Sync_ItemBackupMapper), container.get(TYPES.Sync_ItemHttpMapper), container.get(TYPES.Sync_Logger), container.get(TYPES.Sync_S3), ) : new FSItemBackupService( container.get(TYPES.Sync_FILE_UPLOAD_PATH), container.get(TYPES.Sync_ItemBackupMapper), container.get(TYPES.Sync_Logger), ), ) // use cases container .bind(TYPES.Sync_GetItems) .toConstantValue( new GetItems( container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_CONTENT_SIZE_TRANSFER_LIMIT), container.get(TYPES.Sync_ItemTransferCalculator), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_MAX_ITEMS_LIMIT), ), ) container .bind(TYPES.Sync_SaveNewItem) .toConstantValue( new SaveNewItem( container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_DomainEventFactory), ), ) container .bind(TYPES.Sync_SendEventToClient) .toConstantValue( new SendEventToClient( container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_DomainEventPublisher), ), ) container .bind(TYPES.Sync_AddNotificationForUser) .toConstantValue( new AddNotificationForUser( container.get(TYPES.Sync_NotificationRepository), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_SendEventToClient), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_AddNotificationsForUsers) .toConstantValue( new AddNotificationsForUsers( container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_AddNotificationForUser), ), ) container .bind(TYPES.Sync_RemoveNotificationsForUser) .toConstantValue(new RemoveNotificationsForUser(container.get(TYPES.Sync_NotificationRepository))) container .bind(TYPES.Sync_UpdateExistingItem) .toConstantValue( new UpdateExistingItem( container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_REVISIONS_FREQUENCY), container.get(TYPES.Sync_DetermineSharedVaultOperationOnItem), container.get(TYPES.Sync_AddNotificationsForUsers), container.get(TYPES.Sync_RemoveNotificationsForUser), ), ) container .bind(TYPES.Sync_SaveItems) .toConstantValue( new SaveItems( container.get(TYPES.Sync_ItemSaveValidator), container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_SaveNewItem), container.get(TYPES.Sync_UpdateExistingItem), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_GetUserNotifications) .toConstantValue(new GetUserNotifications(container.get(TYPES.Sync_NotificationRepository))) container .bind(TYPES.Sync_GetSharedVaults) .toConstantValue( new GetSharedVaults( container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_SharedVaultRepository), ), ) container .bind(TYPES.Sync_GetSharedVaultInvitesSentToUser) .toConstantValue(new GetSharedVaultInvitesSentToUser(container.get(TYPES.Sync_SharedVaultInviteRepository))) container .bind(TYPES.Sync_GetMessagesSentToUser) .toConstantValue(new GetMessagesSentToUser(container.get(TYPES.Sync_MessageRepository))) container .bind(TYPES.Sync_SyncItems) .toConstantValue( new SyncItems( container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_GetItems), container.get(TYPES.Sync_SaveItems), container.get(TYPES.Sync_GetSharedVaults), container.get(TYPES.Sync_GetSharedVaultInvitesSentToUser), container.get(TYPES.Sync_GetMessagesSentToUser), container.get(TYPES.Sync_GetUserNotifications), container.get(TYPES.Sync_Logger), ), ) container.bind(TYPES.Sync_CheckIntegrity).toDynamicValue((context: interfaces.Context) => { return new CheckIntegrity(context.container.get(TYPES.Sync_SQLItemRepository)) }) container.bind(TYPES.Sync_GetItem).toDynamicValue((context: interfaces.Context) => { return new GetItem(context.container.get(TYPES.Sync_SQLItemRepository)) }) container .bind(TYPES.Sync_InviteUserToSharedVault) .toConstantValue( new InviteUserToSharedVault( container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_SharedVaultInviteRepository), container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_SendEventToClient), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_UpdateSharedVaultInvite) .toConstantValue( new UpdateSharedVaultInvite( container.get(TYPES.Sync_SharedVaultInviteRepository), container.get(TYPES.Sync_Timer), ), ) container .bind(TYPES.Sync_AddUserToSharedVault) .toConstantValue( new AddUserToSharedVault( container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_AddNotificationsForUsers), ), ) container .bind(TYPES.Sync_AcceptInviteToSharedVault) .toConstantValue( new AcceptInviteToSharedVault( container.get(TYPES.Sync_AddUserToSharedVault), container.get(TYPES.Sync_SharedVaultInviteRepository), ), ) container .bind(TYPES.Sync_DeclineInviteToSharedVault) .toConstantValue( new CancelInviteToSharedVault( container.get(TYPES.Sync_SharedVaultInviteRepository), container.get(TYPES.Sync_AddNotificationForUser), ), ) container .bind(TYPES.Sync_DeleteSharedVaultInvitesToUser) .toConstantValue( new DeleteSharedVaultInvitesToUser( container.get(TYPES.Sync_SharedVaultInviteRepository), container.get(TYPES.Sync_DeclineInviteToSharedVault), ), ) container .bind(TYPES.Sync_DeleteSharedVaultInvitesSentByUser) .toConstantValue( new DeleteSharedVaultInvitesSentByUser( container.get(TYPES.Sync_SharedVaultInviteRepository), container.get(TYPES.Sync_DeclineInviteToSharedVault), ), ) container .bind(TYPES.Sync_GetSharedVaultInvitesSentByUser) .toConstantValue(new GetSharedVaultInvitesSentByUser(container.get(TYPES.Sync_SharedVaultInviteRepository))) container .bind(TYPES.Sync_GetSharedVaultUsers) .toConstantValue( new GetSharedVaultUsers( container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_SharedVaultRepository), ), ) container .bind(TYPES.Sync_RemoveSharedVaultUser) .toConstantValue( new RemoveUserFromSharedVault( container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_AddNotificationsForUsers), container.get(TYPES.Sync_AddNotificationForUser), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_DomainEventPublisher), ), ) container .bind(TYPES.Sync_CreateSharedVault) .toConstantValue( new CreateSharedVault( container.get(TYPES.Sync_AddUserToSharedVault), container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_Timer), ), ) container .bind(TYPES.Sync_CreateSharedVaultFileValetToken) .toConstantValue( new CreateSharedVaultFileValetToken( container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_SharedVaultValetTokenEncoder), container.get(TYPES.Sync_VALET_TOKEN_TTL), ), ) container .bind(TYPES.Sync_GetMessagesSentByUser) .toConstantValue(new GetMessagesSentByUser(container.get(TYPES.Sync_MessageRepository))) container .bind(TYPES.Sync_SendMessageToUser) .toConstantValue( new SendMessageToUser( container.get(TYPES.Sync_MessageRepository), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_SendEventToClient), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_DeleteMessage) .toConstantValue(new DeleteMessage(container.get(TYPES.Sync_MessageRepository))) container .bind(TYPES.Sync_DeleteAllMessagesSentToUser) .toConstantValue( new DeleteAllMessagesSentToUser( container.get(TYPES.Sync_MessageRepository), container.get(TYPES.Sync_DeleteMessage), ), ) container .bind(TYPES.Sync_UpdateStorageQuotaUsedInSharedVault) .toConstantValue( new UpdateStorageQuotaUsedInSharedVault( container.get(TYPES.Sync_SharedVaultRepository), ), ) container .bind(TYPES.Sync_RemoveItemsFromSharedVault) .toConstantValue( new RemoveItemsFromSharedVault(container.get(TYPES.Sync_SQLItemRepository)), ) container .bind(TYPES.Sync_DesignateSurvivor) .toConstantValue( new DesignateSurvivor( container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_Timer), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_AddNotificationForUser), ), ) container .bind(TYPES.Sync_RemoveUserFromSharedVaults) .toConstantValue( new RemoveUserFromSharedVaults( container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_RemoveSharedVaultUser), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_TransferSharedVaultItems) .toConstantValue( new TransferSharedVaultItems(container.get(TYPES.Sync_SQLItemRepository)), ) container .bind(TYPES.Sync_TransferSharedVault) .toConstantValue( new TransferSharedVault( container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_TransferSharedVaultItems), container.get(TYPES.Sync_Timer), ), ) container .bind(TYPES.Sync_DeleteSharedVault) .toConstantValue( new DeleteSharedVault( container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_SharedVaultUserRepository), container.get(TYPES.Sync_SharedVaultInviteRepository), container.get(TYPES.Sync_RemoveSharedVaultUser), container.get(TYPES.Sync_DeclineInviteToSharedVault), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_TransferSharedVault), ), ) container .bind(TYPES.Sync_DeleteSharedVaults) .toConstantValue( new DeleteSharedVaults( container.get(TYPES.Sync_SharedVaultRepository), container.get(TYPES.Sync_DeleteSharedVault), ), ) container .bind(TYPES.Sync_DumpItem) .toConstantValue( new DumpItem( container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_ItemBackupService), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_DomainEventPublisher), ), ) // Services container .bind(TYPES.Sync_SyncResponseFactory20161215) .toConstantValue(new SyncResponseFactory20161215(container.get(TYPES.Sync_ItemHttpMapper))) container .bind(TYPES.Sync_SyncResponseFactory20200115) .toConstantValue( new SyncResponseFactory20200115( container.get(TYPES.Sync_ItemHttpMapper), container.get(TYPES.Sync_ItemConflictHttpMapper), container.get(TYPES.Sync_SavedItemHttpMapper), container.get(TYPES.Sync_SharedVaultHttpMapper), container.get(TYPES.Sync_SharedVaultInviteHttpMapper), container.get(TYPES.Sync_MessageHttpMapper), container.get(TYPES.Sync_NotificationHttpMapper), ), ) container .bind(TYPES.Sync_SyncResponseFactoryResolver) .toDynamicValue((context: interfaces.Context) => { return new SyncResponseFactoryResolver( context.container.get(TYPES.Sync_SyncResponseFactory20161215), context.container.get(TYPES.Sync_SyncResponseFactory20200115), ) }) // Handlers container .bind(TYPES.Sync_DuplicateItemSyncedEventHandler) .toConstantValue( new DuplicateItemSyncedEventHandler( container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_AccountDeletionRequestedEventHandler) .toConstantValue( new AccountDeletionRequestedEventHandler( container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_DeleteSharedVaults), container.get(TYPES.Sync_RemoveUserFromSharedVaults), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_ItemRevisionCreationRequestedEventHandler) .toConstantValue( new ItemRevisionCreationRequestedEventHandler( container.get(TYPES.Sync_DumpItem), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_SharedVaultFileUploadedEventHandler) .toConstantValue( new SharedVaultFileUploadedEventHandler( container.get(TYPES.Sync_UpdateStorageQuotaUsedInSharedVault), container.get(TYPES.Sync_AddNotificationsForUsers), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_SharedVaultFileRemovedEventHandler) .toConstantValue( new SharedVaultFileRemovedEventHandler( container.get(TYPES.Sync_UpdateStorageQuotaUsedInSharedVault), container.get(TYPES.Sync_AddNotificationsForUsers), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_SharedVaultFileMovedEventHandler) .toConstantValue( new SharedVaultFileMovedEventHandler( container.get(TYPES.Sync_UpdateStorageQuotaUsedInSharedVault), container.get(TYPES.Sync_AddNotificationsForUsers), container.get(TYPES.Sync_Logger), ), ) container .bind(TYPES.Sync_SharedVaultRemovedEventHandler) .toConstantValue( new SharedVaultRemovedEventHandler( container.get(TYPES.Sync_RemoveItemsFromSharedVault), container.get(TYPES.Sync_Logger), ), ) // Services container.bind(TYPES.Sync_ContentDecoder).toDynamicValue(() => new ContentDecoder()) container.bind(TYPES.Sync_HTTPClient).toDynamicValue(() => axios.create()) container .bind(TYPES.Sync_ExtensionsHttpService) .toConstantValue( new ExtensionsHttpService( container.get(TYPES.Sync_HTTPClient), container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_ContentDecoder), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_Logger), ), ) const eventHandlers: Map = new Map([ ['DUPLICATE_ITEM_SYNCED', container.get(TYPES.Sync_DuplicateItemSyncedEventHandler)], ['ACCOUNT_DELETION_REQUESTED', container.get(TYPES.Sync_AccountDeletionRequestedEventHandler)], ['ITEM_REVISION_CREATION_REQUESTED', container.get(TYPES.Sync_ItemRevisionCreationRequestedEventHandler)], [ 'SHARED_VAULT_FILE_UPLOADED', container.get(TYPES.Sync_SharedVaultFileUploadedEventHandler), ], [ 'SHARED_VAULT_FILE_REMOVED', container.get(TYPES.Sync_SharedVaultFileRemovedEventHandler), ], [ 'SHARED_VAULT_FILE_MOVED', container.get(TYPES.Sync_SharedVaultFileMovedEventHandler), ], [ 'SHARED_VAULT_REMOVED', container.get(TYPES.Sync_SharedVaultRemovedEventHandler), ], ]) if (!isConfiguredForHomeServer) { container .bind(TYPES.Sync_EmailBackupRequestedEventHandler) .toConstantValue( new EmailBackupRequestedEventHandler( container.get(TYPES.Sync_SQLItemRepository), container.get(TYPES.Sync_ItemBackupService), container.get(TYPES.Sync_DomainEventPublisher), container.get(TYPES.Sync_DomainEventFactory), container.get(TYPES.Sync_EMAIL_ATTACHMENT_MAX_BYTE_SIZE), container.get(TYPES.Sync_ItemTransferCalculator), container.get(TYPES.Sync_S3_BACKUP_BUCKET_NAME), container.get(TYPES.Sync_Logger), ), ) eventHandlers.set('EMAIL_BACKUP_REQUESTED', container.get(TYPES.Sync_EmailBackupRequestedEventHandler)) } if (isConfiguredForHomeServer) { const directCallEventMessageHandler = new DirectCallEventMessageHandler( eventHandlers, container.get(TYPES.Sync_Logger), ) directCallDomainEventPublisher.register(directCallEventMessageHandler) container .bind(TYPES.Sync_DomainEventMessageHandler) .toConstantValue(directCallEventMessageHandler) } else { container .bind(TYPES.Sync_DomainEventMessageHandler) .toConstantValue(new SQSEventMessageHandler(eventHandlers, container.get(TYPES.Sync_Logger))) container .bind(TYPES.Sync_DomainEventSubscriber) .toConstantValue( new SQSOpenTelemetryDomainEventSubscriber( ServiceIdentifier.NAMES.SyncingServerWorker, container.get(TYPES.Sync_SQS), container.get(TYPES.Sync_SQS_QUEUE_URL), container.get(TYPES.Sync_DomainEventMessageHandler), container.get(TYPES.Sync_Logger), ), ) } container .bind(TYPES.Sync_ControllerContainer) .toConstantValue(configuration?.controllerConatiner ?? new ControllerContainer()) if (isConfiguredForHomeServer) { container .bind(TYPES.Sync_BaseItemsController) .toConstantValue( new BaseItemsController( container.get(TYPES.Sync_SyncItems), container.get(TYPES.Sync_CheckIntegrity), container.get(TYPES.Sync_GetItem), container.get>(TYPES.Sync_ItemHttpMapper), container.get(TYPES.Sync_SyncResponseFactoryResolver), container.get(TYPES.Sync_ControllerContainer), ), ) container .bind(TYPES.Sync_BaseSharedVaultInvitesController) .toConstantValue( new BaseSharedVaultInvitesController( container.get(TYPES.Sync_InviteUserToSharedVault), container.get(TYPES.Sync_UpdateSharedVaultInvite), container.get(TYPES.Sync_AcceptInviteToSharedVault), container.get(TYPES.Sync_DeclineInviteToSharedVault), container.get(TYPES.Sync_DeleteSharedVaultInvitesToUser), container.get(TYPES.Sync_DeleteSharedVaultInvitesSentByUser), container.get(TYPES.Sync_GetSharedVaultInvitesSentByUser), container.get(TYPES.Sync_GetSharedVaultInvitesSentToUser), container.get(TYPES.Sync_SharedVaultInviteHttpMapper), container.get(TYPES.Sync_ControllerContainer), ), ) container .bind(TYPES.Sync_BaseSharedVaultUsersController) .toConstantValue( new BaseSharedVaultUsersController( container.get(TYPES.Sync_GetSharedVaultUsers), container.get(TYPES.Sync_RemoveSharedVaultUser), container.get(TYPES.Sync_DesignateSurvivor), container.get>( TYPES.Sync_SharedVaultUserHttpMapper, ), container.get(TYPES.Sync_ControllerContainer), ), ) container .bind(TYPES.Sync_BaseSharedVaultsController) .toConstantValue( new BaseSharedVaultsController( container.get(TYPES.Sync_GetSharedVaults), container.get(TYPES.Sync_CreateSharedVault), container.get(TYPES.Sync_DeleteSharedVault), container.get(TYPES.Sync_CreateSharedVaultFileValetToken), container.get(TYPES.Sync_SharedVaultHttpMapper), container.get(TYPES.Sync_SharedVaultUserHttpMapper), container.get(TYPES.Sync_ControllerContainer), ), ) container .bind(TYPES.Sync_BaseMessagesController) .toConstantValue( new BaseMessagesController( container.get(TYPES.Sync_GetMessagesSentToUser), container.get(TYPES.Sync_GetMessagesSentByUser), container.get(TYPES.Sync_SendMessageToUser), container.get(TYPES.Sync_DeleteAllMessagesSentToUser), container.get(TYPES.Sync_DeleteMessage), container.get(TYPES.Sync_MessageHttpMapper), container.get(TYPES.Sync_ControllerContainer), ), ) } logger.debug('Configuration complete') return container } }