UNPKG

@hashgraph/solo

Version:

An opinionated CLI tool to deploy and manage private Hedera Networks.

122 lines 7.01 kB
/** * SPDX-License-Identifier: Apache-2.0 */ import { container, Lifecycle } from 'tsyringe-neo'; import { SoloLogger } from '../logging.js'; import { PackageDownloader } from '../package_downloader.js'; import { Zippy } from '../zippy.js'; import { DependencyManager, HelmDependencyManager } from '../dependency_managers/index.js'; import * as constants from '../constants.js'; import { Helm } from '../helm.js'; import { ChartManager } from '../chart_manager.js'; import { ConfigManager } from '../config_manager.js'; import { AccountManager } from '../account_manager.js'; import { PlatformInstaller } from '../platform_installer.js'; import { KeyManager } from '../key_manager.js'; import { ProfileManager } from '../profile_manager.js'; import { IntervalLeaseRenewalService } from '../lease/interval_lease_renewal.js'; import { LeaseManager } from '../lease/lease_manager.js'; import { CertificateManager } from '../certificate_manager.js'; import path, { normalize } from 'path'; import { LocalConfig } from '../config/local_config.js'; import { RemoteConfigManager } from '../config/remote/remote_config_manager.js'; import os from 'os'; import * as version from '../../../version.js'; import { NetworkNodes } from '../network_nodes.js'; import { ClusterChecks } from '../cluster_checks.js'; import { InjectTokens } from './inject_tokens.js'; import { K8ClientFactory } from '../kube/k8_client/k8_client_factory.js'; /** * Container class to manage the dependency injection container */ export class Container { static instance = null; static isInitialized = false; constructor() { } /** * Get the singleton instance of the container */ static getInstance() { if (!Container.instance) { Container.instance = new Container(); } return Container.instance; } /** * Initialize the container with the default dependencies * @param cacheDir - the cache directory to use, defaults to constants.SOLO_CACHE_DIR * @param logLevel - the log level to use, defaults to 'debug' * @param devMode - if true, show full stack traces in error messages */ init(cacheDir = constants.SOLO_CACHE_DIR, logLevel = 'debug', devMode = false) { // SoloLogger container.register(InjectTokens.LogLevel, { useValue: logLevel }); container.register(InjectTokens.DevMode, { useValue: devMode }); container.register(InjectTokens.SoloLogger, { useClass: SoloLogger }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.PackageDownloader, { useClass: PackageDownloader }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.Zippy, { useClass: Zippy }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.DependencyManager, { useClass: DependencyManager }, { lifecycle: Lifecycle.Singleton }); // Helm & HelmDependencyManager container.register(InjectTokens.OsPlatform, { useValue: os.platform() }); container.register(InjectTokens.Helm, { useClass: Helm }, { lifecycle: Lifecycle.Singleton }); // HelmDependencyManager container.register(InjectTokens.HelmInstallationDir, { useValue: path.join(constants.SOLO_HOME_DIR, 'bin') }); container.register(InjectTokens.OsArch, { useValue: os.arch() }); container.register(InjectTokens.HelmVersion, { useValue: version.HELM_VERSION }); container.register(InjectTokens.HelmDependencyManager, { useClass: HelmDependencyManager }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.ChartManager, { useClass: ChartManager }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.ConfigManager, { useClass: ConfigManager }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.K8Factory, { useClass: K8ClientFactory }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.AccountManager, { useClass: AccountManager }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.PlatformInstaller, { useClass: PlatformInstaller }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.KeyManager, { useClass: KeyManager }, { lifecycle: Lifecycle.Singleton }); // ProfileManager container.register(InjectTokens.CacheDir, { useValue: cacheDir }); container.register(InjectTokens.ProfileManager, { useClass: ProfileManager }, { lifecycle: Lifecycle.Singleton }); // LeaseRenewalService container.register(InjectTokens.LeaseRenewalService, { useClass: IntervalLeaseRenewalService }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.LeaseManager, { useClass: LeaseManager }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.CertificateManager, { useClass: CertificateManager }, { lifecycle: Lifecycle.Singleton }); // LocalConfig const localConfigPath = normalize(path.join(cacheDir, constants.DEFAULT_LOCAL_CONFIG_FILE)); container.register(InjectTokens.LocalConfigFilePath, { useValue: localConfigPath }); container.register(InjectTokens.LocalConfig, { useClass: LocalConfig }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.RemoteConfigManager, { useClass: RemoteConfigManager }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.ClusterChecks, { useClass: ClusterChecks }, { lifecycle: Lifecycle.Singleton }); container.register(InjectTokens.NetworkNodes, { useClass: NetworkNodes }, { lifecycle: Lifecycle.Singleton }); Container.isInitialized = true; } /** * clears the container registries and re-initializes the container * @param cacheDir - the cache directory to use, defaults to constants.SOLO_CACHE_DIR * @param logLevel - the log level to use, defaults to 'debug' * @param devMode - if true, show full stack traces in error messages */ reset(cacheDir, logLevel, devMode) { if (Container.instance && Container.isInitialized) { container.reset(); } Container.getInstance().init(cacheDir, logLevel, devMode); } /** * clears the container instances, useful for testing when you are using container.registerInstance() * @param cacheDir - the cache directory to use, defaults to constants.SOLO_CACHE_DIR * @param logLevel - the log level to use, defaults to 'debug' * @param devMode - if true, show full stack traces in error messages */ clearInstances(cacheDir, logLevel, devMode) { if (Container.instance && Container.isInitialized) { container.clearInstances(); } else { Container.getInstance().init(cacheDir, logLevel, devMode); } } /** * only call dispose when you are about to system exit */ async dispose() { await container.dispose(); } } //# sourceMappingURL=container_init.js.map