+ return Configuration.getConfigurationData()?.stationTemplateUrls;
+ }
+
+ public static getSupervisionUrls(): string | string[] | undefined {
+ Configuration.warnDeprecatedConfigurationKey(
+ 'supervisionURLs',
+ undefined,
+ "Use 'supervisionUrls' instead",
+ );
+ // eslint-disable-next-line @typescript-eslint/dot-notation
+ if (
+ !isUndefined(
+ Configuration.getConfigurationData()!['supervisionURLs' as keyof ConfigurationData],
+ )
+ ) {
+ Configuration.getConfigurationData()!.supervisionUrls = Configuration.getConfigurationData()![
+ // eslint-disable-next-line @typescript-eslint/dot-notation
+ 'supervisionURLs' as keyof ConfigurationData
+ ] as string | string[];
+ }
+ return Configuration.getConfigurationData()?.supervisionUrls;
+ }
+
+ public static getSupervisionUrlDistribution(): SupervisionUrlDistribution | undefined {
+ Configuration.warnDeprecatedConfigurationKey(
+ 'distributeStationToTenantEqually',
+ undefined,
+ "Use 'supervisionUrlDistribution' instead",
+ );
+ Configuration.warnDeprecatedConfigurationKey(
+ 'distributeStationsToTenantsEqually',
+ undefined,
+ "Use 'supervisionUrlDistribution' instead",
+ );
+ return hasOwnProp(Configuration.getConfigurationData(), 'supervisionUrlDistribution')
+ ? Configuration.getConfigurationData()?.supervisionUrlDistribution
+ : SupervisionUrlDistribution.ROUND_ROBIN;
+ }
+
+ public static workerPoolInUse(): boolean {
+ return [WorkerProcessType.dynamicPool, WorkerProcessType.staticPool].includes(
+ Configuration.buildWorkerSection().processType!,
+ );
+ }
+
+ public static workerDynamicPoolInUse(): boolean {
+ return Configuration.buildWorkerSection().processType === WorkerProcessType.dynamicPool;
+ }
+
+ private static isConfigurationSectionCached(sectionName: ConfigurationSection): boolean {
+ return Configuration.configurationSectionCache.has(sectionName);
+ }
+
+ private static cacheConfigurationSection(sectionName: ConfigurationSection): void {
+ switch (sectionName) {
+ case ConfigurationSection.log:
+ Configuration.configurationSectionCache.set(sectionName, Configuration.buildLogSection());
+ break;
+ case ConfigurationSection.performanceStorage:
+ Configuration.configurationSectionCache.set(
+ sectionName,
+ Configuration.buildPerformanceStorageSection(),
+ );
+ break;
+ case ConfigurationSection.worker:
+ Configuration.configurationSectionCache.set(
+ sectionName,
+ Configuration.buildWorkerSection(),
+ );
+ break;
+ case ConfigurationSection.uiServer:
+ Configuration.configurationSectionCache.set(
+ sectionName,
+ Configuration.buildUIServerSection(),
+ );
+ break;
+ default:
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
+ throw new Error(`Unknown configuration section '${sectionName}'`);
+ }
+ }
+
+ private static buildUIServerSection(): UIServerConfiguration {
+ if (hasOwnProp(Configuration.getConfigurationData(), 'uiWebSocketServer')) {
+ console.error(
+ `${chalk.green(Configuration.logPrefix())} ${chalk.red(
+ `Deprecated configuration section 'uiWebSocketServer' usage. Use '${ConfigurationSection.uiServer}' instead`,
+ )}`,
+ );
+ }
+ let uiServerConfiguration: UIServerConfiguration = {
+ enabled: false,
+ type: ApplicationProtocol.WS,
+ options: {
+ host: Constants.DEFAULT_UI_SERVER_HOST,
+ port: Constants.DEFAULT_UI_SERVER_PORT,
+ },
+ };
+ if (hasOwnProp(Configuration.getConfigurationData(), ConfigurationSection.uiServer)) {
+ uiServerConfiguration = merge<UIServerConfiguration>(
+ uiServerConfiguration,
+ Configuration.getConfigurationData()!.uiServer!,
+ );
+ }
+ if (isCFEnvironment() === true) {
+ delete uiServerConfiguration.options?.host;
+ uiServerConfiguration.options!.port = parseInt(process.env.PORT!);
+ }
+ return uiServerConfiguration;
+ }
+
+ private static buildPerformanceStorageSection(): StorageConfiguration {
+ Configuration.warnDeprecatedConfigurationKey(
+ 'URI',
+ ConfigurationSection.performanceStorage,
+ "Use 'uri' instead",
+ );
+ let storageConfiguration: StorageConfiguration = {
+ enabled: false,
+ type: StorageType.JSON_FILE,
+ uri: Configuration.getDefaultPerformanceStorageUri(StorageType.JSON_FILE),
+ };
+ if (hasOwnProp(Configuration.getConfigurationData(), ConfigurationSection.performanceStorage)) {
+ storageConfiguration = {
+ ...storageConfiguration,
+ ...Configuration.getConfigurationData()?.performanceStorage,
+ ...(Configuration.getConfigurationData()?.performanceStorage?.type ===
+ StorageType.JSON_FILE &&
+ Configuration.getConfigurationData()?.performanceStorage?.uri && {
+ uri: Configuration.buildPerformanceUriFilePath(
+ new URL(Configuration.getConfigurationData()!.performanceStorage!.uri!).pathname,
+ ),
+ }),
+ };
+ }
+ return storageConfiguration;