public static async createContext()

in src/background/global-context-factory.ts [38:160]


    public static async createContext(
        browserAdapter: BrowserAdapter,
        telemetryEventHandler: TelemetryEventHandler,
        userData: LocalStorageData,
        assessmentsProvider: AssessmentsProvider,
        telemetryDataFactory: TelemetryDataFactory,
        indexedDBInstance: IndexedDBAPI,
        persistedData: PersistedData,
        issueFilingServiceProvider: IssueFilingServiceProvider,
        toolData: ToolData,
        storageAdapter: StorageAdapter,
        commandsAdapter: CommandsAdapter,
        logger: Logger,
    ): Promise<GlobalContext> {
        const interpreter = new Interpreter();

        const globalActionsHub = new GlobalActionHub();
        const globalStoreHub = new GlobalStoreHub(
            globalActionsHub,
            telemetryEventHandler,
            browserAdapter,
            userData,
            assessmentsProvider,
            indexedDBInstance,
            persistedData,
            storageAdapter,
            logger,
        );

        const featureFlagsController = new FeatureFlagsController(
            globalStoreHub.featureFlagStore,
            interpreter,
        );
        const userConfigurationController = new UserConfigurationController(interpreter);

        globalStoreHub.initialize();

        const issueFilingController = new IssueFilingControllerImpl(
            browserAdapter.createActiveTab,
            issueFilingServiceProvider,
            globalStoreHub.userConfigurationStore,
        );

        const scopingActionCreator = new ScopingActionCreator(
            interpreter,
            globalActionsHub.scopingActions,
        );
        const issueFilingActionCreator = new IssueFilingActionCreator(
            interpreter,
            telemetryEventHandler,
            issueFilingController,
        );
        const actionCreator = new GlobalActionCreator(
            globalActionsHub,
            interpreter,
            commandsAdapter,
            telemetryEventHandler,
        );
        const assessmentActionCreator = new AssessmentActionCreator(
            interpreter,
            globalActionsHub.assessmentActions,
            telemetryEventHandler,
        );
        const userConfigurationActionCreator = new UserConfigurationActionCreator(
            globalActionsHub.userConfigurationActions,
        );
        const featureFlagsActionCreator = new FeatureFlagsActionCreator(
            interpreter,
            globalActionsHub.featureFlagActions,
            telemetryEventHandler,
        );
        const permissionsStateActionCreator = new PermissionsStateActionCreator(
            interpreter,
            globalActionsHub.permissionsStateActions,
            telemetryEventHandler,
        );
        const debugToolsActionCreator = new DebugToolsActionCreator(
            interpreter,
            new DebugToolsController(browserAdapter),
        );

        issueFilingActionCreator.registerCallbacks();
        actionCreator.registerCallbacks();
        assessmentActionCreator.registerCallbacks();
        registerUserConfigurationMessageCallback(interpreter, userConfigurationActionCreator);
        scopingActionCreator.registerCallback();
        featureFlagsActionCreator.registerCallbacks();
        permissionsStateActionCreator.registerCallbacks();
        debugToolsActionCreator.registerCallback();

        const messageBroadcasterFactory = new BrowserMessageBroadcasterFactory(
            browserAdapter,
            logger,
        );
        const dispatcher = new StateDispatcher(
            messageBroadcasterFactory.allTabsBroadcaster,
            globalStoreHub,
            logger,
        );
        dispatcher.initialize();

        const assessmentChangeHandler = new CompletedTestStepTelemetryCreator(
            globalStoreHub.assessmentStore,
            assessmentsProvider,
            telemetryDataFactory,
            interpreter,
        );
        assessmentChangeHandler.initialize();

        const browserPermissionTracker = new BrowserPermissionsTracker(
            browserAdapter,
            interpreter,
            logger,
        );
        await browserPermissionTracker.initialize();

        return new GlobalContext(
            interpreter,
            globalStoreHub,
            featureFlagsController,
            userConfigurationController,
        );
    }