UNPKG

@finos/legend-application-marketplace

Version:
189 lines (167 loc) 6.4 kB
/** * Copyright (c) 2020-present, Goldman Sachs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { type GeneratorFn, ActionState, LogEvent, assertErrorThrown, UserSearchService, } from '@finos/legend-shared'; import { type ApplicationStore, LegendApplicationTelemetryHelper, APPLICATION_EVENT, } from '@finos/legend-application'; import { flow, makeObservable } from 'mobx'; import { DepotServerClient } from '@finos/legend-server-depot'; import { LakehouseContractServerClient, MarketplaceServerClient, } from '@finos/legend-server-marketplace'; import { getCurrentUserIDFromEngineServer, type V1_EngineServerClient, V1_RemoteEngine, } from '@finos/legend-graph'; import type { LegendMarketplaceApplicationConfig } from '../application/LegendMarketplaceApplicationConfig.js'; import type { LegendMarketplacePluginManager } from '../application/LegendMarketplacePluginManager.js'; import { LegendMarketplaceEventHelper } from '../__lib__/LegendMarketplaceEventHelper.js'; import { LegendMarketPlaceVendorDataState } from './LegendMarketPlaceVendorDataState.js'; import { LakehousePlatformServerClient, LakehouseIngestServerClient, } from '@finos/legend-server-lakehouse'; export type LegendMarketplaceApplicationStore = ApplicationStore< LegendMarketplaceApplicationConfig, LegendMarketplacePluginManager >; export class LegendMarketplaceBaseStore { readonly applicationStore: LegendMarketplaceApplicationStore; readonly marketplaceServerClient: MarketplaceServerClient; readonly depotServerClient: DepotServerClient; readonly lakehouseContractServerClient: LakehouseContractServerClient; readonly lakehousePlatformServerClient: LakehousePlatformServerClient; readonly lakehouseIngestServerClient: LakehouseIngestServerClient; readonly pluginManager: LegendMarketplacePluginManager; readonly engineServerClient: V1_EngineServerClient; readonly remoteEngine: V1_RemoteEngine; readonly userSearchService: UserSearchService | undefined; readonly initState = ActionState.create(); marketplaceVendorDataState: LegendMarketPlaceVendorDataState; constructor(applicationStore: LegendMarketplaceApplicationStore) { makeObservable<LegendMarketplaceBaseStore>(this, { initialize: flow, }); this.applicationStore = applicationStore; this.pluginManager = applicationStore.pluginManager; // marketplace this.marketplaceServerClient = new MarketplaceServerClient({ serverUrl: this.applicationStore.config.marketplaceServerUrl, subscriptionUrl: this.applicationStore.config.marketplaceSubscriptionUrl, }); this.marketplaceServerClient.setTracerService( this.applicationStore.tracerService, ); // depot this.depotServerClient = new DepotServerClient({ serverUrl: this.applicationStore.config.depotServerUrl, }); this.depotServerClient.setTracerService( this.applicationStore.tracerService, ); // lakehouse contract this.lakehouseContractServerClient = new LakehouseContractServerClient({ baseUrl: this.applicationStore.config.lakehouseServerUrl, }); this.lakehouseContractServerClient.setTracerService( this.applicationStore.tracerService, ); // lakehouse platform this.lakehousePlatformServerClient = new LakehousePlatformServerClient( this.applicationStore.config.lakehousePlatformUrl, ); this.lakehousePlatformServerClient.setTracerService( this.applicationStore.tracerService, ); // lakehouse ingest this.lakehouseIngestServerClient = new LakehouseIngestServerClient( undefined, ); this.lakehouseIngestServerClient.setTracerService( this.applicationStore.tracerService, ); this.remoteEngine = new V1_RemoteEngine( { baseUrl: this.applicationStore.config.engineServerUrl, }, applicationStore.logService, ); this.engineServerClient = this.remoteEngine.getEngineServerClient(); this.engineServerClient.setTracerService(applicationStore.tracerService); this.marketplaceVendorDataState = new LegendMarketPlaceVendorDataState( this.applicationStore, this, ); // User search if (this.pluginManager.getUserPlugins().length > 0) { this.pluginManager .getUserPlugins() .forEach((plugin) => plugin.setup(this.applicationStore.config.marketplaceUserSearchUrl), ); this.userSearchService = new UserSearchService(); this.userSearchService.registerPlugins( this.pluginManager.getUserPlugins(), ); } } *initialize(): GeneratorFn<void> { if (!this.initState.isInInitialState) { this.applicationStore.notificationService.notifyIllegalState( 'Base store is re-initialized', ); return; } this.initState.inProgress(); // retrieved the user identity is not already configured if (this.applicationStore.identityService.isAnonymous) { try { this.applicationStore.identityService.setCurrentUser( (yield getCurrentUserIDFromEngineServer( this.applicationStore.config.engineServerUrl, )) as string, ); } catch (error) { assertErrorThrown(error); this.applicationStore.logService.error( LogEvent.create(APPLICATION_EVENT.IDENTITY_AUTO_FETCH__FAILURE), error, ); this.applicationStore.notificationService.notifyWarning(error.message); } } // setup telemetry service this.applicationStore.telemetryService.setup(); LegendApplicationTelemetryHelper.logEvent_ApplicationInitializationSucceeded( this.applicationStore.telemetryService, this.applicationStore, ); LegendMarketplaceEventHelper.notify_ApplicationLoadSucceeded( this.applicationStore.eventService, ); this.initState.complete(); } }