/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import {PasswordManager} from '../mtproto/passwordManager'; import {ReferenceDatabase} from '../mtproto/referenceDatabase'; import DialogsStorage from '../storages/dialogs'; import FiltersStorage from '../storages/filters'; import {ApiUpdatesManager} from './apiUpdatesManager'; import {AppAvatarsManager} from './appAvatarsManager'; import {AppCallsManager} from './appCallsManager'; import {AppChatsManager} from './appChatsManager'; import {AppDocsManager} from './appDocsManager'; import {AppDraftsManager} from './appDraftsManager'; import {AppEmojiManager} from './appEmojiManager'; import {AppGroupCallsManager} from './appGroupCallsManager'; import {AppInlineBotsManager} from './appInlineBotsManager'; import {AppMessagesIdsManager} from './appMessagesIdsManager'; import {AppMessagesManager} from './appMessagesManager'; import {AppNotificationsManager} from './appNotificationsManager'; import {AppPeersManager} from './appPeersManager'; import {AppPhotosManager} from './appPhotosManager'; import {AppPollsManager} from './appPollsManager'; import {AppPrivacyManager} from './appPrivacyManager'; import {AppProfileManager} from './appProfileManager'; import {AppReactionsManager} from './appReactionsManager'; import {AppStickersManager} from './appStickersManager'; import {AppUsersManager} from './appUsersManager'; import {AppWebPagesManager} from './appWebPagesManager'; import {ApiFileManager} from '../mtproto/apiFileManager'; import {ApiManager} from '../mtproto/apiManager'; import ctx from '../../environment/ctx'; import PeersStorage from '../storages/peers'; import ThumbsStorage from '../storages/thumbs'; import {NetworkerFactory} from '../mtproto/networkerFactory'; import {RootScope} from '../rootScope'; import {Authorizer} from '../mtproto/authorizer'; import {DcConfigurator} from '../mtproto/dcConfigurator'; import {TimeManager} from '../mtproto/timeManager'; import {AppStoragesManager} from './appStoragesManager'; import cryptoMessagePort from '../crypto/cryptoMessagePort'; import appStateManager from './appStateManager'; import filterUnique from '../../helpers/array/filterUnique'; import AppWebDocsManager from './appWebDocsManager'; import AppPaymentsManager from './appPaymentsManager'; export default function createManagers(appStoragesManager: AppStoragesManager, userId: UserId) { const managers = { appPeersManager: new AppPeersManager, appChatsManager: new AppChatsManager, appDocsManager: new AppDocsManager, appPhotosManager: new AppPhotosManager, appPollsManager: new AppPollsManager, appUsersManager: new AppUsersManager, appWebPagesManager: new AppWebPagesManager, appDraftsManager: new AppDraftsManager, appProfileManager: new AppProfileManager, appNotificationsManager: new AppNotificationsManager, apiUpdatesManager: new ApiUpdatesManager, appAvatarsManager: new AppAvatarsManager, appGroupCallsManager: new AppGroupCallsManager, appCallsManager: new AppCallsManager, appReactionsManager: new AppReactionsManager, appMessagesManager: new AppMessagesManager, appMessagesIdsManager: new AppMessagesIdsManager, appPrivacyManager: new AppPrivacyManager, appInlineBotsManager: new AppInlineBotsManager, appStickersManager: new AppStickersManager, referenceDatabase: new ReferenceDatabase, appEmojiManager: new AppEmojiManager, filtersStorage: new FiltersStorage, dialogsStorage: new DialogsStorage, apiManager: new ApiManager, cryptoWorker: cryptoMessagePort, passwordManager: new PasswordManager, apiFileManager: new ApiFileManager, peersStorage: new PeersStorage, thumbsStorage: new ThumbsStorage, networkerFactory: new NetworkerFactory, rootScope: new RootScope, authorizer: new Authorizer, dcConfigurator: new DcConfigurator, timeManager: new TimeManager, appStoragesManager: appStoragesManager, appStateManager: appStateManager, appWebDocsManager: new AppWebDocsManager, appPaymentsManager: new AppPaymentsManager }; type T = typeof managers; for(const name in managers) { const manager = managers[name as keyof T]; if(!manager) { continue; } if((manager as AppMessagesManager).setManagers) { (manager as AppMessagesManager).setManagers(managers as any); delete (manager as AppMessagesManager).setManagers; } // @ts-ignore ctx[name] = manager; } const promises: Array void) | void> | void>[] = []; let names = Object.keys(managers) as (keyof T)[]; names.unshift('appUsersManager', 'appChatsManager', 'appNotificationsManager', 'appMessagesManager', 'dialogsStorage'); names = filterUnique(names); for(const name of names) { const manager = managers[name]; if((manager as any)?.after) { // console.log('injecting after', name); const result = (manager as any).after(); promises.push(result); // if(result instanceof Promise) { // result.then(() => { // console.log('injected after', name); // }); // } } } if(userId) { managers.apiManager.setUserAuth(userId); } return Promise.all(promises).then(() => managers); }