@twin.org/node-core 0.9.5-next.1 → 0.9.5-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"engineEnvBuilder.js","sourceRoot":"","sources":["../../../src/builders/engineEnvBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { cpus } from \"node:os\";\nimport path from \"node:path\";\nimport { Is, Mutex } from \"@twin.org/core\";\nimport type { IIotaConfig } from \"@twin.org/dlt-iota\";\nimport { EngineCloneMode } from \"@twin.org/engine-models\";\nimport {\n\tAttestationComponentType,\n\tAttestationConnectorType,\n\tAuditableItemGraphComponentType,\n\tAuditableItemStreamComponentType,\n\ttype AutomationActionConfig,\n\tAutomationActionType,\n\tAutomationComponentType,\n\tBackgroundTaskComponentType,\n\tBlobStorageComponentType,\n\tBlobStorageConnectorType,\n\tContextIdHandlerComponentType,\n\tDataConverterConnectorType,\n\tDataExtractorConnectorType,\n\tDataProcessingComponentType,\n\tDataspaceControlPlaneComponentType,\n\tDataspaceDataPlaneComponentType,\n\ttype DltConfig,\n\tDltConfigType,\n\tDocumentManagementComponentType,\n\tEmailProtocolConnectorType,\n\tEngineTypeHelper,\n\tEntityStorageConnectorType,\n\tEventBusComponentType,\n\tEventBusConnectorType,\n\tFaucetConnectorType,\n\tFederatedCatalogueComponentType,\n\tFederatedCatalogueFilterComponentType,\n\tHealthComponentType,\n\tIdentityComponentType,\n\tIdentityConnectorType,\n\tIdentityProfileComponentType,\n\tIdentityProfileConnectorType,\n\tIdentityResolverComponentType,\n\tIdentityResolverConnectorType,\n\ttype IEngineConfig,\n\tImmutableProofComponentType,\n\tLoggingComponentType,\n\tLoggingConnectorType,\n\tMailboxComponentType,\n\tMailStorageComponentType,\n\tMessagingAdminComponentType,\n\tMessagingComponentType,\n\tMessagingEmailConnectorType,\n\tMessagingPushNotificationConnectorType,\n\tMessagingSmsConnectorType,\n\tMetricsCollectorComponentType,\n\tMetricsProducerComponentType,\n\tNftComponentType,\n\tNftConnectorType,\n\tNotarizationComponentType,\n\tNotarizationConnectorType,\n\tPlatformComponentType,\n\tRightsManagementPapComponentType,\n\tRightsManagementPdpComponentType,\n\tRightsManagementPepComponentType,\n\tRightsManagementPipComponentType,\n\tRightsManagementPmpComponentType,\n\tRightsManagementPnapComponentType,\n\tRightsManagementPnpComponentType,\n\tRightsManagementPolicyArbiterComponentType,\n\tRightsManagementPolicyEnforcementProcessorComponentType,\n\tRightsManagementPolicyExecutionActionComponentType,\n\tRightsManagementPolicyInformationSourceComponentType,\n\tRightsManagementPolicyNegotiatorComponentType,\n\tRightsManagementPolicyObligationEnforcerComponentType,\n\tRightsManagementPolicyRequesterComponentType,\n\tRightsManagementPxpComponentType,\n\tSchemaVersionMigrationComponentType,\n\tTaskSchedulerComponentType,\n\tTelemetryComponentType,\n\tTelemetryConnectorType,\n\tTenantAdminComponentType,\n\tTracingComponentType,\n\tTracingConnectorType,\n\tTrustComponentType,\n\tTrustGeneratorComponentType,\n\tTrustVerifierComponentType,\n\tVaultConnectorType,\n\tWalletConnectorType\n} from \"@twin.org/engine-types\";\nimport {\n\ttype IOpenTelemetryLoggingConnectorConfig,\n\ttype IOpenTelemetryOtlpExporterConfig,\n\tOpenTelemetryExporterTypes\n} from \"@twin.org/logging-connector-opentelemetry\";\nimport {\n\ttype IOpenTelemetryTelemetryConnectorConfig,\n\tOpenTelemetryReaderTypes\n} from \"@twin.org/telemetry-connector-opentelemetry\";\nimport {\n\ttype IOpenTelemetryTracingConnectorConfig,\n\tOpenTelemetryProcessorTypes\n} from \"@twin.org/tracing-connector-opentelemetry\";\nimport {\n\tCONTEXT_ID_HANDLER_FEATURE_DID,\n\tCONTEXT_ID_HANDLER_FEATURE_TENANT,\n\tDEFAULT_HEALTH_EXCLUDE_CLONE_COMPONENTS\n} from \"../defaults.js\";\nimport { isAuthEntityStorageRequired } from \"./engineServerEnvBuilder.js\";\nimport {\n\tcommaSeparatedListToArray,\n\tenvArray,\n\tenvBoolean,\n\tenvChoice,\n\tenvCount,\n\tenvDateTime,\n\tenvInteger,\n\tenvListToArray,\n\tenvMinToMs,\n\tenvMinutes,\n\tenvMs,\n\tenvSecToMs,\n\tenvSeconds\n} from \"./helper/envHelpers.js\";\nimport type { IEngineEnvironmentVariables } from \"../models/IEngineEnvironmentVariables.js\";\n\n/**\n * Build the engine core configuration from environment variables.\n * @param envVars The environment variables.\n * @returns The config for the core.\n */\nexport async function buildEngineConfiguration(\n\tenvVars: IEngineEnvironmentVariables\n): Promise<IEngineConfig> {\n\tif (Is.stringValue(envVars.storageFileRoot)) {\n\t\tenvVars.stateFilename ??= \"engine-state.json\";\n\t\tenvVars.storageFileRoot = path.resolve(envVars.storageFileRoot);\n\t\tenvVars.stateFilename = path.join(envVars.storageFileRoot, envVars.stateFilename);\n\t}\n\n\tconst coreConfig: IEngineConfig = {\n\t\tdebug: envBoolean(envVars, \"debug\", false),\n\t\tsilent: envBoolean(envVars, \"silent\", false),\n\t\tsilentComponents: {\n\t\t\tlogging: commaSeparatedListToArray(envVars.loggingSilentComponents),\n\t\t\ttelemetry: commaSeparatedListToArray(envVars.telemetrySilentComponents),\n\t\t\ttracing: commaSeparatedListToArray(envVars.tracingSilentComponents)\n\t\t},\n\t\ttypes: {}\n\t};\n\n\tconst mutexTimeoutMs = envMs(envVars, \"mutexTimeoutDefault\");\n\tif (Is.notEmpty(mutexTimeoutMs)) {\n\t\tMutex.setDefaultTimeoutMs(mutexTimeoutMs);\n\t}\n\n\tawait configureSchemaMigration(coreConfig, envVars);\n\tawait configurePlatform(coreConfig, envVars);\n\tawait configureTenant(coreConfig, envVars);\n\tawait configureContextIdHandlers(coreConfig, envVars);\n\n\tawait configureEntityStorage(coreConfig, envVars);\n\tawait configureBlobStorage(coreConfig, envVars);\n\tawait configureVault(coreConfig, envVars);\n\tawait configureDlt(coreConfig, envVars);\n\n\tawait configureLogging(coreConfig, envVars);\n\tawait configureBackgroundTask(coreConfig, envVars);\n\tawait configureTaskScheduler(coreConfig, envVars);\n\tawait configureEventBus(coreConfig, envVars);\n\tawait configureTelemetry(coreConfig, envVars);\n\tawait configureMetricsCollector(coreConfig, envVars);\n\tawait configureTracing(coreConfig, envVars);\n\tawait configureMessaging(coreConfig, envVars);\n\tawait configureMailbox(coreConfig, envVars);\n\tawait configureAutomation(coreConfig, envVars);\n\tawait configureHealth(coreConfig, envVars);\n\n\tawait configureFaucet(coreConfig, envVars);\n\tawait configureWallet(coreConfig, envVars);\n\tawait configureNft(coreConfig, envVars);\n\tawait configureNotarization(coreConfig, envVars);\n\tawait configureImmutableProof(coreConfig, envVars);\n\tawait configureIdentity(coreConfig, envVars);\n\tawait configureIdentityResolver(coreConfig, envVars);\n\tawait configureIdentityProfile(coreConfig, envVars);\n\tawait configureAttestation(coreConfig, envVars);\n\tawait configureDataProcessing(coreConfig, envVars);\n\n\tawait configureAuditableItemGraph(coreConfig, envVars);\n\tawait configureAuditableItemStream(coreConfig, envVars);\n\tawait configureDocumentManagement(coreConfig, envVars);\n\tawait configureTrust(coreConfig, envVars);\n\tawait configureRightsManagement(coreConfig, envVars);\n\n\tawait configureFederatedCatalogue(coreConfig, envVars);\n\tawait configureDataspace(coreConfig, envVars);\n\n\treturn coreConfig;\n}\n\n/**\n * Configures the entity storage.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the entity storage configuration has been applied.\n */\nasync function configureEntityStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types ??= {};\n\tcoreConfig.types.entityStorageConnector ??= [];\n\n\tconst entityStorageConnectorTypes = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tEntityStorageConnectorType\n\t>(envVars, \"entityStorageConnectorType\", Object.values(EntityStorageConnectorType));\n\n\tfor (const entityStorageConnectorType of entityStorageConnectorTypes) {\n\t\tif (entityStorageConnectorType === EntityStorageConnectorType.Memory) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.Memory,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.File) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.File,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdirectory: envVars.storageFileRoot ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t},\n\t\t\t\t\tfolderPrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.AwsDynamoDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.AwsDynamoDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsDynamodbRegion ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsDynamodbAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsDynamodbAccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsDynamodbSecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsDynamodbEndpoint,\n\t\t\t\t\t\tconnectionTimeoutMs: envMs(envVars, \"awsDynamodbConnectionTimeout\"),\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.AzureCosmosDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.AzureCosmosDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tendpoint: envVars.azureCosmosdbEndpoint ?? \"\",\n\t\t\t\t\t\tkey: envVars.azureCosmosdbKey ?? \"\",\n\t\t\t\t\t\tdatabaseId: envVars.azureCosmosdbDatabaseId ?? \"\",\n\t\t\t\t\t\tcontainerId: envVars.azureCosmosdbContainerId ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.GcpFirestoreDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.GcpFirestoreDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tprojectId: envVars.gcpFirestoreProjectId ?? \"\",\n\t\t\t\t\t\tcredentials: envVars.gcpFirestoreCredentials ?? \"\",\n\t\t\t\t\t\tdatabaseId: envVars.gcpFirestoreDatabaseId ?? \"\",\n\t\t\t\t\t\tcollectionName: envVars.gcpFirestoreCollectionName ?? \"\",\n\t\t\t\t\t\tendpoint: envVars.gcpFirestoreEndpoint ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.ScyllaDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.ScyllaDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thosts: commaSeparatedListToArray(envVars.scylladbHosts),\n\t\t\t\t\t\tlocalDataCenter: envVars.scylladbLocalDataCenter ?? \"\",\n\t\t\t\t\t\tkeyspace: envVars.scylladbKeyspace ?? \"\",\n\t\t\t\t\t\tport: envInteger(envVars, \"scylladbPort\"),\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\t\tpool: {\n\t\t\t\t\t\t\tcoreConnectionsPerHost: envCount(envVars, \"scylladbPoolCoreConnectionsPerHost\"),\n\t\t\t\t\t\t\tmaxRequestsPerConnection: envCount(envVars, \"scylladbPoolMaxRequestsPerConnection\")\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.MySqlDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.MySqlDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thost: envVars.mySqlHost ?? \"\",\n\t\t\t\t\t\tport: envInteger(envVars, \"mySqlPort\"),\n\t\t\t\t\t\tuser: envVars.mySqlUser ?? \"\",\n\t\t\t\t\t\tpassword: envVars.mySqlPassword ?? \"\",\n\t\t\t\t\t\tdatabase: envVars.mySqlDatabase ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\t\tpool: {\n\t\t\t\t\t\t\tconnectionLimit: envCount(envVars, \"mySqlPoolConnectionLimit\"),\n\t\t\t\t\t\t\tmaxIdle: envCount(envVars, \"mySqlPoolMaxIdle\"),\n\t\t\t\t\t\t\tidleTimeout: envMs(envVars, \"mySqlPoolIdleTimeout\"),\n\t\t\t\t\t\t\tenableKeepAlive: envBoolean(envVars, \"mySqlPoolEnableKeepAlive\"),\n\t\t\t\t\t\t\twaitForConnections: envBoolean(envVars, \"mySqlPoolWaitForConnections\"),\n\t\t\t\t\t\t\tqueueLimit: envCount(envVars, \"mySqlPoolQueueLimit\")\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.MongoDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.MongoDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thost: envVars.mongoDbHost ?? \"\",\n\t\t\t\t\t\tport: envInteger(envVars, \"mongoDbPort\"),\n\t\t\t\t\t\tuser: envVars.mongoDbUser ?? \"\",\n\t\t\t\t\t\tpassword: envVars.mongoDbPassword ?? \"\",\n\t\t\t\t\t\tdatabase: envVars.mongoDbDatabase ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\t\tpool: {\n\t\t\t\t\t\t\tmaxPoolSize: envCount(envVars, \"mongoDbPoolMaxPoolSize\"),\n\t\t\t\t\t\t\tminPoolSize: envCount(envVars, \"mongoDbPoolMinPoolSize\"),\n\t\t\t\t\t\t\tmaxIdleTimeMs: envMs(envVars, \"mongoDbPoolMaxIdleTime\"),\n\t\t\t\t\t\t\twaitQueueTimeoutMs: envMs(envVars, \"mongoDbPoolWaitQueueTimeout\")\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.PostgreSql) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.PostgreSql,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thost: envVars.postgreSqlHost ?? \"\",\n\t\t\t\t\t\tport: envInteger(envVars, \"postgreSqlPort\"),\n\t\t\t\t\t\tuser: envVars.postgreSqlUser ?? \"\",\n\t\t\t\t\t\tpassword: envVars.postgreSqlPassword ?? \"\",\n\t\t\t\t\t\tdatabase: envVars.postgreSqlDatabase ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\t\tpool: {\n\t\t\t\t\t\t\tmax: envCount(envVars, \"postgreSqlPoolMax\"),\n\t\t\t\t\t\t\tidleTimeout: envSeconds(envVars, \"postgreSqlPoolIdleTimeout\"),\n\t\t\t\t\t\t\tconnectTimeout: envSeconds(envVars, \"postgreSqlPoolConnectTimeout\"),\n\t\t\t\t\t\t\tmaxLifetime: envSeconds(envVars, \"postgreSqlPoolMaxLifetime\")\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tconst defaultEntityStorageConnectorType =\n\t\tenvVars.entityStorageConnectorDefault ?? entityStorageConnectorTypes[0];\n\n\tif (Is.arrayValue(entityStorageConnectorTypes)) {\n\t\tfor (const config of coreConfig.types.entityStorageConnector) {\n\t\t\tif (config.type === defaultEntityStorageConnectorType) {\n\t\t\t\tconfig.isDefault = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Configures the blob storage.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the blob storage configuration has been applied.\n */\nasync function configureBlobStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.blobStorageConnector ??= [];\n\n\tconst blobStorageConnectorTypes = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tBlobStorageConnectorType\n\t>(envVars, \"blobStorageConnectorType\", Object.values(BlobStorageConnectorType));\n\n\tfor (const blobStorageConnectorType of blobStorageConnectorTypes) {\n\t\tif (blobStorageConnectorType === BlobStorageConnectorType.Memory) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.Memory\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.File) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.File,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdirectory: Is.stringValue(envVars.storageFileRoot)\n\t\t\t\t\t\t\t? path.join(envVars.storageFileRoot, \"blob-storage\")\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t},\n\t\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.Ipfs) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.Ipfs,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tapiUrl: envVars.ipfsApiUrl ?? \"\",\n\t\t\t\t\t\tbearerToken: envVars.ipfsBearerToken\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.AwsS3) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.AwsS3,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsS3Region ?? \"\",\n\t\t\t\t\t\tbucketName: envVars.awsS3BucketName ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsS3AuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsS3AccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsS3SecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsS3Endpoint\n\t\t\t\t\t},\n\t\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.AzureStorage) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.AzureStorage,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\taccountName: envVars.azureStorageAccountName ?? \"\",\n\t\t\t\t\t\taccountKey: envVars.azureStorageAccountKey ?? \"\",\n\t\t\t\t\t\tcontainerName: envVars.azureStorageContainerName ?? \"\",\n\t\t\t\t\t\tendpoint: envVars.azureStorageEndpoint ?? \"\"\n\t\t\t\t\t},\n\t\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.GcpStorage) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.GcpStorage,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tprojectId: envVars.gcpStorageProjectId ?? \"\",\n\t\t\t\t\t\tcredentials: envVars.gcpStorageCredentials ?? \"\",\n\t\t\t\t\t\tbucketName: envVars.gcpStorageBucketName ?? \"\",\n\t\t\t\t\t\tapiEndpoint: envVars.gcpFirestoreEndpoint\n\t\t\t\t\t},\n\t\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (Is.arrayValue(blobStorageConnectorTypes)) {\n\t\tconst defaultStorageConnectorType =\n\t\t\tenvVars.blobStorageConnectorDefault ?? blobStorageConnectorTypes[0];\n\t\tfor (const config of coreConfig.types.blobStorageConnector) {\n\t\t\tif (config.type === defaultStorageConnectorType) {\n\t\t\t\tconfig.isDefault = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (coreConfig.types.blobStorageConnector.length > 0) {\n\t\tcoreConfig.types.blobStorageComponent ??= [];\n\t\tcoreConfig.types.blobStorageComponent.push({\n\t\t\ttype: BlobStorageComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tvaultKeyId:\n\t\t\t\t\t\t(envVars.blobStorageEnableEncryption ?? false)\n\t\t\t\t\t\t\t? envVars.blobStorageEncryptionKeyId\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the logging.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the logging configuration has been applied.\n */\nasync function configureLogging(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.loggingConnector ??= [];\n\n\tconst loggingConnectorTypes = envListToArray<IEngineEnvironmentVariables, LoggingConnectorType>(\n\t\tenvVars,\n\t\t\"loggingConnector\",\n\t\tObject.values(LoggingConnectorType)\n\t);\n\tlet additionalConnectorCount = 0;\n\n\tfor (const loggingConnector of loggingConnectorTypes) {\n\t\tif (loggingConnector === LoggingConnectorType.Console) {\n\t\t\tcoreConfig.types.loggingConnector.push({\n\t\t\t\ttype: LoggingConnectorType.Console,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\ttranslateMessages: true,\n\t\t\t\t\t\thideGroups: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (loggingConnector === LoggingConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.loggingConnector.push({\n\t\t\t\ttype: LoggingConnectorType.EntityStorage,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tbatchSize: envCount(envVars, \"loggingBatchSize\"),\n\t\t\t\t\t\tbatchIntervalMs: envSecToMs(envVars, \"loggingBatchFlushInterval\"),\n\t\t\t\t\t\tretainForMs: envMinToMs(envVars, \"loggingRetainFor\"),\n\t\t\t\t\t\tmaxEntries: envCount(envVars, \"loggingMaxEntries\"),\n\t\t\t\t\t\tretentionIntervalMs: envMinToMs(envVars, \"loggingRetentionInterval\"),\n\t\t\t\t\t\tretentionBatchSize: envCount(envVars, \"loggingRetentionBatchSize\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (loggingConnector === LoggingConnectorType.OpenTelemetry) {\n\t\t\tconst otelLoggingConfig: IOpenTelemetryLoggingConnectorConfig = {\n\t\t\t\tloggerName: envVars.openTelemetryLoggingLoggerName,\n\t\t\t\tloggerVersion: envVars.openTelemetryLoggingLoggerVersion\n\t\t\t};\n\t\t\tif (Is.stringValue(envVars.openTelemetryLoggingPrometheusEndpoint)) {\n\t\t\t\totelLoggingConfig.exporters = {\n\t\t\t\t\totlp: {\n\t\t\t\t\t\ttype: OpenTelemetryExporterTypes.Otlp,\n\t\t\t\t\t\tendpoint: envVars.openTelemetryLoggingPrometheusEndpoint,\n\t\t\t\t\t\tprocessor:\n\t\t\t\t\t\t\t(envVars.openTelemetryLoggingProcessor as IOpenTelemetryOtlpExporterConfig[\"processor\"]) ??\n\t\t\t\t\t\t\t\"batch\"\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tcoreConfig.types.loggingConnector.push({\n\t\t\t\ttype: LoggingConnectorType.OpenTelemetry,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: otelLoggingConfig\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (loggingConnector === LoggingConnectorType.File) {\n\t\t\tcoreConfig.types.loggingConnector.push({\n\t\t\t\ttype: LoggingConnectorType.File,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdirectory: envVars.loggingFileDirectory ?? envVars.storageFileRoot ?? \"\",\n\t\t\t\t\t\tfilename: envVars.loggingFileFilename,\n\t\t\t\t\t\tmaxFileSizeBytes: envCount(envVars, \"loggingFileMaxFileSizeBytes\"),\n\t\t\t\t\t\tmaxRetainedFiles: envCount(envVars, \"loggingFileMaxRetainedFiles\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t}\n\t}\n\n\t// If more than one logging connector, then we need to add a multi connector\n\t// and set it as the default one\n\tif (additionalConnectorCount > 1) {\n\t\tcoreConfig.types.loggingConnector.push({\n\t\t\ttype: LoggingConnectorType.Multi,\n\t\t\toptions: {\n\t\t\t\tloggingConnectorTypes\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\t} else if (additionalConnectorCount > 0) {\n\t\t// If only one connector, then we set it as the default one\n\t\tcoreConfig.types.loggingConnector[coreConfig.types.loggingConnector.length - 1].isDefault =\n\t\t\ttrue;\n\t}\n\n\tif (additionalConnectorCount > 0) {\n\t\tcoreConfig.types.loggingComponent ??= [];\n\t\t// We set the isDefault flag so that other components will get this service by default\n\t\t// and not the generic one from the engine core\n\t\tcoreConfig.types.loggingComponent.push({ type: LoggingComponentType.Service, isDefault: true });\n\t}\n}\n\n/**\n * Configures the vault.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the vault configuration has been applied.\n */\nasync function configureVault(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.vaultConnector ??= [];\n\n\tconst vaultConnectorType = envChoice<IEngineEnvironmentVariables, VaultConnectorType>(\n\t\tenvVars,\n\t\t\"vaultConnector\",\n\t\tObject.values(VaultConnectorType)\n\t);\n\n\tif (vaultConnectorType === VaultConnectorType.EntityStorage) {\n\t\tcoreConfig.types.vaultConnector.push({\n\t\t\ttype: VaultConnectorType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tprefix: envVars.vaultPrefix\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (vaultConnectorType === VaultConnectorType.Hashicorp) {\n\t\tcoreConfig.types.vaultConnector.push({\n\t\t\ttype: VaultConnectorType.Hashicorp,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tendpoint: envVars.hashicorpVaultEndpoint ?? \"\",\n\t\t\t\t\ttoken: envVars.hashicorpVaultToken ?? \"\",\n\t\t\t\t\tprefix: envVars.vaultPrefix\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the background task.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the background task configuration has been applied.\n */\nasync function configureBackgroundTask(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.backgroundTaskComponent ??= [];\n\n\tif (isBackgroundTasksRequired(envVars)) {\n\t\tcoreConfig.types.backgroundTaskComponent.push({\n\t\t\ttype: BackgroundTaskComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmaxSystemWorkerCount: envCount(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"backgroundTaskMaxSystemWorkerCount\",\n\t\t\t\t\t\tcpus().length * 2\n\t\t\t\t\t),\n\t\t\t\t\ttaskInterval: envMs(envVars, \"backgroundTaskInterval\"),\n\t\t\t\t\tretryInterval: envMs(envVars, \"backgroundTaskRetryInterval\"),\n\t\t\t\t\tcleanupInterval: envMs(envVars, \"backgroundTaskCleanupInterval\"),\n\t\t\t\t\tworkerShutdownTimeout: envMs(envVars, \"backgroundTaskWorkerShutdownTimeout\"),\n\t\t\t\t\tmaxDispatchCount: envCount(envVars, \"backgroundTaskMaxDispatchCount\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the event bus.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the event bus configuration has been applied.\n */\nasync function configureEventBus(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.eventBusConnector ??= [];\n\n\tconst eventBusConnectorType = envChoice<IEngineEnvironmentVariables, EventBusConnectorType>(\n\t\tenvVars,\n\t\t\"eventBusConnector\",\n\t\tObject.values(EventBusConnectorType)\n\t);\n\n\tif (eventBusConnectorType === EventBusConnectorType.Local) {\n\t\tcoreConfig.types.eventBusConnector.push({\n\t\t\ttype: EventBusConnectorType.Local\n\t\t});\n\t}\n\n\tif (coreConfig.types.eventBusConnector.length > 0) {\n\t\tcoreConfig.types.eventBusComponent ??= [];\n\t\tcoreConfig.types.eventBusComponent.push({ type: EventBusComponentType.Service });\n\t}\n}\n\n/**\n * Configures the telemetry.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the telemetry configuration has been applied.\n */\nasync function configureTelemetry(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.telemetryConnector ??= [];\n\n\tconst telemetryConnectorTypes = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tTelemetryConnectorType\n\t>(envVars, \"telemetryConnector\", Object.values(TelemetryConnectorType));\n\tlet additionalConnectorCount = 0;\n\n\tfor (const telemetryConnectorType of telemetryConnectorTypes) {\n\t\tif (telemetryConnectorType === TelemetryConnectorType.Silent) {\n\t\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\t\ttype: TelemetryConnectorType.Silent\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (telemetryConnectorType === TelemetryConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\t\ttype: TelemetryConnectorType.EntityStorage,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tbatchSize: envCount(envVars, \"telemetryBatchSize\"),\n\t\t\t\t\t\tbatchIntervalMs: envSecToMs(envVars, \"telemetryBatchFlushInterval\"),\n\t\t\t\t\t\tmaxCacheSize: envCount(envVars, \"telemetryMaxCacheSize\"),\n\t\t\t\t\t\tflushTimeoutMs: envMs(envVars, \"telemetryFlushTimeout\"),\n\t\t\t\t\t\ttaskCoalesceMs: envMs(envVars, \"telemetryTaskCoalesce\"),\n\t\t\t\t\t\ttaskStallTimeoutMs: envMs(envVars, \"telemetryTaskStallTimeout\"),\n\t\t\t\t\t\tmetricDefinitionCacheCapacity: envCount(\n\t\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\t\"telemetryMetricDefinitionCacheCapacity\"\n\t\t\t\t\t\t),\n\t\t\t\t\t\tmetricDefinitionCacheTtiMs: envMs(envVars, \"telemetryMetricDefinitionCacheTtiMs\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (telemetryConnectorType === TelemetryConnectorType.OpenTelemetry) {\n\t\t\tlet readers: IOpenTelemetryTelemetryConnectorConfig[\"readers\"];\n\t\t\tif (envVars.openTelemetryReader === OpenTelemetryReaderTypes.Prometheus) {\n\t\t\t\treaders = {\n\t\t\t\t\tprometheus: {\n\t\t\t\t\t\ttype: OpenTelemetryReaderTypes.Prometheus,\n\t\t\t\t\t\tport: envCount(envVars, \"openTelemetryPrometheusPort\")\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\t\ttype: TelemetryConnectorType.OpenTelemetry,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tmeterName: envVars.openTelemetryMeterName,\n\t\t\t\t\t\tmeterVersion: envVars.openTelemetryMeterVersion,\n\t\t\t\t\t\treaders\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t}\n\t}\n\n\t// If more than one telemetry connector, then we need to add a multi connector\n\t// and set it as the default one\n\tif (additionalConnectorCount > 1) {\n\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\ttype: TelemetryConnectorType.Multi,\n\t\t\toptions: {\n\t\t\t\ttelemetryConnectorTypes\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\t} else if (additionalConnectorCount > 0) {\n\t\t// If only one connector, then we set it as the default one\n\t\tcoreConfig.types.telemetryConnector[coreConfig.types.telemetryConnector.length - 1].isDefault =\n\t\t\ttrue;\n\t}\n\n\tif (additionalConnectorCount > 0) {\n\t\tcoreConfig.types.telemetryComponent ??= [];\n\t\tcoreConfig.types.telemetryComponent.push({ type: TelemetryComponentType.Service });\n\t}\n}\n\n/**\n * Configures the metrics producers and orchestrator service.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the metrics collector configuration has been applied.\n */\nasync function configureMetricsCollector(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isTelemetryEnabled(envVars)) {\n\t\tcoreConfig.types.metricsCollectorComponent ??= [];\n\t\tcoreConfig.types.metricsCollectorComponent.push({\n\t\t\ttype: MetricsCollectorComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tintervalMs: envSecToMs(envVars, \"telemetryMetricsCollectorInterval\")\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloneMode: EngineCloneMode.Never\n\t\t});\n\n\t\tcoreConfig.types.metricsProducerComponent ??= [];\n\n\t\tconst metricsProducers = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tMetricsProducerComponentType\n\t\t>(envVars, \"telemetryMetricsProducers\", Object.values(MetricsProducerComponentType), [\n\t\t\tMetricsProducerComponentType.System,\n\t\t\tMetricsProducerComponentType.Process\n\t\t]);\n\n\t\tfor (const producerType of metricsProducers) {\n\t\t\tcoreConfig.types.metricsProducerComponent.push({\n\t\t\t\ttype: producerType,\n\t\t\t\toptions: { maxHistory: envCount(envVars, \"telemetryMetricsProducerMaxHistory\") },\n\t\t\t\tcloneMode: EngineCloneMode.Never\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Configures the tracing.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the tracing configuration has been applied.\n */\nasync function configureTracing(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.tracingConnector ??= [];\n\n\tconst tracingConnectorTypes = envListToArray<IEngineEnvironmentVariables, TracingConnectorType>(\n\t\tenvVars,\n\t\t\"tracingConnector\",\n\t\tObject.values(TracingConnectorType)\n\t);\n\tlet additionalConnectorCount = 0;\n\n\tfor (const tracingConnectorType of tracingConnectorTypes) {\n\t\tif (tracingConnectorType === TracingConnectorType.Silent) {\n\t\t\tcoreConfig.types.tracingConnector.push({\n\t\t\t\ttype: TracingConnectorType.Silent\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (tracingConnectorType === TracingConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.tracingConnector.push({\n\t\t\t\ttype: TracingConnectorType.EntityStorage\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (tracingConnectorType === TracingConnectorType.Console) {\n\t\t\tcoreConfig.types.tracingConnector.push({\n\t\t\t\ttype: TracingConnectorType.Console\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (tracingConnectorType === TracingConnectorType.OpenTelemetry) {\n\t\t\tconst otelTracingConfig: IOpenTelemetryTracingConnectorConfig = {\n\t\t\t\ttracerName: envVars.openTelemetryTracingTracerName,\n\t\t\t\ttracerVersion: envVars.openTelemetryTracingTracerVersion\n\t\t\t};\n\t\t\tif (Is.stringValue(envVars.openTelemetryTracingEndpoint)) {\n\t\t\t\totelTracingConfig.exporters = {\n\t\t\t\t\totlp: {\n\t\t\t\t\t\tendpoint: envVars.openTelemetryTracingEndpoint,\n\t\t\t\t\t\tprocessor:\n\t\t\t\t\t\t\t(envVars.openTelemetryTracingProcessor as OpenTelemetryProcessorTypes) ??\n\t\t\t\t\t\t\tOpenTelemetryProcessorTypes.Batch\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tcoreConfig.types.tracingConnector.push({\n\t\t\t\ttype: TracingConnectorType.OpenTelemetry,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: otelTracingConfig\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t}\n\t}\n\n\t// If more than one tracing connector, then we need to add a multi connector\n\t// and set it as the default one\n\tif (additionalConnectorCount > 1) {\n\t\tcoreConfig.types.tracingConnector.push({\n\t\t\ttype: TracingConnectorType.Multi,\n\t\t\toptions: {\n\t\t\t\ttracingConnectorTypes\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\t} else if (additionalConnectorCount > 0) {\n\t\t// If only one connector, then we set it as the default one\n\t\tcoreConfig.types.tracingConnector[coreConfig.types.tracingConnector.length - 1].isDefault =\n\t\t\ttrue;\n\t}\n\n\tif (additionalConnectorCount > 0) {\n\t\tcoreConfig.types.tracingComponent ??= [];\n\t\tcoreConfig.types.tracingComponent.push({ type: TracingComponentType.Service });\n\t}\n}\n\n/**\n * Configures the automation.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the automation configuration has been applied.\n */\nasync function configureAutomation(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.automationComponent ??= [];\n\n\tif (isAutomationRequired(envVars)) {\n\t\tcoreConfig.types.automationComponent.push({\n\t\t\ttype: AutomationComponentType.Service\n\t\t});\n\n\t\tconst automationActionTypes = envListToArray<IEngineEnvironmentVariables, AutomationActionType>(\n\t\t\tenvVars,\n\t\t\t\"automationActionTypes\",\n\t\t\tObject.values(AutomationActionType)\n\t\t);\n\n\t\tcoreConfig.types.automationAction ??= [];\n\n\t\tfor (const actionType of automationActionTypes) {\n\t\t\tcoreConfig.types.automationAction.push({\n\t\t\t\ttype: actionType,\n\t\t\t\tisMultiInstance: true\n\t\t\t} as unknown as AutomationActionConfig);\n\t\t}\n\t}\n}\n\n/**\n * Configures the health.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the health configuration has been applied.\n */\nasync function configureHealth(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.healthComponent ??= [];\n\n\tif (envBoolean(envVars, \"healthEnabled\", false)) {\n\t\tcoreConfig.types.healthComponent.push({\n\t\t\ttype: HealthComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thealthCheckInterval: envSecToMs(envVars, \"healthInterval\"),\n\t\t\t\t\thealthCheckApplicationInterval: envSecToMs(envVars, \"healthApplicationInterval\"),\n\t\t\t\t\tinitialInterval: envSecToMs(envVars, \"healthStartupInterval\"),\n\t\t\t\t\texcludeCloneComponents: envListToArray<IEngineEnvironmentVariables, string>(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"healthExcludeCloneComponents\",\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tDEFAULT_HEALTH_EXCLUDE_CLONE_COMPONENTS\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloneMode: EngineCloneMode.Never\n\t\t});\n\t}\n}\n\n/**\n * Configures the schema migration.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the schema migration configuration has been applied.\n */\nasync function configureSchemaMigration(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tconst isSchemaMigrationEnabled = envBoolean(envVars, \"schemaMigrationEnabled\", true);\n\n\tcoreConfig.types.schemaVersionMigrationComponent ??= [];\n\tcoreConfig.types.schemaVersionMigrationComponent.push({\n\t\ttype: SchemaVersionMigrationComponentType.Service,\n\t\toptions: { config: { enabled: isSchemaMigrationEnabled } },\n\t\tcloneMode: EngineCloneMode.Never\n\t});\n}\n\n/**\n * Configures the platform.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the platform configuration has been applied.\n */\nasync function configurePlatform(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tconst isTenantEnabled = envBoolean(envVars, \"tenantEnabled\", false);\n\n\tcoreConfig.types.platformComponent ??= [];\n\tcoreConfig.types.platformComponent.push({\n\t\ttype: PlatformComponentType.Service,\n\t\toptions: {\n\t\t\tconfig: {\n\t\t\t\tisMultiTenant: isTenantEnabled\n\t\t\t}\n\t\t},\n\t\tcloneMode: EngineCloneMode.Always\n\t});\n}\n\n/**\n * Configures the tenant.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the tenant configuration has been applied.\n */\nasync function configureTenant(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tconst isTenantEnabled = envBoolean(envVars, \"tenantEnabled\", false);\n\n\tif (isTenantEnabled) {\n\t\tcoreConfig.types.tenantAdminComponent ??= [];\n\t\tcoreConfig.types.tenantAdminComponent.push({\n\t\t\ttype: TenantAdminComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the context ID handlers.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the context ID handler configuration has been applied.\n */\nasync function configureContextIdHandlers(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.contextIdHandlerComponent ??= [];\n\tcoreConfig.types.contextIdHandlerComponent.push({\n\t\ttype: ContextIdHandlerComponentType.Did,\n\t\tfeatures: [CONTEXT_ID_HANDLER_FEATURE_DID],\n\t\tcloneMode: EngineCloneMode.Always\n\t});\n\tif (envBoolean(envVars, \"tenantEnabled\", false)) {\n\t\tcoreConfig.types.contextIdHandlerComponent.push({\n\t\t\ttype: ContextIdHandlerComponentType.Tenant,\n\t\t\tfeatures: [CONTEXT_ID_HANDLER_FEATURE_TENANT],\n\t\t\tcloneMode: EngineCloneMode.Always\n\t\t});\n\t}\n}\n\n/**\n * Configures the messaging.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the messaging configuration has been applied.\n */\nasync function configureMessaging(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.messagingEmailConnector ??= [];\n\tcoreConfig.types.messagingSmsConnector ??= [];\n\tcoreConfig.types.messagingPushNotificationConnector ??= [];\n\n\tconst messagingEmailConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tMessagingEmailConnectorType\n\t>(envVars, \"messagingEmailConnector\", Object.values(MessagingEmailConnectorType));\n\n\tif (messagingEmailConnectorType === MessagingEmailConnectorType.EntityStorage) {\n\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\ttype: MessagingEmailConnectorType.EntityStorage\n\t\t});\n\t} else if (messagingEmailConnectorType === MessagingEmailConnectorType.Aws) {\n\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\ttype: MessagingEmailConnectorType.Aws,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsSesEndpoint\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (messagingEmailConnectorType === MessagingEmailConnectorType.Smtp) {\n\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\ttype: MessagingEmailConnectorType.Smtp,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thost: envVars.smtpHost ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"smtpPort\"),\n\t\t\t\t\tsecure: envBoolean(envVars, \"smtpSecure\"),\n\t\t\t\t\tusername: envVars.smtpUsername,\n\t\t\t\t\tpassword: envVars.smtpPassword\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tconst messagingSmsConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tMessagingSmsConnectorType\n\t>(envVars, \"messagingSmsConnector\", Object.values(MessagingSmsConnectorType));\n\n\tif (messagingSmsConnectorType === MessagingSmsConnectorType.EntityStorage) {\n\t\tcoreConfig.types.messagingSmsConnector.push({\n\t\t\ttype: MessagingSmsConnectorType.EntityStorage\n\t\t});\n\t} else if (messagingSmsConnectorType === MessagingSmsConnectorType.Aws) {\n\t\tcoreConfig.types.messagingSmsConnector.push({\n\t\t\ttype: MessagingSmsConnectorType.Aws,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsSesEndpoint\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tconst messagingPushConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tMessagingPushNotificationConnectorType\n\t>(\n\t\tenvVars,\n\t\t\"messagingPushNotificationConnector\",\n\t\tObject.values(MessagingPushNotificationConnectorType)\n\t);\n\n\tif (messagingPushConnectorType === MessagingPushNotificationConnectorType.EntityStorage) {\n\t\tcoreConfig.types.messagingPushNotificationConnector.push({\n\t\t\ttype: MessagingPushNotificationConnectorType.EntityStorage\n\t\t});\n\t} else if (messagingPushConnectorType === MessagingPushNotificationConnectorType.Aws) {\n\t\tcoreConfig.types.messagingPushNotificationConnector.push({\n\t\t\ttype: MessagingPushNotificationConnectorType.Aws,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsSesEndpoint,\n\t\t\t\t\tapplicationsSettings: envArray(envVars, \"awsMessagingPushNotificationApplications\", [])\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// If any messaging connectors are configured, then we should configure the messaging admin and\n\t// service components as well since they are required for the messaging connectors to work.\n\tif (\n\t\tcoreConfig.types.messagingEmailConnector.length > 0 ||\n\t\tcoreConfig.types.messagingSmsConnector.length > 0 ||\n\t\tcoreConfig.types.messagingPushNotificationConnector.length > 0\n\t) {\n\t\tcoreConfig.types.messagingAdminComponent ??= [];\n\t\tcoreConfig.types.messagingAdminComponent.push({\n\t\t\ttype: MessagingAdminComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.messagingComponent ??= [];\n\t\tcoreConfig.types.messagingComponent.push({ type: MessagingComponentType.Service });\n\t}\n}\n\n/**\n * Configures mailbox components, mail storage components, and email protocol connectors.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the mailbox configuration has been applied.\n */\nasync function configureMailbox(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.emailProtocolConnector ??= [];\n\n\tconst emailProtocolConnectorTypes = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tEmailProtocolConnectorType\n\t>(envVars, \"emailProtocolConnector\", Object.values(EmailProtocolConnectorType));\n\tfor (const emailProtocolConnectorType of emailProtocolConnectorTypes) {\n\t\tcoreConfig.types.emailProtocolConnector.push({\n\t\t\ttype: emailProtocolConnectorType,\n\t\t\toptions: {\n\t\t\t\tconfig: {} as never\n\t\t\t},\n\t\t\tcloneMode: EngineCloneMode.Never,\n\t\t\tisMultiInstance: true\n\t\t});\n\t}\n\n\t// If email protocol connectors are configured, then we should configure the mailbox and mail store\n\t// components as well, since they are required for the email protocol connectors to work.\n\tif (coreConfig.types.emailProtocolConnector.length > 0) {\n\t\tcoreConfig.types.mailStorageComponent ??= [];\n\t\tcoreConfig.types.mailStorageComponent.push({\n\t\t\ttype: MailStorageComponentType.Service,\n\t\t\tcloneMode: EngineCloneMode.Never\n\t\t});\n\n\t\tcoreConfig.types.mailboxComponent ??= [];\n\t\tcoreConfig.types.mailboxComponent.push({\n\t\t\ttype: MailboxComponentType.Service,\n\t\t\tcloneMode: EngineCloneMode.Never\n\t\t});\n\t}\n}\n\n/**\n * Configures the faucet.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the faucet configuration has been applied.\n */\nasync function configureFaucet(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.faucetConnector ??= [];\n\n\tconst faucetConnectorType = envChoice<IEngineEnvironmentVariables, FaucetConnectorType>(\n\t\tenvVars,\n\t\t\"faucetConnector\",\n\t\tObject.values(FaucetConnectorType)\n\t);\n\n\tif (faucetConnectorType === FaucetConnectorType.EntityStorage) {\n\t\tcoreConfig.types.faucetConnector.push({\n\t\t\ttype: FaucetConnectorType.EntityStorage\n\t\t});\n\t} else if (\n\t\tfaucetConnectorType === FaucetConnectorType.Iota &&\n\t\tIs.stringValue(envVars.iotaFaucetEndpoint)\n\t) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.faucetConnector.push({\n\t\t\ttype: FaucetConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tendpoint: envVars.iotaFaucetEndpoint,\n\t\t\t\t\tclientOptions: dltConfig?.options?.config?.clientOptions ?? { url: \"\" },\n\t\t\t\t\tnetwork: dltConfig?.options?.config?.network ?? \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the wallet.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the wallet configuration has been applied.\n */\nasync function configureWallet(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.walletConnector ??= [];\n\n\tconst walletConnectorType = envChoice<IEngineEnvironmentVariables, WalletConnectorType>(\n\t\tenvVars,\n\t\t\"walletConnector\",\n\t\tObject.values(WalletConnectorType)\n\t);\n\n\tif (walletConnectorType === WalletConnectorType.EntityStorage) {\n\t\tcoreConfig.types.walletConnector.push({\n\t\t\ttype: WalletConnectorType.EntityStorage\n\t\t});\n\t} else if (walletConnectorType === WalletConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.walletConnector.push({\n\t\t\ttype: WalletConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: dltConfig?.options?.config ?? ({} as IIotaConfig)\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the NFT.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the NFT configuration has been applied.\n */\nasync function configureNft(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.nftConnector ??= [];\n\n\tconst nftConnectorType = envChoice<IEngineEnvironmentVariables, NftConnectorType>(\n\t\tenvVars,\n\t\t\"nftConnector\",\n\t\tObject.values(NftConnectorType)\n\t);\n\n\tif (nftConnectorType === NftConnectorType.EntityStorage) {\n\t\tcoreConfig.types.nftConnector.push({\n\t\t\ttype: NftConnectorType.EntityStorage\n\t\t});\n\t} else if (nftConnectorType === NftConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tconst config = {\n\t\t\t...(dltConfig?.options?.config as IIotaConfig),\n\t\t\tdeploymentPkgId: Is.stringValue(envVars.nftPackageId) ? envVars.nftPackageId : undefined\n\t\t};\n\t\tcoreConfig.types.nftConnector.push({\n\t\t\ttype: NftConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.nftConnector.length > 0) {\n\t\tcoreConfig.types.nftComponent ??= [];\n\t\tcoreConfig.types.nftComponent.push({ type: NftComponentType.Service });\n\t}\n}\n\n/**\n * Configures the notarization.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the notarization configuration has been applied.\n */\nasync function configureNotarization(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.notarizationConnector ??= [];\n\n\tconst notarizationConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tNotarizationConnectorType\n\t>(envVars, \"notarizationConnector\", Object.values(NotarizationConnectorType));\n\n\tif (notarizationConnectorType === NotarizationConnectorType.EntityStorage) {\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.EntityStorage\n\t\t});\n\t} else if (notarizationConnectorType === NotarizationConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: dltConfig?.options?.config ?? ({} as IIotaConfig)\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.notarizationConnector.length > 0) {\n\t\tcoreConfig.types.notarizationComponent ??= [];\n\t\tcoreConfig.types.notarizationComponent.push({ type: NotarizationComponentType.Service });\n\t}\n}\n\n/**\n * Configures the immutable proof.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the immutable proof configuration has been applied.\n */\nasync function configureImmutableProof(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isImmutableProofRequired(envVars)) {\n\t\tcoreConfig.types.immutableProofComponent ??= [];\n\t\tcoreConfig.types.immutableProofComponent.push({\n\t\t\ttype: ImmutableProofComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverificationMethodId: envVars.immutableProofVerificationMethodId,\n\t\t\t\t\ttaskRetryCount: envCount(envVars, \"immutableProofTaskRetryCount\"),\n\t\t\t\t\ttaskRetryInterval: envSecToMs(envVars, \"immutableProofTaskRetryInterval\"),\n\t\t\t\t\ttaskFailureRetainFor: envMinToMs(envVars, \"immutableProofTaskFailureRetainFor\"),\n\t\t\t\t\ttaskWorkerIdleTimeout: envSecToMs(envVars, \"immutableProofTaskWorkerIdleTimeout\"),\n\t\t\t\t\tsweepIntervalMinutes: envMinutes(envVars, \"immutableProofSweepInterval\"),\n\t\t\t\t\tsweepStaleThresholdMs: envMinToMs(envVars, \"immutableProofSweepStaleThreshold\"),\n\t\t\t\t\tsweepMaxAttempts: envCount(envVars, \"immutableProofSweepMaxAttempts\"),\n\t\t\t\t\tsweepBatchLimit: envCount(envVars, \"immutableProofSweepBatchLimit\"),\n\t\t\t\t\tsweepBackoffMs: envMinToMs(envVars, \"immutableProofSweepBackoff\"),\n\t\t\t\t\tsweepAssumeRetryableBefore: envDateTime(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"immutableProofSweepAssumeRetryableBefore\"\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the identity.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the identity configuration has been applied.\n */\nasync function configureIdentity(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.identityConnector ??= [];\n\n\tconst identityConnectorType = envChoice<IEngineEnvironmentVariables, IdentityConnectorType>(\n\t\tenvVars,\n\t\t\"identityConnector\",\n\t\tObject.values(IdentityConnectorType)\n\t);\n\n\tif (identityConnectorType === IdentityConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityConnector.push({\n\t\t\ttype: IdentityConnectorType.EntityStorage\n\t\t});\n\t} else if (identityConnectorType === IdentityConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.identityConnector.push({\n\t\t\ttype: IdentityConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\t...(dltConfig?.options?.config ?? ({} as IIotaConfig)),\n\t\t\t\t\tidentityPkgId: Is.stringValue(envVars.iotaIdentityPackageId)\n\t\t\t\t\t\t? envVars.iotaIdentityPackageId\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\twalletAddressIndex: envCount(envVars, \"identityWalletAddressIndex\") ?? 0,\n\t\t\t\t\tdidResolutionCacheTtlMs: envMs(envVars, \"identityDidResolutionCacheTtl\"),\n\t\t\t\t\tdidResolutionCacheCapacity: envCount(envVars, \"identityDidResolutionCacheCapacity\"),\n\t\t\t\t\tdidResolutionCacheMutexTimeoutMs: envMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"identityDidResolutionCacheMutexTimeout\"\n\t\t\t\t\t),\n\t\t\t\t\tdidResolutionRetries: envCount(envVars, \"identityDidResolutionRetries\"),\n\t\t\t\t\tdidResolutionRetryDelayMs: envMs(envVars, \"identityDidResolutionRetryDelay\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.identityConnector.length > 0) {\n\t\tcoreConfig.types.identityComponent ??= [];\n\t\tcoreConfig.types.identityComponent.push({ type: IdentityComponentType.Service });\n\t}\n}\n\n/**\n * Configures the identity resolver.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the identity resolver configuration has been applied.\n */\nasync function configureIdentityResolver(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.identityResolverConnector ??= [];\n\n\tconst identityResolverConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tIdentityResolverConnectorType\n\t>(envVars, \"identityResolverConnector\", Object.values(IdentityResolverConnectorType));\n\n\tif (identityResolverConnectorType === IdentityResolverConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityResolverConnector.push({\n\t\t\ttype: IdentityResolverConnectorType.EntityStorage\n\t\t});\n\t} else if (identityResolverConnectorType === IdentityResolverConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.identityResolverConnector.push({\n\t\t\ttype: IdentityResolverConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\t...(dltConfig?.options?.config as IIotaConfig),\n\t\t\t\t\tidentityPkgId: Is.stringValue(envVars.iotaIdentityPackageId)\n\t\t\t\t\t\t? envVars.iotaIdentityPackageId\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (identityResolverConnectorType === IdentityResolverConnectorType.Universal) {\n\t\tcoreConfig.types.identityResolverConnector.push({\n\t\t\ttype: IdentityResolverConnectorType.Universal,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tendpoint: envVars.universalResolverEndpoint ?? \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.identityResolverConnector.length > 0) {\n\t\tcoreConfig.types.identityResolverComponent ??= [];\n\t\tcoreConfig.types.identityResolverComponent.push({\n\t\t\ttype: IdentityResolverComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the identity profile.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the identity profile configuration has been applied.\n */\nasync function configureIdentityProfile(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.identityProfileConnector ??= [];\n\n\tconst identityProfileConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tIdentityProfileConnectorType\n\t>(envVars, \"identityProfileConnector\", Object.values(IdentityProfileConnectorType));\n\n\tif (identityProfileConnectorType === IdentityProfileConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityProfileConnector.push({\n\t\t\ttype: IdentityProfileConnectorType.EntityStorage\n\t\t});\n\t}\n\n\tif (coreConfig.types.identityProfileConnector.length > 0) {\n\t\tcoreConfig.types.identityProfileComponent ??= [];\n\t\tcoreConfig.types.identityProfileComponent.push({ type: IdentityProfileComponentType.Service });\n\t}\n}\n\n/**\n * Configures the attestation.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the attestation configuration has been applied.\n */\nasync function configureAttestation(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.attestationConnector ??= [];\n\n\tconst attestationConnectorType = envChoice<IEngineEnvironmentVariables, AttestationConnectorType>(\n\t\tenvVars,\n\t\t\"attestationConnector\",\n\t\tObject.values(AttestationConnectorType)\n\t);\n\n\tif (attestationConnectorType === AttestationConnectorType.Nft) {\n\t\tcoreConfig.types.attestationConnector.push({\n\t\t\ttype: AttestationConnectorType.Nft\n\t\t});\n\t}\n\n\tif (coreConfig.types.attestationConnector.length > 0) {\n\t\tcoreConfig.types.attestationComponent ??= [];\n\t\tcoreConfig.types.attestationComponent.push({\n\t\t\ttype: AttestationComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverificationMethodId: envVars.attestationVerificationMethodId\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the auditable item graph.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the auditable item graph configuration has been applied.\n */\nasync function configureAuditableItemGraph(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (envBoolean(envVars, \"auditableItemGraphEnabled\", false)) {\n\t\tcoreConfig.types.auditableItemGraphComponent ??= [];\n\t\tcoreConfig.types.auditableItemGraphComponent.push({\n\t\t\ttype: AuditableItemGraphComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"auditableItemGraphMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the auditable item stream.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the auditable item stream configuration has been applied.\n */\nasync function configureAuditableItemStream(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (envBoolean(envVars, \"auditableItemStreamEnabled\", false)) {\n\t\tcoreConfig.types.auditableItemStreamComponent ??= [];\n\t\tcoreConfig.types.auditableItemStreamComponent.push({\n\t\t\ttype: AuditableItemStreamComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"auditableItemStreamMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the data processing.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the data processing configuration has been applied.\n */\nasync function configureDataProcessing(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.dataConverterConnector ??= [];\n\n\tconst converterConnectors = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tDataConverterConnectorType\n\t>(envVars, \"dataConverterConnectors\", Object.values(DataConverterConnectorType));\n\tfor (const converterConnector of converterConnectors) {\n\t\tcoreConfig.types.dataConverterConnector.push({\n\t\t\ttype: converterConnector\n\t\t});\n\t}\n\n\tcoreConfig.types.dataExtractorConnector ??= [];\n\tconst extractorConnectors = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tDataExtractorConnectorType\n\t>(envVars, \"dataExtractorConnectors\", Object.values(DataExtractorConnectorType));\n\tfor (const extractorConnector of extractorConnectors) {\n\t\tcoreConfig.types.dataExtractorConnector.push({\n\t\t\ttype: extractorConnector\n\t\t});\n\t}\n\n\tif (\n\t\tcoreConfig.types.dataConverterConnector.length > 0 ||\n\t\tcoreConfig.types.dataExtractorConnector.length > 0\n\t) {\n\t\tcoreConfig.types.dataProcessingComponent ??= [];\n\t\tcoreConfig.types.dataProcessingComponent.push({ type: DataProcessingComponentType.Service });\n\t}\n}\n\n/**\n * Configures the document management.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the document management configuration has been applied.\n */\nasync function configureDocumentManagement(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (envBoolean(envVars, \"documentManagementEnabled\", false)) {\n\t\tcoreConfig.types.documentManagementComponent ??= [];\n\t\tcoreConfig.types.documentManagementComponent.push({\n\t\t\ttype: DocumentManagementComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"documentManagementMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the trust components.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the trust configuration has been applied.\n */\nasync function configureTrust(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isTrustRequired(envVars)) {\n\t\tcoreConfig.types.trustComponent ??= [];\n\t\tcoreConfig.types.trustComponent.push({\n\t\t\ttype: TrustComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.trustGeneratorComponent ??= [];\n\t\tconst trustGeneratorTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tTrustGeneratorComponentType\n\t\t>(envVars, \"trustGenerators\", Object.values(TrustGeneratorComponentType));\n\n\t\tfor (const trustGeneratorType of trustGeneratorTypes) {\n\t\t\tcoreConfig.types.trustGeneratorComponent.push({\n\t\t\t\ttype: trustGeneratorType,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tverificationMethodId: envVars.trustVerificationMethodId ?? \"\",\n\t\t\t\t\t\ttokenTtlInSeconds: envCount(envVars, \"trustJwtTtl\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.trustVerifierComponent ??= [];\n\t\tconst trustVerifierTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tTrustVerifierComponentType\n\t\t>(envVars, \"trustVerifiers\", Object.values(TrustVerifierComponentType));\n\t\tfor (const trustVerifierType of trustVerifierTypes) {\n\t\t\tif (trustVerifierType === TrustVerifierComponentType.IdentityAllowDeny) {\n\t\t\t\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\t\ttype: TrustVerifierComponentType.IdentityAllowDeny,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tallowIdentities: commaSeparatedListToArray<string>(envVars.trustIdentitiesAllow),\n\t\t\t\t\t\t\tdenyIdentities: commaSeparatedListToArray<string>(envVars.trustIdentitiesDeny)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (trustVerifierType === TrustVerifierComponentType.JwtVerifiableCredential) {\n\t\t\t\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\t\ttype: TrustVerifierComponentType.JwtVerifiableCredential\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Configures the rights management.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the rights management configuration has been applied.\n */\nasync function configureRightsManagement(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isRightsManagementRequired(envVars)) {\n\t\tcoreConfig.types.rightsManagementPapComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPapComponent.push({\n\t\t\ttype: RightsManagementPapComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPmpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPmpComponent.push({\n\t\t\ttype: RightsManagementPmpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPipComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPipComponent.push({\n\t\t\ttype: RightsManagementPipComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPxpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPxpComponent.push({\n\t\t\ttype: RightsManagementPxpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPdpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPdpComponent.push({\n\t\t\ttype: RightsManagementPdpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPepComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPepComponent.push({\n\t\t\ttype: RightsManagementPepComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPnpComponent ??= [];\n\n\t\t// Single source of truth for the rights-management mount path.\n\t\tconst rightsManagementPath = envVars.rightsManagementCallbackPath ?? \"rights-management\";\n\n\t\t// We add a multi instance REST client for the remote negotiations\n\t\t// use a dummy endpoint for now as the actual endpoint will be provided in the config\n\t\t// of the policy negotiator when it is used for remote negotiations\n\t\t// We must add it before the service as the service needs to be able to request\n\t\t// the REST client type from the engine core to be able to support remote negotiations\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.RestClient,\n\t\t\toptions: {\n\t\t\t\t// The endpoint is required in config, but as this is multi-instance\n\t\t\t\t// the actual endpoint will be provided in the config when it is constructed\n\t\t\t\tendpoint: \"http://localhost\",\n\t\t\t\tpathPrefix: rightsManagementPath\n\t\t\t},\n\t\t\tisMultiInstance: true,\n\t\t\tfeatures: [\"remote\"]\n\t\t});\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tcallbackPath: rightsManagementPath,\n\t\t\t\t\tincludeErrorDetails: coreConfig.debug ?? false,\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"rightsManagementMutexTimeout\")\n\t\t\t\t}\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPnapComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPnapComponent.push({\n\t\t\ttype: RightsManagementPnapComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"rightsManagementMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPolicyArbiterComponent ??= [];\n\t\tconst policyArbiterTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyArbiterComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyArbiters\",\n\t\t\tObject.values(RightsManagementPolicyArbiterComponentType)\n\t\t);\n\t\tfor (const policyArbiterType of policyArbiterTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyArbiterComponent.push({\n\t\t\t\ttype: policyArbiterType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyObligationEnforcerComponent ??= [];\n\t\tconst policyObligationEnforcerTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyObligationEnforcerComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyObligationEnforcers\",\n\t\t\tObject.values(RightsManagementPolicyObligationEnforcerComponentType)\n\t\t);\n\t\tfor (const policyObligationEnforcerType of policyObligationEnforcerTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyObligationEnforcerComponent.push({\n\t\t\t\ttype: policyObligationEnforcerType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyEnforcementProcessorComponent ??= [];\n\t\tconst policyEnforcementProcessTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyEnforcementProcessorComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyEnforcementProcessors\",\n\t\t\tObject.values(RightsManagementPolicyEnforcementProcessorComponentType)\n\t\t);\n\t\tfor (const policyEnforcementProcessorType of policyEnforcementProcessTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyEnforcementProcessorComponent.push({\n\t\t\t\ttype: policyEnforcementProcessorType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyExecutionActionComponent ??= [];\n\t\tconst policyExecutionActionTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyExecutionActionComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyExecutionActions\",\n\t\t\tObject.values(RightsManagementPolicyExecutionActionComponentType)\n\t\t);\n\t\tfor (const policyExecutionActionType of policyExecutionActionTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyExecutionActionComponent.push({\n\t\t\t\ttype: policyExecutionActionType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyInformationSourceComponent ??= [];\n\t\tconst policyInformationSourceTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyInformationSourceComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyInformationSources\",\n\t\t\tObject.values(RightsManagementPolicyInformationSourceComponentType)\n\t\t);\n\t\tfor (const policyInformationSourceType of policyInformationSourceTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyInformationSourceComponent.push({\n\t\t\t\ttype: policyInformationSourceType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyRequesterComponent ??= [];\n\t\tconst policyRequesterTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyRequesterComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyRequesters\",\n\t\t\tObject.values(RightsManagementPolicyRequesterComponentType)\n\t\t);\n\t\tfor (const policyRequesterType of policyRequesterTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyRequesterComponent.push({\n\t\t\t\ttype: policyRequesterType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyNegotiatorComponent ??= [];\n\t\tconst policyNegotiatorTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyNegotiatorComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyNegotiators\",\n\t\t\tObject.values(RightsManagementPolicyNegotiatorComponentType)\n\t\t);\n\t\tfor (const policyNegotiatorType of policyNegotiatorTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyNegotiatorComponent.push({\n\t\t\t\ttype: policyNegotiatorType\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Configures the task scheduler.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the task scheduler configuration has been applied.\n */\nasync function configureTaskScheduler(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isTaskSchedulerRequired(envVars)) {\n\t\tcoreConfig.types.taskSchedulerComponent ??= [];\n\t\tcoreConfig.types.taskSchedulerComponent.push({\n\t\t\ttype: TaskSchedulerComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the federated catalogue.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the federated catalogue configuration has been applied.\n */\nasync function configureFederatedCatalogue(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isFederatedCatalogueRequired(envVars)) {\n\t\tcoreConfig.types.federatedCatalogueComponent ??= [];\n\n\t\tif (Is.stringValue(envVars.federatedCatalogueRemoteEndpoint)) {\n\t\t\tcoreConfig.types.federatedCatalogueComponent.push({\n\t\t\t\ttype: FederatedCatalogueComponentType.RestClient,\n\t\t\t\toptions: {\n\t\t\t\t\tendpoint: envVars.federatedCatalogueRemoteEndpoint,\n\t\t\t\t\tpathPrefix: envVars.federatedCatalogueRestClientPathPrefix ?? \"catalog\"\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tcoreConfig.types.federatedCatalogueComponent.push({\n\t\t\t\ttype: FederatedCatalogueComponentType.Service,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"federatedCatalogueMutexTimeout\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcoreConfig.types.federatedCatalogueFilterComponent ??= [];\n\t\t\tconst filters = envListToArray<\n\t\t\t\tIEngineEnvironmentVariables,\n\t\t\t\tFederatedCatalogueFilterComponentType\n\t\t\t>(envVars, \"federatedCatalogueFilters\", Object.values(FederatedCatalogueFilterComponentType));\n\n\t\t\tfor (const filter of filters) {\n\t\t\t\tcoreConfig.types.federatedCatalogueFilterComponent.push({\n\t\t\t\t\ttype: filter,\n\t\t\t\t\toptions: {}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Configures the dataspace control plane and data plane.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the dataspace configuration has been applied.\n */\nasync function configureDataspace(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (envBoolean(envVars, \"dataspaceEnabled\", false)) {\n\t\tcoreConfig.types.dataspaceControlPlaneComponent ??= [];\n\t\t// We add a multi instance REST client for remote/consumer-initiated transfers.\n\t\tcoreConfig.types.dataspaceControlPlaneComponent.push({\n\t\t\ttype: DataspaceControlPlaneComponentType.RestClient,\n\t\t\toptions: {\n\t\t\t\tendpoint: \"http://localhost\"\n\t\t\t},\n\t\t\tisMultiInstance: true,\n\t\t\tfeatures: [\"remote\"]\n\t\t});\n\t\tcoreConfig.types.dataspaceControlPlaneComponent.push({\n\t\t\ttype: DataspaceControlPlaneComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\t// Must match the control-plane REST mount, as it is combined with the public origin\n\t\t\t\t\t// to build the consumer's advertised callback address;\n\t\t\t\t\tcallbackPath: envVars.dataspaceCallbackPath ?? \"dataspace-control-plane\",\n\t\t\t\t\t// Base mount path of the data plane only; the transfer handlers append the\n\t\t\t\t\t// sub-paths themselves (`/entities` for PULL, `/inbox` for PUSH).\n\t\t\t\t\tdataPlanePath: envVars.dataspaceDataPlanePath,\n\t\t\t\t\tautoStartTransfers: envBoolean(envVars, \"dataspaceAutoStartTransfers\", false),\n\t\t\t\t\tstalledNegotiationTimeoutMs: envSecToMs(envVars, \"dataspaceStalledNegotiationTimeout\"),\n\t\t\t\t\tstalledTransferTimeoutMs: envSecToMs(envVars, \"dataspaceStalledTransferTimeout\"),\n\t\t\t\t\tproviderTransferIdleTimeoutMs: envSecToMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"dataspaceProviderTransferIdleTimeout\"\n\t\t\t\t\t),\n\t\t\t\t\tproviderTransferPolicySweepIntervalMs: envSecToMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"dataspaceProviderTransferPolicySweepInterval\"\n\t\t\t\t\t),\n\t\t\t\t\tagreementUnusedThresholdMs: envMs(envVars, \"dataspaceAgreementUnusedThreshold\"),\n\t\t\t\t\tagreementSweepIntervalMs: envMs(envVars, \"dataspaceAgreementSweepInterval\")\n\t\t\t\t}\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\n\t\tcoreConfig.types.dataspaceDataPlaneComponent ??= [];\n\t\tcoreConfig.types.dataspaceDataPlaneComponent.push({\n\t\t\ttype: DataspaceDataPlaneComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tretainActivityLogsForMs: envSecToMs(envVars, \"dataspaceRetainActivityLogsFor\"),\n\t\t\t\t\tactivityLogsCleanUpIntervalMs: envSecToMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"dataspaceActivityLogsCleanupInterval\"\n\t\t\t\t\t),\n\t\t\t\t\tretryCount: envCount(envVars, \"dataspaceRetryCount\"),\n\t\t\t\t\tpushRetryCount: envCount(envVars, \"dataspacePushRetryCount\"),\n\t\t\t\t\tpushRetryBaseDelayMs: envMs(envVars, \"dataspacePushRetryBaseDelay\"),\n\t\t\t\t\tpushTimeoutMs: envMs(envVars, \"dataspacePushTimeout\"),\n\t\t\t\t\tpushSubscriptionCleanupIntervalMs: envMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"dataspacePushSubscriptionCleanupInterval\"\n\t\t\t\t\t),\n\t\t\t\t\tagreementCacheTtlMs: envMs(envVars, \"dataspaceAgreementCacheTtl\"),\n\t\t\t\t\tagreementCacheMutexTimeoutMs: envMs(envVars, \"dataspaceAgreementCacheMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the DLT.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the DLT configuration has been applied.\n */\nasync function configureDlt(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\t// Create centralized DLT configuration for IOTA if essential IOTA variables are set\n\tif (Is.stringValue(envVars.iotaNodeEndpoint) && Is.stringValue(envVars.iotaNetwork)) {\n\t\tcoreConfig.types.dltConfig ??= [];\n\n\t\tconst gasStationConfig =\n\t\t\tIs.stringValue(envVars.iotaGasStationEndpoint) &&\n\t\t\tIs.stringValue(envVars.iotaGasStationAuthToken)\n\t\t\t\t? {\n\t\t\t\t\t\tgasStationUrl: envVars.iotaGasStationEndpoint,\n\t\t\t\t\t\tgasStationAuthToken: envVars.iotaGasStationAuthToken\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tcoreConfig.types.dltConfig.push({\n\t\t\ttype: DltConfigType.Iota,\n\t\t\tisDefault: true,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tclientOptions: {\n\t\t\t\t\t\turl: envVars.iotaNodeEndpoint ?? \"\"\n\t\t\t\t\t},\n\t\t\t\t\tnetwork: envVars.iotaNetwork ?? \"\",\n\t\t\t\t\tcoinType: envCount(envVars, \"iotaCoinType\"),\n\t\t\t\t\tgasStation: gasStationConfig,\n\t\t\t\t\tgasBudget: envCount(envVars, \"iotaGasBudget\"),\n\t\t\t\t\tgasReservationDuration: envSeconds(envVars, \"iotaGasReservationDuration\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Checks if the trust subsystem is required.\n * Returns true when any component that depends on the trust subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if rights-management, or dataspace is enabled.\n */\nexport function isTrustRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tisRightsManagementRequired(envVars) ||\n\t\tenvBoolean(envVars, \"dataspaceEnabled\", false) ||\n\t\tisFederatedCatalogueRequired(envVars)\n\t);\n}\n\n/**\n * Checks if the background tasks subsystem is required.\n * Returns true when any component that depends on the background tasks subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if dataspace or verifiable storage is enabled.\n */\nexport function isBackgroundTasksRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvBoolean(envVars, \"dataspaceEnabled\", false) ||\n\t\tisImmutableProofRequired(envVars) ||\n\t\tenvBoolean(envVars, \"healthEnabled\", false) ||\n\t\tcommaSeparatedListToArray<TelemetryConnectorType>(envVars.telemetryConnector).includes(\n\t\t\tTelemetryConnectorType.EntityStorage\n\t\t)\n\t);\n}\n\n/**\n * Checks if the immutable proof subsystem is required.\n * Returns true when any component that depends on the immutable proof subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if verifiable storage is enabled.\n */\nexport function isImmutableProofRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvBoolean(envVars, \"auditableItemGraphEnabled\", false) ||\n\t\tenvBoolean(envVars, \"auditableItemStreamEnabled\", false) ||\n\t\tenvBoolean(envVars, \"documentManagementEnabled\", false)\n\t);\n}\n\n/**\n * Checks if the federated catalogue subsystem is required.\n * Returns true when the catalogue is explicitly enabled, a remote endpoint is configured, filters are set, or dataspace is enabled.\n * @param envVars The environment variables.\n * @returns True if the federated catalogue is required.\n */\nexport function isFederatedCatalogueRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvBoolean(envVars, \"federatedCatalogueEnabled\", false) ||\n\t\tIs.stringValue(envVars.federatedCatalogueRemoteEndpoint) ||\n\t\tIs.stringValue(envVars.federatedCatalogueFilters) ||\n\t\tenvBoolean(envVars, \"dataspaceEnabled\", false)\n\t);\n}\n\n/**\n * Checks if the rights management subsystem is required.\n * Returns true when any component that depends on the rights management subsystem is enabled.\n * Note: rights management has no standalone enable flag - it is gated entirely on\n * `dataspaceEnabled`. Setting `TWIN_RIGHTS_MANAGEMENT_*` env var in isolation does not\n * enable the subsystem; `TWIN_DATASPACE_ENABLED` must also be true.\n * @param envVars The environment variables.\n * @returns True if rights management is enabled.\n */\nexport function isRightsManagementRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn envBoolean(envVars, \"dataspaceEnabled\", false);\n}\n\n/**\n * Checks if the task scheduler subsystem is required.\n * Returns true when any component that depends on the task scheduler subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if task scheduler is enabled.\n */\nexport function isTaskSchedulerRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvBoolean(envVars, \"taskSchedulerEnabled\", false) ||\n\t\tenvBoolean(envVars, \"dataspaceEnabled\", false) ||\n\t\tisRightsManagementRequired(envVars) ||\n\t\tisAuthEntityStorageRequired(envVars) ||\n\t\tisImmutableProofRequired(envVars) ||\n\t\tisMailboxEnabled(envVars)\n\t);\n}\n\n/**\n * Checks if the automation subsystem is required.\n * Returns true when any component that depends on the automation subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if automation is enabled.\n */\nexport function isAutomationRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn isRightsManagementRequired(envVars);\n}\n\n/**\n * Checks if the telemetry subsystem is enabled.\n * Returns true when any component that depends on the telemetry subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if telemetry is enabled.\n */\nexport function isTelemetryEnabled(envVars: IEngineEnvironmentVariables): boolean {\n\treturn commaSeparatedListToArray<TelemetryConnectorType>(envVars.telemetryConnector).some(\n\t\tt => t === TelemetryConnectorType.EntityStorage || t === TelemetryConnectorType.OpenTelemetry\n\t);\n}\n\n/**\n * Checks if the tracing subsystem is enabled.\n * Returns true when any component that depends on the tracing subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if tracing is enabled.\n */\nexport function isTracingEnabled(envVars: IEngineEnvironmentVariables): boolean {\n\treturn commaSeparatedListToArray<TracingConnectorType>(envVars.tracingConnector).some(\n\t\tt =>\n\t\t\tt === TracingConnectorType.EntityStorage ||\n\t\t\tt === TracingConnectorType.OpenTelemetry ||\n\t\t\tt === TracingConnectorType.Console\n\t);\n}\n\n/**\n * Checks if the mailbox subsystem is enabled.\n * Returns true when any component that depends on the mailbox subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if mailbox is enabled.\n */\nexport function isMailboxEnabled(envVars: IEngineEnvironmentVariables): boolean {\n\treturn commaSeparatedListToArray<EmailProtocolConnectorType>(envVars.emailProtocolConnector).some(\n\t\tt =>\n\t\t\tt === EmailProtocolConnectorType.Imap ||\n\t\t\tt === EmailProtocolConnectorType.Pop3 ||\n\t\t\tt === EmailProtocolConnectorType.Gmail ||\n\t\t\tt === EmailProtocolConnectorType.Outlook\n\t);\n}\n"]}
1
+ {"version":3,"file":"engineEnvBuilder.js","sourceRoot":"","sources":["../../../src/builders/engineEnvBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { cpus } from \"node:os\";\nimport path from \"node:path\";\nimport { Is, Mutex } from \"@twin.org/core\";\nimport type { IIotaConfig } from \"@twin.org/dlt-iota\";\nimport {\n\tEngineCloneMode,\n\ttype IEngineCoreTypeConfig,\n\ttype IEngineFacadeConfig\n} from \"@twin.org/engine-models\";\nimport {\n\tAttestationComponentType,\n\tAttestationConnectorType,\n\tAuditableItemGraphComponentType,\n\tAuditableItemStreamComponentType,\n\ttype AutomationActionConfig,\n\tAutomationActionType,\n\tAutomationComponentType,\n\tBackgroundTaskComponentType,\n\tBlobStorageComponentType,\n\tBlobStorageConnectorType,\n\tContextIdHandlerComponentType,\n\tDataConverterConnectorType,\n\tDataExtractorConnectorType,\n\tDataProcessingComponentType,\n\tDataspaceControlPlaneComponentType,\n\tDataspaceDataPlaneComponentType,\n\ttype DltConfig,\n\tDltConfigType,\n\tDocumentManagementComponentType,\n\tEmailProtocolConnectorType,\n\tEngineTypeHelper,\n\tEntityStorageConnectorType,\n\tEventBusComponentType,\n\tEventBusConnectorType,\n\ttype FacadeConfig,\n\tFacadeType,\n\tFaucetConnectorType,\n\tFederatedCatalogueComponentType,\n\tFederatedCatalogueFilterComponentType,\n\tHealthComponentType,\n\tIdentityComponentType,\n\tIdentityConnectorType,\n\tIdentityProfileComponentType,\n\tIdentityProfileConnectorType,\n\tIdentityResolverComponentType,\n\tIdentityResolverConnectorType,\n\ttype IEngineConfig,\n\tImmutableProofComponentType,\n\tLoggingComponentType,\n\tLoggingConnectorType,\n\tMailboxComponentType,\n\tMailStorageComponentType,\n\tMessagingAdminComponentType,\n\tMessagingComponentType,\n\tMessagingEmailConnectorType,\n\tMessagingPushNotificationConnectorType,\n\tMessagingSmsConnectorType,\n\tMetricsCollectorComponentType,\n\tMetricsProducerComponentType,\n\tNftComponentType,\n\tNftConnectorType,\n\tNotarizationComponentType,\n\tNotarizationConnectorType,\n\tPlatformComponentType,\n\tRightsManagementPapComponentType,\n\tRightsManagementPdpComponentType,\n\tRightsManagementPepComponentType,\n\tRightsManagementPipComponentType,\n\tRightsManagementPmpComponentType,\n\tRightsManagementPnapComponentType,\n\tRightsManagementPnpComponentType,\n\tRightsManagementPolicyArbiterComponentType,\n\tRightsManagementPolicyEnforcementProcessorComponentType,\n\tRightsManagementPolicyExecutionActionComponentType,\n\tRightsManagementPolicyInformationSourceComponentType,\n\tRightsManagementPolicyNegotiatorComponentType,\n\tRightsManagementPolicyObligationEnforcerComponentType,\n\tRightsManagementPolicyRequesterComponentType,\n\tRightsManagementPxpComponentType,\n\tSchemaVersionMigrationComponentType,\n\tTaskSchedulerComponentType,\n\tTelemetryComponentType,\n\tTelemetryConnectorType,\n\tTenantAdminComponentType,\n\tTracingComponentType,\n\tTracingConnectorType,\n\tTrustComponentType,\n\tTrustGeneratorComponentType,\n\tTrustVerifierComponentType,\n\tVaultConnectorType,\n\tWalletConnectorType\n} from \"@twin.org/engine-types\";\nimport {\n\ttype IOpenTelemetryLoggingConnectorConfig,\n\ttype IOpenTelemetryOtlpExporterConfig,\n\tOpenTelemetryExporterTypes\n} from \"@twin.org/logging-connector-opentelemetry\";\nimport {\n\ttype IOpenTelemetryTelemetryConnectorConfig,\n\tOpenTelemetryReaderTypes\n} from \"@twin.org/telemetry-connector-opentelemetry\";\nimport {\n\ttype IOpenTelemetryTracingConnectorConfig,\n\tOpenTelemetryProcessorTypes\n} from \"@twin.org/tracing-connector-opentelemetry\";\nimport { type ITracingFacadeConfig, TracingFacade } from \"@twin.org/tracing-facades\";\nimport {\n\tCONTEXT_ID_HANDLER_FEATURE_DID,\n\tCONTEXT_ID_HANDLER_FEATURE_TENANT,\n\tCOMPONENT_FACTORY_TYPE_NAME,\n\tDEFAULT_HEALTH_EXCLUDE_CLONE_COMPONENTS,\n\tDEFAULT_TRACING_FACADE_COMPONENT_EXCLUDE_TYPES,\n\tDEFAULT_TRACING_FACADE_FACTORIES,\n\tTRACING_FACADE_NAME\n} from \"../defaults.js\";\nimport { isAuthEntityStorageRequired } from \"./engineServerEnvBuilder.js\";\nimport {\n\tcommaSeparatedListToArray,\n\tenvArray,\n\tenvBoolean,\n\tenvChoice,\n\tenvCount,\n\tenvDateTime,\n\tenvInteger,\n\tenvListToArray,\n\tenvMinToMs,\n\tenvMinutes,\n\tenvMs,\n\tenvSecToMs,\n\tenvSeconds\n} from \"./helper/envHelpers.js\";\nimport type { IEngineEnvironmentVariables } from \"../models/IEngineEnvironmentVariables.js\";\n\n/**\n * Build the engine core configuration from environment variables.\n * @param envVars The environment variables.\n * @returns The config for the core.\n */\nexport async function buildEngineConfiguration(\n\tenvVars: IEngineEnvironmentVariables\n): Promise<IEngineConfig> {\n\tif (Is.stringValue(envVars.storageFileRoot)) {\n\t\tenvVars.stateFilename ??= \"engine-state.json\";\n\t\tenvVars.storageFileRoot = path.resolve(envVars.storageFileRoot);\n\t\tenvVars.stateFilename = path.join(envVars.storageFileRoot, envVars.stateFilename);\n\t}\n\n\tconst coreConfig: IEngineConfig = {\n\t\tdebug: envBoolean(envVars, \"debug\", false),\n\t\tsilent: envBoolean(envVars, \"silent\", false),\n\t\tsilentComponents: {\n\t\t\tlogging: commaSeparatedListToArray(envVars.loggingSilentComponents),\n\t\t\ttelemetry: commaSeparatedListToArray(envVars.telemetrySilentComponents),\n\t\t\ttracing: commaSeparatedListToArray(envVars.tracingSilentComponents)\n\t\t},\n\t\ttypes: {}\n\t};\n\n\tconst mutexTimeoutMs = envMs(envVars, \"mutexTimeoutDefault\");\n\tif (Is.notEmpty(mutexTimeoutMs)) {\n\t\tMutex.setDefaultTimeoutMs(mutexTimeoutMs);\n\t}\n\n\tawait configureSchemaMigration(coreConfig, envVars);\n\tawait configurePlatform(coreConfig, envVars);\n\tawait configureTenant(coreConfig, envVars);\n\tawait configureContextIdHandlers(coreConfig, envVars);\n\n\tawait configureEntityStorage(coreConfig, envVars);\n\tawait configureBlobStorage(coreConfig, envVars);\n\tawait configureVault(coreConfig, envVars);\n\tawait configureDlt(coreConfig, envVars);\n\n\tawait configureLogging(coreConfig, envVars);\n\tawait configureBackgroundTask(coreConfig, envVars);\n\tawait configureTaskScheduler(coreConfig, envVars);\n\tawait configureEventBus(coreConfig, envVars);\n\tawait configureTelemetry(coreConfig, envVars);\n\tawait configureMetricsCollector(coreConfig, envVars);\n\tawait configureTracing(coreConfig, envVars);\n\tawait configureFacades(coreConfig, envVars);\n\tawait configureMessaging(coreConfig, envVars);\n\tawait configureMailbox(coreConfig, envVars);\n\tawait configureAutomation(coreConfig, envVars);\n\tawait configureHealth(coreConfig, envVars);\n\n\tawait configureFaucet(coreConfig, envVars);\n\tawait configureWallet(coreConfig, envVars);\n\tawait configureNft(coreConfig, envVars);\n\tawait configureNotarization(coreConfig, envVars);\n\tawait configureImmutableProof(coreConfig, envVars);\n\tawait configureIdentity(coreConfig, envVars);\n\tawait configureIdentityResolver(coreConfig, envVars);\n\tawait configureIdentityProfile(coreConfig, envVars);\n\tawait configureAttestation(coreConfig, envVars);\n\tawait configureDataProcessing(coreConfig, envVars);\n\n\tawait configureAuditableItemGraph(coreConfig, envVars);\n\tawait configureAuditableItemStream(coreConfig, envVars);\n\tawait configureDocumentManagement(coreConfig, envVars);\n\tawait configureTrust(coreConfig, envVars);\n\tawait configureRightsManagement(coreConfig, envVars);\n\n\tawait configureFederatedCatalogue(coreConfig, envVars);\n\tawait configureDataspace(coreConfig, envVars);\n\n\treturn coreConfig;\n}\n\n/**\n * Configures the entity storage.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the entity storage configuration has been applied.\n */\nasync function configureEntityStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types ??= {};\n\tcoreConfig.types.entityStorageConnector ??= [];\n\n\tconst entityStorageConnectorTypes = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tEntityStorageConnectorType\n\t>(envVars, \"entityStorageConnectorType\", Object.values(EntityStorageConnectorType));\n\n\tfor (const entityStorageConnectorType of entityStorageConnectorTypes) {\n\t\tif (entityStorageConnectorType === EntityStorageConnectorType.Memory) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.Memory,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.File) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.File,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdirectory: envVars.storageFileRoot ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t},\n\t\t\t\t\tfolderPrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.AwsDynamoDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.AwsDynamoDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsDynamodbRegion ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsDynamodbAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsDynamodbAccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsDynamodbSecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsDynamodbEndpoint,\n\t\t\t\t\t\tconnectionTimeoutMs: envMs(envVars, \"awsDynamodbConnectionTimeout\"),\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.AzureCosmosDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.AzureCosmosDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tendpoint: envVars.azureCosmosdbEndpoint ?? \"\",\n\t\t\t\t\t\tkey: envVars.azureCosmosdbKey ?? \"\",\n\t\t\t\t\t\tdatabaseId: envVars.azureCosmosdbDatabaseId ?? \"\",\n\t\t\t\t\t\tcontainerId: envVars.azureCosmosdbContainerId ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.GcpFirestoreDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.GcpFirestoreDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tprojectId: envVars.gcpFirestoreProjectId ?? \"\",\n\t\t\t\t\t\tcredentials: envVars.gcpFirestoreCredentials ?? \"\",\n\t\t\t\t\t\tdatabaseId: envVars.gcpFirestoreDatabaseId ?? \"\",\n\t\t\t\t\t\tcollectionName: envVars.gcpFirestoreCollectionName ?? \"\",\n\t\t\t\t\t\tendpoint: envVars.gcpFirestoreEndpoint ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.ScyllaDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.ScyllaDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thosts: commaSeparatedListToArray(envVars.scylladbHosts),\n\t\t\t\t\t\tlocalDataCenter: envVars.scylladbLocalDataCenter ?? \"\",\n\t\t\t\t\t\tkeyspace: envVars.scylladbKeyspace ?? \"\",\n\t\t\t\t\t\tport: envInteger(envVars, \"scylladbPort\"),\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\t\tpool: {\n\t\t\t\t\t\t\tcoreConnectionsPerHost: envCount(envVars, \"scylladbPoolCoreConnectionsPerHost\"),\n\t\t\t\t\t\t\tmaxRequestsPerConnection: envCount(envVars, \"scylladbPoolMaxRequestsPerConnection\")\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.MySqlDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.MySqlDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thost: envVars.mySqlHost ?? \"\",\n\t\t\t\t\t\tport: envInteger(envVars, \"mySqlPort\"),\n\t\t\t\t\t\tuser: envVars.mySqlUser ?? \"\",\n\t\t\t\t\t\tpassword: envVars.mySqlPassword ?? \"\",\n\t\t\t\t\t\tdatabase: envVars.mySqlDatabase ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\t\tpool: {\n\t\t\t\t\t\t\tconnectionLimit: envCount(envVars, \"mySqlPoolConnectionLimit\"),\n\t\t\t\t\t\t\tmaxIdle: envCount(envVars, \"mySqlPoolMaxIdle\"),\n\t\t\t\t\t\t\tidleTimeout: envMs(envVars, \"mySqlPoolIdleTimeout\"),\n\t\t\t\t\t\t\tenableKeepAlive: envBoolean(envVars, \"mySqlPoolEnableKeepAlive\"),\n\t\t\t\t\t\t\twaitForConnections: envBoolean(envVars, \"mySqlPoolWaitForConnections\"),\n\t\t\t\t\t\t\tqueueLimit: envCount(envVars, \"mySqlPoolQueueLimit\")\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.MongoDb) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.MongoDb,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thost: envVars.mongoDbHost ?? \"\",\n\t\t\t\t\t\tport: envInteger(envVars, \"mongoDbPort\"),\n\t\t\t\t\t\tuser: envVars.mongoDbUser ?? \"\",\n\t\t\t\t\t\tpassword: envVars.mongoDbPassword ?? \"\",\n\t\t\t\t\t\tdatabase: envVars.mongoDbDatabase ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\t\tpool: {\n\t\t\t\t\t\t\tmaxPoolSize: envCount(envVars, \"mongoDbPoolMaxPoolSize\"),\n\t\t\t\t\t\t\tminPoolSize: envCount(envVars, \"mongoDbPoolMinPoolSize\"),\n\t\t\t\t\t\t\tmaxIdleTimeMs: envMs(envVars, \"mongoDbPoolMaxIdleTime\"),\n\t\t\t\t\t\t\twaitQueueTimeoutMs: envMs(envVars, \"mongoDbPoolWaitQueueTimeout\")\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (entityStorageConnectorType === EntityStorageConnectorType.PostgreSql) {\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.PostgreSql,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thost: envVars.postgreSqlHost ?? \"\",\n\t\t\t\t\t\tport: envInteger(envVars, \"postgreSqlPort\"),\n\t\t\t\t\t\tuser: envVars.postgreSqlUser ?? \"\",\n\t\t\t\t\t\tpassword: envVars.postgreSqlPassword ?? \"\",\n\t\t\t\t\t\tdatabase: envVars.postgreSqlDatabase ?? \"\",\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\t\tpool: {\n\t\t\t\t\t\t\tmax: envCount(envVars, \"postgreSqlPoolMax\"),\n\t\t\t\t\t\t\tidleTimeout: envSeconds(envVars, \"postgreSqlPoolIdleTimeout\"),\n\t\t\t\t\t\t\tconnectTimeout: envSeconds(envVars, \"postgreSqlPoolConnectTimeout\"),\n\t\t\t\t\t\t\tmaxLifetime: envSeconds(envVars, \"postgreSqlPoolMaxLifetime\")\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tconst defaultEntityStorageConnectorType =\n\t\tenvVars.entityStorageConnectorDefault ?? entityStorageConnectorTypes[0];\n\n\tif (Is.arrayValue(entityStorageConnectorTypes)) {\n\t\tfor (const config of coreConfig.types.entityStorageConnector) {\n\t\t\tif (config.type === defaultEntityStorageConnectorType) {\n\t\t\t\tconfig.isDefault = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Configures the blob storage.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the blob storage configuration has been applied.\n */\nasync function configureBlobStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.blobStorageConnector ??= [];\n\n\tconst blobStorageConnectorTypes = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tBlobStorageConnectorType\n\t>(envVars, \"blobStorageConnectorType\", Object.values(BlobStorageConnectorType));\n\n\tfor (const blobStorageConnectorType of blobStorageConnectorTypes) {\n\t\tif (blobStorageConnectorType === BlobStorageConnectorType.Memory) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.Memory\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.File) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.File,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdirectory: Is.stringValue(envVars.storageFileRoot)\n\t\t\t\t\t\t\t? path.join(envVars.storageFileRoot, \"blob-storage\")\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t},\n\t\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.Ipfs) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.Ipfs,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tapiUrl: envVars.ipfsApiUrl ?? \"\",\n\t\t\t\t\t\tbearerToken: envVars.ipfsBearerToken\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.AwsS3) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.AwsS3,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsS3Region ?? \"\",\n\t\t\t\t\t\tbucketName: envVars.awsS3BucketName ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsS3AuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsS3AccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsS3SecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsS3Endpoint\n\t\t\t\t\t},\n\t\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.AzureStorage) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.AzureStorage,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\taccountName: envVars.azureStorageAccountName ?? \"\",\n\t\t\t\t\t\taccountKey: envVars.azureStorageAccountKey ?? \"\",\n\t\t\t\t\t\tcontainerName: envVars.azureStorageContainerName ?? \"\",\n\t\t\t\t\t\tendpoint: envVars.azureStorageEndpoint ?? \"\"\n\t\t\t\t\t},\n\t\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (blobStorageConnectorType === BlobStorageConnectorType.GcpStorage) {\n\t\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\t\ttype: BlobStorageConnectorType.GcpStorage,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tprojectId: envVars.gcpStorageProjectId ?? \"\",\n\t\t\t\t\t\tcredentials: envVars.gcpStorageCredentials ?? \"\",\n\t\t\t\t\t\tbucketName: envVars.gcpStorageBucketName ?? \"\",\n\t\t\t\t\t\tapiEndpoint: envVars.gcpFirestoreEndpoint\n\t\t\t\t\t},\n\t\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tif (Is.arrayValue(blobStorageConnectorTypes)) {\n\t\tconst defaultStorageConnectorType =\n\t\t\tenvVars.blobStorageConnectorDefault ?? blobStorageConnectorTypes[0];\n\t\tfor (const config of coreConfig.types.blobStorageConnector) {\n\t\t\tif (config.type === defaultStorageConnectorType) {\n\t\t\t\tconfig.isDefault = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (coreConfig.types.blobStorageConnector.length > 0) {\n\t\tcoreConfig.types.blobStorageComponent ??= [];\n\t\tcoreConfig.types.blobStorageComponent.push({\n\t\t\ttype: BlobStorageComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tvaultKeyId:\n\t\t\t\t\t\t(envVars.blobStorageEnableEncryption ?? false)\n\t\t\t\t\t\t\t? envVars.blobStorageEncryptionKeyId\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the logging.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the logging configuration has been applied.\n */\nasync function configureLogging(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.loggingConnector ??= [];\n\n\tconst loggingConnectorTypes = envListToArray<IEngineEnvironmentVariables, LoggingConnectorType>(\n\t\tenvVars,\n\t\t\"loggingConnector\",\n\t\tObject.values(LoggingConnectorType)\n\t);\n\tlet additionalConnectorCount = 0;\n\n\tfor (const loggingConnector of loggingConnectorTypes) {\n\t\tif (loggingConnector === LoggingConnectorType.Console) {\n\t\t\tcoreConfig.types.loggingConnector.push({\n\t\t\t\ttype: LoggingConnectorType.Console,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\ttranslateMessages: true,\n\t\t\t\t\t\thideGroups: true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (loggingConnector === LoggingConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.loggingConnector.push({\n\t\t\t\ttype: LoggingConnectorType.EntityStorage,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tbatchSize: envCount(envVars, \"loggingBatchSize\"),\n\t\t\t\t\t\tbatchIntervalMs: envSecToMs(envVars, \"loggingBatchFlushInterval\"),\n\t\t\t\t\t\tretainForMs: envMinToMs(envVars, \"loggingRetainFor\"),\n\t\t\t\t\t\tmaxEntries: envCount(envVars, \"loggingMaxEntries\"),\n\t\t\t\t\t\tretentionIntervalMs: envMinToMs(envVars, \"loggingRetentionInterval\"),\n\t\t\t\t\t\tretentionBatchSize: envCount(envVars, \"loggingRetentionBatchSize\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (loggingConnector === LoggingConnectorType.OpenTelemetry) {\n\t\t\tconst otelLoggingConfig: IOpenTelemetryLoggingConnectorConfig = {\n\t\t\t\tloggerName: envVars.openTelemetryLoggingLoggerName,\n\t\t\t\tloggerVersion: envVars.openTelemetryLoggingLoggerVersion\n\t\t\t};\n\t\t\tif (Is.stringValue(envVars.openTelemetryLoggingPrometheusEndpoint)) {\n\t\t\t\totelLoggingConfig.exporters = {\n\t\t\t\t\totlp: {\n\t\t\t\t\t\ttype: OpenTelemetryExporterTypes.Otlp,\n\t\t\t\t\t\tendpoint: envVars.openTelemetryLoggingPrometheusEndpoint,\n\t\t\t\t\t\tprocessor:\n\t\t\t\t\t\t\t(envVars.openTelemetryLoggingProcessor as IOpenTelemetryOtlpExporterConfig[\"processor\"]) ??\n\t\t\t\t\t\t\t\"batch\"\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tcoreConfig.types.loggingConnector.push({\n\t\t\t\ttype: LoggingConnectorType.OpenTelemetry,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: otelLoggingConfig\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (loggingConnector === LoggingConnectorType.File) {\n\t\t\tcoreConfig.types.loggingConnector.push({\n\t\t\t\ttype: LoggingConnectorType.File,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tdirectory: envVars.loggingFileDirectory ?? envVars.storageFileRoot ?? \"\",\n\t\t\t\t\t\tfilename: envVars.loggingFileFilename,\n\t\t\t\t\t\tmaxFileSizeBytes: envCount(envVars, \"loggingFileMaxFileSizeBytes\"),\n\t\t\t\t\t\tmaxRetainedFiles: envCount(envVars, \"loggingFileMaxRetainedFiles\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t}\n\t}\n\n\t// If more than one logging connector, then we need to add a multi connector\n\t// and set it as the default one\n\tif (additionalConnectorCount > 1) {\n\t\tcoreConfig.types.loggingConnector.push({\n\t\t\ttype: LoggingConnectorType.Multi,\n\t\t\toptions: {\n\t\t\t\tloggingConnectorTypes\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\t} else if (additionalConnectorCount > 0) {\n\t\t// If only one connector, then we set it as the default one\n\t\tcoreConfig.types.loggingConnector[coreConfig.types.loggingConnector.length - 1].isDefault =\n\t\t\ttrue;\n\t}\n\n\tif (additionalConnectorCount > 0) {\n\t\tcoreConfig.types.loggingComponent ??= [];\n\t\t// We set the isDefault flag so that other components will get this service by default\n\t\t// and not the generic one from the engine core\n\t\tcoreConfig.types.loggingComponent.push({ type: LoggingComponentType.Service, isDefault: true });\n\t}\n}\n\n/**\n * Configures the vault.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the vault configuration has been applied.\n */\nasync function configureVault(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.vaultConnector ??= [];\n\n\tconst vaultConnectorType = envChoice<IEngineEnvironmentVariables, VaultConnectorType>(\n\t\tenvVars,\n\t\t\"vaultConnector\",\n\t\tObject.values(VaultConnectorType)\n\t);\n\n\tif (vaultConnectorType === VaultConnectorType.EntityStorage) {\n\t\tcoreConfig.types.vaultConnector.push({\n\t\t\ttype: VaultConnectorType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tprefix: envVars.vaultPrefix\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (vaultConnectorType === VaultConnectorType.Hashicorp) {\n\t\tcoreConfig.types.vaultConnector.push({\n\t\t\ttype: VaultConnectorType.Hashicorp,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tendpoint: envVars.hashicorpVaultEndpoint ?? \"\",\n\t\t\t\t\ttoken: envVars.hashicorpVaultToken ?? \"\",\n\t\t\t\t\tprefix: envVars.vaultPrefix\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the background task.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the background task configuration has been applied.\n */\nasync function configureBackgroundTask(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.backgroundTaskComponent ??= [];\n\n\tif (isBackgroundTasksRequired(envVars)) {\n\t\tcoreConfig.types.backgroundTaskComponent.push({\n\t\t\ttype: BackgroundTaskComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmaxSystemWorkerCount: envCount(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"backgroundTaskMaxSystemWorkerCount\",\n\t\t\t\t\t\tcpus().length * 2\n\t\t\t\t\t),\n\t\t\t\t\ttaskInterval: envMs(envVars, \"backgroundTaskInterval\"),\n\t\t\t\t\tretryInterval: envMs(envVars, \"backgroundTaskRetryInterval\"),\n\t\t\t\t\tcleanupInterval: envMs(envVars, \"backgroundTaskCleanupInterval\"),\n\t\t\t\t\tworkerShutdownTimeout: envMs(envVars, \"backgroundTaskWorkerShutdownTimeout\"),\n\t\t\t\t\tmaxDispatchCount: envCount(envVars, \"backgroundTaskMaxDispatchCount\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the event bus.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the event bus configuration has been applied.\n */\nasync function configureEventBus(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.eventBusConnector ??= [];\n\n\tconst eventBusConnectorType = envChoice<IEngineEnvironmentVariables, EventBusConnectorType>(\n\t\tenvVars,\n\t\t\"eventBusConnector\",\n\t\tObject.values(EventBusConnectorType)\n\t);\n\n\tif (eventBusConnectorType === EventBusConnectorType.Local) {\n\t\tcoreConfig.types.eventBusConnector.push({\n\t\t\ttype: EventBusConnectorType.Local\n\t\t});\n\t}\n\n\tif (coreConfig.types.eventBusConnector.length > 0) {\n\t\tcoreConfig.types.eventBusComponent ??= [];\n\t\tcoreConfig.types.eventBusComponent.push({ type: EventBusComponentType.Service });\n\t}\n}\n\n/**\n * Configures the telemetry.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the telemetry configuration has been applied.\n */\nasync function configureTelemetry(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.telemetryConnector ??= [];\n\n\tconst telemetryConnectorTypes = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tTelemetryConnectorType\n\t>(envVars, \"telemetryConnector\", Object.values(TelemetryConnectorType));\n\tlet additionalConnectorCount = 0;\n\n\tfor (const telemetryConnectorType of telemetryConnectorTypes) {\n\t\tif (telemetryConnectorType === TelemetryConnectorType.Silent) {\n\t\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\t\ttype: TelemetryConnectorType.Silent\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (telemetryConnectorType === TelemetryConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\t\ttype: TelemetryConnectorType.EntityStorage,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tbatchSize: envCount(envVars, \"telemetryBatchSize\"),\n\t\t\t\t\t\tbatchIntervalMs: envSecToMs(envVars, \"telemetryBatchFlushInterval\"),\n\t\t\t\t\t\tmaxCacheSize: envCount(envVars, \"telemetryMaxCacheSize\"),\n\t\t\t\t\t\tflushTimeoutMs: envMs(envVars, \"telemetryFlushTimeout\"),\n\t\t\t\t\t\ttaskCoalesceMs: envMs(envVars, \"telemetryTaskCoalesce\"),\n\t\t\t\t\t\ttaskStallTimeoutMs: envMs(envVars, \"telemetryTaskStallTimeout\"),\n\t\t\t\t\t\tmetricDefinitionCacheCapacity: envCount(\n\t\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\t\"telemetryMetricDefinitionCacheCapacity\"\n\t\t\t\t\t\t),\n\t\t\t\t\t\tmetricDefinitionCacheTtiMs: envMs(envVars, \"telemetryMetricDefinitionCacheTtiMs\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (telemetryConnectorType === TelemetryConnectorType.OpenTelemetry) {\n\t\t\tlet readers: IOpenTelemetryTelemetryConnectorConfig[\"readers\"];\n\t\t\tif (envVars.openTelemetryReader === OpenTelemetryReaderTypes.Prometheus) {\n\t\t\t\treaders = {\n\t\t\t\t\tprometheus: {\n\t\t\t\t\t\ttype: OpenTelemetryReaderTypes.Prometheus,\n\t\t\t\t\t\tport: envCount(envVars, \"openTelemetryPrometheusPort\")\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\t\ttype: TelemetryConnectorType.OpenTelemetry,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tmeterName: envVars.openTelemetryMeterName,\n\t\t\t\t\t\tmeterVersion: envVars.openTelemetryMeterVersion,\n\t\t\t\t\t\treaders\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t}\n\t}\n\n\t// If more than one telemetry connector, then we need to add a multi connector\n\t// and set it as the default one\n\tif (additionalConnectorCount > 1) {\n\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\ttype: TelemetryConnectorType.Multi,\n\t\t\toptions: {\n\t\t\t\ttelemetryConnectorTypes\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\t} else if (additionalConnectorCount > 0) {\n\t\t// If only one connector, then we set it as the default one\n\t\tcoreConfig.types.telemetryConnector[coreConfig.types.telemetryConnector.length - 1].isDefault =\n\t\t\ttrue;\n\t}\n\n\tif (additionalConnectorCount > 0) {\n\t\tcoreConfig.types.telemetryComponent ??= [];\n\t\tcoreConfig.types.telemetryComponent.push({ type: TelemetryComponentType.Service });\n\t}\n}\n\n/**\n * Configures the metrics producers and orchestrator service.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the metrics collector configuration has been applied.\n */\nasync function configureMetricsCollector(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isTelemetryEnabled(envVars)) {\n\t\tcoreConfig.types.metricsCollectorComponent ??= [];\n\t\tcoreConfig.types.metricsCollectorComponent.push({\n\t\t\ttype: MetricsCollectorComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tintervalMs: envSecToMs(envVars, \"telemetryMetricsCollectorInterval\")\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloneMode: EngineCloneMode.Never\n\t\t});\n\n\t\tcoreConfig.types.metricsProducerComponent ??= [];\n\n\t\tconst metricsProducers = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tMetricsProducerComponentType\n\t\t>(envVars, \"telemetryMetricsProducers\", Object.values(MetricsProducerComponentType), [\n\t\t\tMetricsProducerComponentType.System,\n\t\t\tMetricsProducerComponentType.Process\n\t\t]);\n\n\t\tfor (const producerType of metricsProducers) {\n\t\t\tcoreConfig.types.metricsProducerComponent.push({\n\t\t\t\ttype: producerType,\n\t\t\t\toptions: { maxHistory: envCount(envVars, \"telemetryMetricsProducerMaxHistory\") },\n\t\t\t\tcloneMode: EngineCloneMode.Never\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Configures the tracing.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the tracing configuration has been applied.\n */\nasync function configureTracing(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.tracingConnector ??= [];\n\n\tconst tracingConnectorTypes = envListToArray<IEngineEnvironmentVariables, TracingConnectorType>(\n\t\tenvVars,\n\t\t\"tracingConnector\",\n\t\tObject.values(TracingConnectorType)\n\t);\n\tlet additionalConnectorCount = 0;\n\n\tfor (const tracingConnectorType of tracingConnectorTypes) {\n\t\tif (tracingConnectorType === TracingConnectorType.Silent) {\n\t\t\tcoreConfig.types.tracingConnector.push({\n\t\t\t\ttype: TracingConnectorType.Silent\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (tracingConnectorType === TracingConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.tracingConnector.push({\n\t\t\t\ttype: TracingConnectorType.EntityStorage\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (tracingConnectorType === TracingConnectorType.Console) {\n\t\t\tcoreConfig.types.tracingConnector.push({\n\t\t\t\ttype: TracingConnectorType.Console\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t} else if (tracingConnectorType === TracingConnectorType.OpenTelemetry) {\n\t\t\tconst otelTracingConfig: IOpenTelemetryTracingConnectorConfig = {\n\t\t\t\ttracerName: envVars.openTelemetryTracingTracerName,\n\t\t\t\ttracerVersion: envVars.openTelemetryTracingTracerVersion\n\t\t\t};\n\t\t\tif (Is.stringValue(envVars.openTelemetryTracingEndpoint)) {\n\t\t\t\totelTracingConfig.exporters = {\n\t\t\t\t\totlp: {\n\t\t\t\t\t\tendpoint: envVars.openTelemetryTracingEndpoint,\n\t\t\t\t\t\tprocessor:\n\t\t\t\t\t\t\t(envVars.openTelemetryTracingProcessor as OpenTelemetryProcessorTypes) ??\n\t\t\t\t\t\t\tOpenTelemetryProcessorTypes.Batch\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\tcoreConfig.types.tracingConnector.push({\n\t\t\t\ttype: TracingConnectorType.OpenTelemetry,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: otelTracingConfig\n\t\t\t\t}\n\t\t\t});\n\t\t\tadditionalConnectorCount++;\n\t\t}\n\t}\n\n\t// If more than one tracing connector, then we need to add a multi connector\n\t// and set it as the default one\n\tif (additionalConnectorCount > 1) {\n\t\tcoreConfig.types.tracingConnector.push({\n\t\t\ttype: TracingConnectorType.Multi,\n\t\t\toptions: {\n\t\t\t\ttracingConnectorTypes\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\t} else if (additionalConnectorCount > 0) {\n\t\t// If only one connector, then we set it as the default one\n\t\tcoreConfig.types.tracingConnector[coreConfig.types.tracingConnector.length - 1].isDefault =\n\t\t\ttrue;\n\t}\n\n\tif (additionalConnectorCount > 0) {\n\t\tcoreConfig.types.tracingComponent ??= [];\n\t\tcoreConfig.types.tracingComponent.push({ type: TracingComponentType.Service });\n\t}\n}\n\n/**\n * Configures the facades.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the facade configuration has been applied.\n */\nasync function configureFacades(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tconst facadeTypes = envListToArray<IEngineEnvironmentVariables, FacadeType>(\n\t\tenvVars,\n\t\t\"facade\",\n\t\tObject.values(FacadeType)\n\t);\n\n\tif (!Is.arrayValue(facadeTypes)) {\n\t\treturn;\n\t}\n\n\tcoreConfig.types.facade ??= [];\n\tcoreConfig.facades ??= {};\n\n\tfor (const facadeType of facadeTypes) {\n\t\tif (facadeType === FacadeType.Tracing) {\n\t\t\tconfigureTracingFacade(coreConfig.types.facade, coreConfig.facades, envVars);\n\t\t}\n\t}\n}\n\n/**\n * Configures the tracing facade.\n * @param facadeTypeConfigs The facade type configs to add to.\n * @param facades The facades to activate, keyed by the type name of the factory they apply to.\n * @param envVars The environment variables.\n */\nfunction configureTracingFacade(\n\tfacadeTypeConfigs: IEngineCoreTypeConfig<FacadeConfig>[],\n\tfacades: { [factoryTypeName: string]: IEngineFacadeConfig[] },\n\tenvVars: IEngineEnvironmentVariables\n): void {\n\t// The facade records its spans through the tracing subsystem, without it there is nothing to record to.\n\tif (!isTracingEnabled(envVars)) {\n\t\treturn;\n\t}\n\n\t// The facade is meaningless without factories to activate it on, so fall back to the defaults.\n\tconst configuredFactoryTypeNames = commaSeparatedListToArray<string>(\n\t\tenvVars.tracingFacadeFactories\n\t);\n\tconst factoryTypeNames = [\n\t\t...new Set(\n\t\t\tIs.arrayValue(configuredFactoryTypeNames)\n\t\t\t\t? configuredFactoryTypeNames\n\t\t\t\t: DEFAULT_TRACING_FACADE_FACTORIES\n\t\t)\n\t];\n\n\tconst config: ITracingFacadeConfig = {};\n\n\t// Adding to the default excludes. We want to keep default list as a base and only add to it.\n\tconst excludeParams = commaSeparatedListToArray<string>(envVars.tracingFacadeExcludeParams);\n\tif (Is.arrayValue(excludeParams)) {\n\t\tconfig.excludeParams = [\n\t\t\t...new Set([...TracingFacade.DEFAULT_EXCLUDE_PARAMS, ...excludeParams])\n\t\t];\n\t}\n\n\tconst excludeMethods = commaSeparatedListToArray<string>(envVars.tracingFacadeExcludeMethods);\n\tif (Is.arrayValue(excludeMethods)) {\n\t\tconfig.excludeMethods = [\n\t\t\t...new Set([...TracingFacade.DEFAULT_EXCLUDE_METHODS, ...excludeMethods])\n\t\t];\n\t}\n\n\tconst includeObjects = commaSeparatedListToArray<string>(envVars.tracingFacadeIncludeObjects);\n\tif (Is.arrayValue(includeObjects)) {\n\t\tconfig.includeObjects = includeObjects;\n\t}\n\n\tfacadeTypeConfigs.push({\n\t\ttype: FacadeType.Tracing,\n\t\toptions: Is.objectValue(config) ? { config } : undefined,\n\t\tcloneMode: EngineCloneMode.Always\n\t});\n\n\tconst componentExcludeTypes = [\n\t\t...new Set([\n\t\t\t...DEFAULT_TRACING_FACADE_COMPONENT_EXCLUDE_TYPES,\n\t\t\t...commaSeparatedListToArray<string>(envVars.tracingFacadeComponentExcludeTypes)\n\t\t])\n\t];\n\n\tfor (const factoryTypeName of factoryTypeNames) {\n\t\tfacades[factoryTypeName] ??= [];\n\t\tfacades[factoryTypeName].push({\n\t\t\tname: TRACING_FACADE_NAME,\n\t\t\texcludeTypes:\n\t\t\t\tfactoryTypeName === COMPONENT_FACTORY_TYPE_NAME ? componentExcludeTypes : undefined\n\t\t});\n\t}\n}\n\n/**\n * Configures the automation.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the automation configuration has been applied.\n */\nasync function configureAutomation(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.automationComponent ??= [];\n\n\tif (isAutomationRequired(envVars)) {\n\t\tcoreConfig.types.automationComponent.push({\n\t\t\ttype: AutomationComponentType.Service\n\t\t});\n\n\t\tconst automationActionTypes = envListToArray<IEngineEnvironmentVariables, AutomationActionType>(\n\t\t\tenvVars,\n\t\t\t\"automationActionTypes\",\n\t\t\tObject.values(AutomationActionType)\n\t\t);\n\n\t\tcoreConfig.types.automationAction ??= [];\n\n\t\tfor (const actionType of automationActionTypes) {\n\t\t\tcoreConfig.types.automationAction.push({\n\t\t\t\ttype: actionType,\n\t\t\t\tisMultiInstance: true\n\t\t\t} as unknown as AutomationActionConfig);\n\t\t}\n\t}\n}\n\n/**\n * Configures the health.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the health configuration has been applied.\n */\nasync function configureHealth(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.healthComponent ??= [];\n\n\tif (envBoolean(envVars, \"healthEnabled\", false)) {\n\t\tcoreConfig.types.healthComponent.push({\n\t\t\ttype: HealthComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thealthCheckInterval: envSecToMs(envVars, \"healthInterval\"),\n\t\t\t\t\thealthCheckApplicationInterval: envSecToMs(envVars, \"healthApplicationInterval\"),\n\t\t\t\t\tinitialInterval: envSecToMs(envVars, \"healthStartupInterval\"),\n\t\t\t\t\texcludeCloneComponents: envListToArray<IEngineEnvironmentVariables, string>(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"healthExcludeCloneComponents\",\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tDEFAULT_HEALTH_EXCLUDE_CLONE_COMPONENTS\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloneMode: EngineCloneMode.Never\n\t\t});\n\t}\n}\n\n/**\n * Configures the schema migration.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the schema migration configuration has been applied.\n */\nasync function configureSchemaMigration(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tconst isSchemaMigrationEnabled = envBoolean(envVars, \"schemaMigrationEnabled\", true);\n\n\tcoreConfig.types.schemaVersionMigrationComponent ??= [];\n\tcoreConfig.types.schemaVersionMigrationComponent.push({\n\t\ttype: SchemaVersionMigrationComponentType.Service,\n\t\toptions: { config: { enabled: isSchemaMigrationEnabled } },\n\t\tcloneMode: EngineCloneMode.Never\n\t});\n}\n\n/**\n * Configures the platform.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the platform configuration has been applied.\n */\nasync function configurePlatform(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tconst isTenantEnabled = envBoolean(envVars, \"tenantEnabled\", false);\n\n\tcoreConfig.types.platformComponent ??= [];\n\tcoreConfig.types.platformComponent.push({\n\t\ttype: PlatformComponentType.Service,\n\t\toptions: {\n\t\t\tconfig: {\n\t\t\t\tisMultiTenant: isTenantEnabled\n\t\t\t}\n\t\t},\n\t\tcloneMode: EngineCloneMode.Always\n\t});\n}\n\n/**\n * Configures the tenant.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the tenant configuration has been applied.\n */\nasync function configureTenant(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tconst isTenantEnabled = envBoolean(envVars, \"tenantEnabled\", false);\n\n\tif (isTenantEnabled) {\n\t\tcoreConfig.types.tenantAdminComponent ??= [];\n\t\tcoreConfig.types.tenantAdminComponent.push({\n\t\t\ttype: TenantAdminComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the context ID handlers.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the context ID handler configuration has been applied.\n */\nasync function configureContextIdHandlers(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.contextIdHandlerComponent ??= [];\n\tcoreConfig.types.contextIdHandlerComponent.push({\n\t\ttype: ContextIdHandlerComponentType.Did,\n\t\tfeatures: [CONTEXT_ID_HANDLER_FEATURE_DID],\n\t\tcloneMode: EngineCloneMode.Always\n\t});\n\tif (envBoolean(envVars, \"tenantEnabled\", false)) {\n\t\tcoreConfig.types.contextIdHandlerComponent.push({\n\t\t\ttype: ContextIdHandlerComponentType.Tenant,\n\t\t\tfeatures: [CONTEXT_ID_HANDLER_FEATURE_TENANT],\n\t\t\tcloneMode: EngineCloneMode.Always\n\t\t});\n\t}\n}\n\n/**\n * Configures the messaging.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the messaging configuration has been applied.\n */\nasync function configureMessaging(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.messagingEmailConnector ??= [];\n\tcoreConfig.types.messagingSmsConnector ??= [];\n\tcoreConfig.types.messagingPushNotificationConnector ??= [];\n\n\tconst messagingEmailConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tMessagingEmailConnectorType\n\t>(envVars, \"messagingEmailConnector\", Object.values(MessagingEmailConnectorType));\n\n\tif (messagingEmailConnectorType === MessagingEmailConnectorType.EntityStorage) {\n\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\ttype: MessagingEmailConnectorType.EntityStorage\n\t\t});\n\t} else if (messagingEmailConnectorType === MessagingEmailConnectorType.Aws) {\n\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\ttype: MessagingEmailConnectorType.Aws,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsSesEndpoint\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (messagingEmailConnectorType === MessagingEmailConnectorType.Smtp) {\n\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\ttype: MessagingEmailConnectorType.Smtp,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thost: envVars.smtpHost ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"smtpPort\"),\n\t\t\t\t\tsecure: envBoolean(envVars, \"smtpSecure\"),\n\t\t\t\t\tusername: envVars.smtpUsername,\n\t\t\t\t\tpassword: envVars.smtpPassword\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tconst messagingSmsConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tMessagingSmsConnectorType\n\t>(envVars, \"messagingSmsConnector\", Object.values(MessagingSmsConnectorType));\n\n\tif (messagingSmsConnectorType === MessagingSmsConnectorType.EntityStorage) {\n\t\tcoreConfig.types.messagingSmsConnector.push({\n\t\t\ttype: MessagingSmsConnectorType.EntityStorage\n\t\t});\n\t} else if (messagingSmsConnectorType === MessagingSmsConnectorType.Aws) {\n\t\tcoreConfig.types.messagingSmsConnector.push({\n\t\t\ttype: MessagingSmsConnectorType.Aws,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsSesEndpoint\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tconst messagingPushConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tMessagingPushNotificationConnectorType\n\t>(\n\t\tenvVars,\n\t\t\"messagingPushNotificationConnector\",\n\t\tObject.values(MessagingPushNotificationConnectorType)\n\t);\n\n\tif (messagingPushConnectorType === MessagingPushNotificationConnectorType.EntityStorage) {\n\t\tcoreConfig.types.messagingPushNotificationConnector.push({\n\t\t\ttype: MessagingPushNotificationConnectorType.EntityStorage\n\t\t});\n\t} else if (messagingPushConnectorType === MessagingPushNotificationConnectorType.Aws) {\n\t\tcoreConfig.types.messagingPushNotificationConnector.push({\n\t\t\ttype: MessagingPushNotificationConnectorType.Aws,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsSesEndpoint,\n\t\t\t\t\tapplicationsSettings: envArray(envVars, \"awsMessagingPushNotificationApplications\", [])\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t// If any messaging connectors are configured, then we should configure the messaging admin and\n\t// service components as well since they are required for the messaging connectors to work.\n\tif (\n\t\tcoreConfig.types.messagingEmailConnector.length > 0 ||\n\t\tcoreConfig.types.messagingSmsConnector.length > 0 ||\n\t\tcoreConfig.types.messagingPushNotificationConnector.length > 0\n\t) {\n\t\tcoreConfig.types.messagingAdminComponent ??= [];\n\t\tcoreConfig.types.messagingAdminComponent.push({\n\t\t\ttype: MessagingAdminComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.messagingComponent ??= [];\n\t\tcoreConfig.types.messagingComponent.push({ type: MessagingComponentType.Service });\n\t}\n}\n\n/**\n * Configures mailbox components, mail storage components, and email protocol connectors.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the mailbox configuration has been applied.\n */\nasync function configureMailbox(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.emailProtocolConnector ??= [];\n\n\tconst emailProtocolConnectorTypes = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tEmailProtocolConnectorType\n\t>(envVars, \"emailProtocolConnector\", Object.values(EmailProtocolConnectorType));\n\tfor (const emailProtocolConnectorType of emailProtocolConnectorTypes) {\n\t\tcoreConfig.types.emailProtocolConnector.push({\n\t\t\ttype: emailProtocolConnectorType,\n\t\t\toptions: {\n\t\t\t\tconfig: {} as never\n\t\t\t},\n\t\t\tcloneMode: EngineCloneMode.Never,\n\t\t\tisMultiInstance: true\n\t\t});\n\t}\n\n\t// If email protocol connectors are configured, then we should configure the mailbox and mail store\n\t// components as well, since they are required for the email protocol connectors to work.\n\tif (coreConfig.types.emailProtocolConnector.length > 0) {\n\t\tcoreConfig.types.mailStorageComponent ??= [];\n\t\tcoreConfig.types.mailStorageComponent.push({\n\t\t\ttype: MailStorageComponentType.Service,\n\t\t\tcloneMode: EngineCloneMode.Never\n\t\t});\n\n\t\tcoreConfig.types.mailboxComponent ??= [];\n\t\tcoreConfig.types.mailboxComponent.push({\n\t\t\ttype: MailboxComponentType.Service,\n\t\t\tcloneMode: EngineCloneMode.Never\n\t\t});\n\t}\n}\n\n/**\n * Configures the faucet.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the faucet configuration has been applied.\n */\nasync function configureFaucet(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.faucetConnector ??= [];\n\n\tconst faucetConnectorType = envChoice<IEngineEnvironmentVariables, FaucetConnectorType>(\n\t\tenvVars,\n\t\t\"faucetConnector\",\n\t\tObject.values(FaucetConnectorType)\n\t);\n\n\tif (faucetConnectorType === FaucetConnectorType.EntityStorage) {\n\t\tcoreConfig.types.faucetConnector.push({\n\t\t\ttype: FaucetConnectorType.EntityStorage\n\t\t});\n\t} else if (\n\t\tfaucetConnectorType === FaucetConnectorType.Iota &&\n\t\tIs.stringValue(envVars.iotaFaucetEndpoint)\n\t) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.faucetConnector.push({\n\t\t\ttype: FaucetConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tendpoint: envVars.iotaFaucetEndpoint,\n\t\t\t\t\tclientOptions: dltConfig?.options?.config?.clientOptions ?? { url: \"\" },\n\t\t\t\t\tnetwork: dltConfig?.options?.config?.network ?? \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the wallet.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the wallet configuration has been applied.\n */\nasync function configureWallet(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.walletConnector ??= [];\n\n\tconst walletConnectorType = envChoice<IEngineEnvironmentVariables, WalletConnectorType>(\n\t\tenvVars,\n\t\t\"walletConnector\",\n\t\tObject.values(WalletConnectorType)\n\t);\n\n\tif (walletConnectorType === WalletConnectorType.EntityStorage) {\n\t\tcoreConfig.types.walletConnector.push({\n\t\t\ttype: WalletConnectorType.EntityStorage\n\t\t});\n\t} else if (walletConnectorType === WalletConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.walletConnector.push({\n\t\t\ttype: WalletConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: dltConfig?.options?.config ?? ({} as IIotaConfig)\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the NFT.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the NFT configuration has been applied.\n */\nasync function configureNft(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.nftConnector ??= [];\n\n\tconst nftConnectorType = envChoice<IEngineEnvironmentVariables, NftConnectorType>(\n\t\tenvVars,\n\t\t\"nftConnector\",\n\t\tObject.values(NftConnectorType)\n\t);\n\n\tif (nftConnectorType === NftConnectorType.EntityStorage) {\n\t\tcoreConfig.types.nftConnector.push({\n\t\t\ttype: NftConnectorType.EntityStorage\n\t\t});\n\t} else if (nftConnectorType === NftConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tconst config = {\n\t\t\t...(dltConfig?.options?.config as IIotaConfig),\n\t\t\tdeploymentPkgId: Is.stringValue(envVars.nftPackageId) ? envVars.nftPackageId : undefined\n\t\t};\n\t\tcoreConfig.types.nftConnector.push({\n\t\t\ttype: NftConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.nftConnector.length > 0) {\n\t\tcoreConfig.types.nftComponent ??= [];\n\t\tcoreConfig.types.nftComponent.push({ type: NftComponentType.Service });\n\t}\n}\n\n/**\n * Configures the notarization.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the notarization configuration has been applied.\n */\nasync function configureNotarization(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.notarizationConnector ??= [];\n\n\tconst notarizationConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tNotarizationConnectorType\n\t>(envVars, \"notarizationConnector\", Object.values(NotarizationConnectorType));\n\n\tif (notarizationConnectorType === NotarizationConnectorType.EntityStorage) {\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.EntityStorage\n\t\t});\n\t} else if (notarizationConnectorType === NotarizationConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: dltConfig?.options?.config ?? ({} as IIotaConfig)\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.notarizationConnector.length > 0) {\n\t\tcoreConfig.types.notarizationComponent ??= [];\n\t\tcoreConfig.types.notarizationComponent.push({ type: NotarizationComponentType.Service });\n\t}\n}\n\n/**\n * Configures the immutable proof.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the immutable proof configuration has been applied.\n */\nasync function configureImmutableProof(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isImmutableProofRequired(envVars)) {\n\t\tcoreConfig.types.immutableProofComponent ??= [];\n\t\tcoreConfig.types.immutableProofComponent.push({\n\t\t\ttype: ImmutableProofComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverificationMethodId: envVars.immutableProofVerificationMethodId,\n\t\t\t\t\ttaskRetryCount: envCount(envVars, \"immutableProofTaskRetryCount\"),\n\t\t\t\t\ttaskRetryInterval: envSecToMs(envVars, \"immutableProofTaskRetryInterval\"),\n\t\t\t\t\ttaskFailureRetainFor: envMinToMs(envVars, \"immutableProofTaskFailureRetainFor\"),\n\t\t\t\t\ttaskWorkerIdleTimeout: envSecToMs(envVars, \"immutableProofTaskWorkerIdleTimeout\"),\n\t\t\t\t\tsweepIntervalMinutes: envMinutes(envVars, \"immutableProofSweepInterval\"),\n\t\t\t\t\tsweepStaleThresholdMs: envMinToMs(envVars, \"immutableProofSweepStaleThreshold\"),\n\t\t\t\t\tsweepMaxAttempts: envCount(envVars, \"immutableProofSweepMaxAttempts\"),\n\t\t\t\t\tsweepBatchLimit: envCount(envVars, \"immutableProofSweepBatchLimit\"),\n\t\t\t\t\tsweepBackoffMs: envMinToMs(envVars, \"immutableProofSweepBackoff\"),\n\t\t\t\t\tsweepAssumeRetryableBefore: envDateTime(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"immutableProofSweepAssumeRetryableBefore\"\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the identity.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the identity configuration has been applied.\n */\nasync function configureIdentity(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.identityConnector ??= [];\n\n\tconst identityConnectorType = envChoice<IEngineEnvironmentVariables, IdentityConnectorType>(\n\t\tenvVars,\n\t\t\"identityConnector\",\n\t\tObject.values(IdentityConnectorType)\n\t);\n\n\tif (identityConnectorType === IdentityConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityConnector.push({\n\t\t\ttype: IdentityConnectorType.EntityStorage\n\t\t});\n\t} else if (identityConnectorType === IdentityConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.identityConnector.push({\n\t\t\ttype: IdentityConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\t...(dltConfig?.options?.config ?? ({} as IIotaConfig)),\n\t\t\t\t\tidentityPkgId: Is.stringValue(envVars.iotaIdentityPackageId)\n\t\t\t\t\t\t? envVars.iotaIdentityPackageId\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\twalletAddressIndex: envCount(envVars, \"identityWalletAddressIndex\") ?? 0,\n\t\t\t\t\tdidResolutionCacheTtlMs: envMs(envVars, \"identityDidResolutionCacheTtl\"),\n\t\t\t\t\tdidResolutionCacheCapacity: envCount(envVars, \"identityDidResolutionCacheCapacity\"),\n\t\t\t\t\tdidResolutionCacheMutexTimeoutMs: envMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"identityDidResolutionCacheMutexTimeout\"\n\t\t\t\t\t),\n\t\t\t\t\tdidResolutionRetries: envCount(envVars, \"identityDidResolutionRetries\"),\n\t\t\t\t\tdidResolutionRetryDelayMs: envMs(envVars, \"identityDidResolutionRetryDelay\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.identityConnector.length > 0) {\n\t\tcoreConfig.types.identityComponent ??= [];\n\t\tcoreConfig.types.identityComponent.push({ type: IdentityComponentType.Service });\n\t}\n}\n\n/**\n * Configures the identity resolver.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the identity resolver configuration has been applied.\n */\nasync function configureIdentityResolver(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.identityResolverConnector ??= [];\n\n\tconst identityResolverConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tIdentityResolverConnectorType\n\t>(envVars, \"identityResolverConnector\", Object.values(IdentityResolverConnectorType));\n\n\tif (identityResolverConnectorType === IdentityResolverConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityResolverConnector.push({\n\t\t\ttype: IdentityResolverConnectorType.EntityStorage\n\t\t});\n\t} else if (identityResolverConnectorType === IdentityResolverConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.identityResolverConnector.push({\n\t\t\ttype: IdentityResolverConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\t...(dltConfig?.options?.config as IIotaConfig),\n\t\t\t\t\tidentityPkgId: Is.stringValue(envVars.iotaIdentityPackageId)\n\t\t\t\t\t\t? envVars.iotaIdentityPackageId\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (identityResolverConnectorType === IdentityResolverConnectorType.Universal) {\n\t\tcoreConfig.types.identityResolverConnector.push({\n\t\t\ttype: IdentityResolverConnectorType.Universal,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tendpoint: envVars.universalResolverEndpoint ?? \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.identityResolverConnector.length > 0) {\n\t\tcoreConfig.types.identityResolverComponent ??= [];\n\t\tcoreConfig.types.identityResolverComponent.push({\n\t\t\ttype: IdentityResolverComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the identity profile.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the identity profile configuration has been applied.\n */\nasync function configureIdentityProfile(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.identityProfileConnector ??= [];\n\n\tconst identityProfileConnectorType = envChoice<\n\t\tIEngineEnvironmentVariables,\n\t\tIdentityProfileConnectorType\n\t>(envVars, \"identityProfileConnector\", Object.values(IdentityProfileConnectorType));\n\n\tif (identityProfileConnectorType === IdentityProfileConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityProfileConnector.push({\n\t\t\ttype: IdentityProfileConnectorType.EntityStorage\n\t\t});\n\t}\n\n\tif (coreConfig.types.identityProfileConnector.length > 0) {\n\t\tcoreConfig.types.identityProfileComponent ??= [];\n\t\tcoreConfig.types.identityProfileComponent.push({ type: IdentityProfileComponentType.Service });\n\t}\n}\n\n/**\n * Configures the attestation.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the attestation configuration has been applied.\n */\nasync function configureAttestation(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.attestationConnector ??= [];\n\n\tconst attestationConnectorType = envChoice<IEngineEnvironmentVariables, AttestationConnectorType>(\n\t\tenvVars,\n\t\t\"attestationConnector\",\n\t\tObject.values(AttestationConnectorType)\n\t);\n\n\tif (attestationConnectorType === AttestationConnectorType.Nft) {\n\t\tcoreConfig.types.attestationConnector.push({\n\t\t\ttype: AttestationConnectorType.Nft\n\t\t});\n\t}\n\n\tif (coreConfig.types.attestationConnector.length > 0) {\n\t\tcoreConfig.types.attestationComponent ??= [];\n\t\tcoreConfig.types.attestationComponent.push({\n\t\t\ttype: AttestationComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverificationMethodId: envVars.attestationVerificationMethodId\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the auditable item graph.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the auditable item graph configuration has been applied.\n */\nasync function configureAuditableItemGraph(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (envBoolean(envVars, \"auditableItemGraphEnabled\", false)) {\n\t\tcoreConfig.types.auditableItemGraphComponent ??= [];\n\t\tcoreConfig.types.auditableItemGraphComponent.push({\n\t\t\ttype: AuditableItemGraphComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"auditableItemGraphMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the auditable item stream.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the auditable item stream configuration has been applied.\n */\nasync function configureAuditableItemStream(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (envBoolean(envVars, \"auditableItemStreamEnabled\", false)) {\n\t\tcoreConfig.types.auditableItemStreamComponent ??= [];\n\t\tcoreConfig.types.auditableItemStreamComponent.push({\n\t\t\ttype: AuditableItemStreamComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"auditableItemStreamMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the data processing.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the data processing configuration has been applied.\n */\nasync function configureDataProcessing(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.dataConverterConnector ??= [];\n\n\tconst converterConnectors = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tDataConverterConnectorType\n\t>(envVars, \"dataConverterConnectors\", Object.values(DataConverterConnectorType));\n\tfor (const converterConnector of converterConnectors) {\n\t\tcoreConfig.types.dataConverterConnector.push({\n\t\t\ttype: converterConnector\n\t\t});\n\t}\n\n\tcoreConfig.types.dataExtractorConnector ??= [];\n\tconst extractorConnectors = envListToArray<\n\t\tIEngineEnvironmentVariables,\n\t\tDataExtractorConnectorType\n\t>(envVars, \"dataExtractorConnectors\", Object.values(DataExtractorConnectorType));\n\tfor (const extractorConnector of extractorConnectors) {\n\t\tcoreConfig.types.dataExtractorConnector.push({\n\t\t\ttype: extractorConnector\n\t\t});\n\t}\n\n\tif (\n\t\tcoreConfig.types.dataConverterConnector.length > 0 ||\n\t\tcoreConfig.types.dataExtractorConnector.length > 0\n\t) {\n\t\tcoreConfig.types.dataProcessingComponent ??= [];\n\t\tcoreConfig.types.dataProcessingComponent.push({ type: DataProcessingComponentType.Service });\n\t}\n}\n\n/**\n * Configures the document management.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the document management configuration has been applied.\n */\nasync function configureDocumentManagement(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (envBoolean(envVars, \"documentManagementEnabled\", false)) {\n\t\tcoreConfig.types.documentManagementComponent ??= [];\n\t\tcoreConfig.types.documentManagementComponent.push({\n\t\t\ttype: DocumentManagementComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"documentManagementMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the trust components.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the trust configuration has been applied.\n */\nasync function configureTrust(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isTrustRequired(envVars)) {\n\t\tcoreConfig.types.trustComponent ??= [];\n\t\tcoreConfig.types.trustComponent.push({\n\t\t\ttype: TrustComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.trustGeneratorComponent ??= [];\n\t\tconst trustGeneratorTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tTrustGeneratorComponentType\n\t\t>(envVars, \"trustGenerators\", Object.values(TrustGeneratorComponentType));\n\n\t\tfor (const trustGeneratorType of trustGeneratorTypes) {\n\t\t\tcoreConfig.types.trustGeneratorComponent.push({\n\t\t\t\ttype: trustGeneratorType,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tverificationMethodId: envVars.trustVerificationMethodId ?? \"\",\n\t\t\t\t\t\ttokenTtlInSeconds: envCount(envVars, \"trustJwtTtl\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.trustVerifierComponent ??= [];\n\t\tconst trustVerifierTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tTrustVerifierComponentType\n\t\t>(envVars, \"trustVerifiers\", Object.values(TrustVerifierComponentType));\n\t\tfor (const trustVerifierType of trustVerifierTypes) {\n\t\t\tif (trustVerifierType === TrustVerifierComponentType.IdentityAllowDeny) {\n\t\t\t\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\t\ttype: TrustVerifierComponentType.IdentityAllowDeny,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tallowIdentities: commaSeparatedListToArray<string>(envVars.trustIdentitiesAllow),\n\t\t\t\t\t\t\tdenyIdentities: commaSeparatedListToArray<string>(envVars.trustIdentitiesDeny)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (trustVerifierType === TrustVerifierComponentType.JwtVerifiableCredential) {\n\t\t\t\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\t\ttype: TrustVerifierComponentType.JwtVerifiableCredential\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Configures the rights management.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the rights management configuration has been applied.\n */\nasync function configureRightsManagement(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isRightsManagementRequired(envVars)) {\n\t\tcoreConfig.types.rightsManagementPapComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPapComponent.push({\n\t\t\ttype: RightsManagementPapComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPmpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPmpComponent.push({\n\t\t\ttype: RightsManagementPmpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPipComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPipComponent.push({\n\t\t\ttype: RightsManagementPipComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPxpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPxpComponent.push({\n\t\t\ttype: RightsManagementPxpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPdpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPdpComponent.push({\n\t\t\ttype: RightsManagementPdpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPepComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPepComponent.push({\n\t\t\ttype: RightsManagementPepComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPnpComponent ??= [];\n\n\t\t// Single source of truth for the rights-management mount path.\n\t\tconst rightsManagementPath = envVars.rightsManagementCallbackPath ?? \"rights-management\";\n\n\t\t// We add a multi instance REST client for the remote negotiations\n\t\t// use a dummy endpoint for now as the actual endpoint will be provided in the config\n\t\t// of the policy negotiator when it is used for remote negotiations\n\t\t// We must add it before the service as the service needs to be able to request\n\t\t// the REST client type from the engine core to be able to support remote negotiations\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.RestClient,\n\t\t\toptions: {\n\t\t\t\t// The endpoint is required in config, but as this is multi-instance\n\t\t\t\t// the actual endpoint will be provided in the config when it is constructed\n\t\t\t\tendpoint: \"http://localhost\",\n\t\t\t\tpathPrefix: rightsManagementPath\n\t\t\t},\n\t\t\tisMultiInstance: true,\n\t\t\tfeatures: [\"remote\"]\n\t\t});\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tcallbackPath: rightsManagementPath,\n\t\t\t\t\tincludeErrorDetails: coreConfig.debug ?? false,\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"rightsManagementMutexTimeout\")\n\t\t\t\t}\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPnapComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPnapComponent.push({\n\t\t\ttype: RightsManagementPnapComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"rightsManagementMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPolicyArbiterComponent ??= [];\n\t\tconst policyArbiterTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyArbiterComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyArbiters\",\n\t\t\tObject.values(RightsManagementPolicyArbiterComponentType)\n\t\t);\n\t\tfor (const policyArbiterType of policyArbiterTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyArbiterComponent.push({\n\t\t\t\ttype: policyArbiterType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyObligationEnforcerComponent ??= [];\n\t\tconst policyObligationEnforcerTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyObligationEnforcerComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyObligationEnforcers\",\n\t\t\tObject.values(RightsManagementPolicyObligationEnforcerComponentType)\n\t\t);\n\t\tfor (const policyObligationEnforcerType of policyObligationEnforcerTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyObligationEnforcerComponent.push({\n\t\t\t\ttype: policyObligationEnforcerType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyEnforcementProcessorComponent ??= [];\n\t\tconst policyEnforcementProcessTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyEnforcementProcessorComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyEnforcementProcessors\",\n\t\t\tObject.values(RightsManagementPolicyEnforcementProcessorComponentType)\n\t\t);\n\t\tfor (const policyEnforcementProcessorType of policyEnforcementProcessTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyEnforcementProcessorComponent.push({\n\t\t\t\ttype: policyEnforcementProcessorType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyExecutionActionComponent ??= [];\n\t\tconst policyExecutionActionTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyExecutionActionComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyExecutionActions\",\n\t\t\tObject.values(RightsManagementPolicyExecutionActionComponentType)\n\t\t);\n\t\tfor (const policyExecutionActionType of policyExecutionActionTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyExecutionActionComponent.push({\n\t\t\t\ttype: policyExecutionActionType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyInformationSourceComponent ??= [];\n\t\tconst policyInformationSourceTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyInformationSourceComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyInformationSources\",\n\t\t\tObject.values(RightsManagementPolicyInformationSourceComponentType)\n\t\t);\n\t\tfor (const policyInformationSourceType of policyInformationSourceTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyInformationSourceComponent.push({\n\t\t\t\ttype: policyInformationSourceType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyRequesterComponent ??= [];\n\t\tconst policyRequesterTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyRequesterComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyRequesters\",\n\t\t\tObject.values(RightsManagementPolicyRequesterComponentType)\n\t\t);\n\t\tfor (const policyRequesterType of policyRequesterTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyRequesterComponent.push({\n\t\t\t\ttype: policyRequesterType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyNegotiatorComponent ??= [];\n\t\tconst policyNegotiatorTypes = envListToArray<\n\t\t\tIEngineEnvironmentVariables,\n\t\t\tRightsManagementPolicyNegotiatorComponentType\n\t\t>(\n\t\t\tenvVars,\n\t\t\t\"rightsManagementPolicyNegotiators\",\n\t\t\tObject.values(RightsManagementPolicyNegotiatorComponentType)\n\t\t);\n\t\tfor (const policyNegotiatorType of policyNegotiatorTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyNegotiatorComponent.push({\n\t\t\t\ttype: policyNegotiatorType\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Configures the task scheduler.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the task scheduler configuration has been applied.\n */\nasync function configureTaskScheduler(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isTaskSchedulerRequired(envVars)) {\n\t\tcoreConfig.types.taskSchedulerComponent ??= [];\n\t\tcoreConfig.types.taskSchedulerComponent.push({\n\t\t\ttype: TaskSchedulerComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the federated catalogue.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the federated catalogue configuration has been applied.\n */\nasync function configureFederatedCatalogue(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isFederatedCatalogueRequired(envVars)) {\n\t\tcoreConfig.types.federatedCatalogueComponent ??= [];\n\n\t\tif (Is.stringValue(envVars.federatedCatalogueRemoteEndpoint)) {\n\t\t\tcoreConfig.types.federatedCatalogueComponent.push({\n\t\t\t\ttype: FederatedCatalogueComponentType.RestClient,\n\t\t\t\toptions: {\n\t\t\t\t\tendpoint: envVars.federatedCatalogueRemoteEndpoint,\n\t\t\t\t\tpathPrefix: envVars.federatedCatalogueRestClientPathPrefix ?? \"catalog\"\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tcoreConfig.types.federatedCatalogueComponent.push({\n\t\t\t\ttype: FederatedCatalogueComponentType.Service,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"federatedCatalogueMutexTimeout\")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcoreConfig.types.federatedCatalogueFilterComponent ??= [];\n\t\t\tconst filters = envListToArray<\n\t\t\t\tIEngineEnvironmentVariables,\n\t\t\t\tFederatedCatalogueFilterComponentType\n\t\t\t>(envVars, \"federatedCatalogueFilters\", Object.values(FederatedCatalogueFilterComponentType));\n\n\t\t\tfor (const filter of filters) {\n\t\t\t\tcoreConfig.types.federatedCatalogueFilterComponent.push({\n\t\t\t\t\ttype: filter,\n\t\t\t\t\toptions: {}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Configures the dataspace control plane and data plane.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the dataspace configuration has been applied.\n */\nasync function configureDataspace(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (envBoolean(envVars, \"dataspaceEnabled\", false)) {\n\t\tcoreConfig.types.dataspaceControlPlaneComponent ??= [];\n\t\t// We add a multi instance REST client for remote/consumer-initiated transfers.\n\t\tcoreConfig.types.dataspaceControlPlaneComponent.push({\n\t\t\ttype: DataspaceControlPlaneComponentType.RestClient,\n\t\t\toptions: {\n\t\t\t\tendpoint: \"http://localhost\"\n\t\t\t},\n\t\t\tisMultiInstance: true,\n\t\t\tfeatures: [\"remote\"]\n\t\t});\n\t\tcoreConfig.types.dataspaceControlPlaneComponent.push({\n\t\t\ttype: DataspaceControlPlaneComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\t// Must match the control-plane REST mount, as it is combined with the public origin\n\t\t\t\t\t// to build the consumer's advertised callback address;\n\t\t\t\t\tcallbackPath: envVars.dataspaceCallbackPath ?? \"dataspace-control-plane\",\n\t\t\t\t\t// Base mount path of the data plane only; the transfer handlers append the\n\t\t\t\t\t// sub-paths themselves (`/entities` for PULL, `/inbox` for PUSH).\n\t\t\t\t\tdataPlanePath: envVars.dataspaceDataPlanePath,\n\t\t\t\t\tautoStartTransfers: envBoolean(envVars, \"dataspaceAutoStartTransfers\", false),\n\t\t\t\t\tstalledNegotiationTimeoutMs: envSecToMs(envVars, \"dataspaceStalledNegotiationTimeout\"),\n\t\t\t\t\tstalledTransferTimeoutMs: envSecToMs(envVars, \"dataspaceStalledTransferTimeout\"),\n\t\t\t\t\tproviderTransferIdleTimeoutMs: envSecToMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"dataspaceProviderTransferIdleTimeout\"\n\t\t\t\t\t),\n\t\t\t\t\tproviderTransferPolicySweepIntervalMs: envSecToMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"dataspaceProviderTransferPolicySweepInterval\"\n\t\t\t\t\t),\n\t\t\t\t\tagreementUnusedThresholdMs: envMs(envVars, \"dataspaceAgreementUnusedThreshold\"),\n\t\t\t\t\tagreementSweepIntervalMs: envMs(envVars, \"dataspaceAgreementSweepInterval\")\n\t\t\t\t}\n\t\t\t},\n\t\t\tisDefault: true\n\t\t});\n\n\t\tcoreConfig.types.dataspaceDataPlaneComponent ??= [];\n\t\tcoreConfig.types.dataspaceDataPlaneComponent.push({\n\t\t\ttype: DataspaceDataPlaneComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tretainActivityLogsForMs: envSecToMs(envVars, \"dataspaceRetainActivityLogsFor\"),\n\t\t\t\t\tactivityLogsCleanUpIntervalMs: envSecToMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"dataspaceActivityLogsCleanupInterval\"\n\t\t\t\t\t),\n\t\t\t\t\tretryCount: envCount(envVars, \"dataspaceRetryCount\"),\n\t\t\t\t\tpushRetryCount: envCount(envVars, \"dataspacePushRetryCount\"),\n\t\t\t\t\tpushRetryBaseDelayMs: envMs(envVars, \"dataspacePushRetryBaseDelay\"),\n\t\t\t\t\tpushTimeoutMs: envMs(envVars, \"dataspacePushTimeout\"),\n\t\t\t\t\tpushSubscriptionCleanupIntervalMs: envMs(\n\t\t\t\t\t\tenvVars,\n\t\t\t\t\t\t\"dataspacePushSubscriptionCleanupInterval\"\n\t\t\t\t\t),\n\t\t\t\t\tagreementCacheTtlMs: envMs(envVars, \"dataspaceAgreementCacheTtl\"),\n\t\t\t\t\tagreementCacheMutexTimeoutMs: envMs(envVars, \"dataspaceAgreementCacheMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the DLT.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n * @returns A promise that resolves when the DLT configuration has been applied.\n */\nasync function configureDlt(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\t// Create centralized DLT configuration for IOTA if essential IOTA variables are set\n\tif (Is.stringValue(envVars.iotaNodeEndpoint) && Is.stringValue(envVars.iotaNetwork)) {\n\t\tcoreConfig.types.dltConfig ??= [];\n\n\t\tconst gasStationConfig =\n\t\t\tIs.stringValue(envVars.iotaGasStationEndpoint) &&\n\t\t\tIs.stringValue(envVars.iotaGasStationAuthToken)\n\t\t\t\t? {\n\t\t\t\t\t\tgasStationUrl: envVars.iotaGasStationEndpoint,\n\t\t\t\t\t\tgasStationAuthToken: envVars.iotaGasStationAuthToken\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tcoreConfig.types.dltConfig.push({\n\t\t\ttype: DltConfigType.Iota,\n\t\t\tisDefault: true,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tclientOptions: {\n\t\t\t\t\t\turl: envVars.iotaNodeEndpoint ?? \"\"\n\t\t\t\t\t},\n\t\t\t\t\tnetwork: envVars.iotaNetwork ?? \"\",\n\t\t\t\t\tcoinType: envCount(envVars, \"iotaCoinType\"),\n\t\t\t\t\tgasStation: gasStationConfig,\n\t\t\t\t\tgasBudget: envCount(envVars, \"iotaGasBudget\"),\n\t\t\t\t\tgasReservationDuration: envSeconds(envVars, \"iotaGasReservationDuration\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Checks if the trust subsystem is required.\n * Returns true when any component that depends on the trust subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if rights-management, or dataspace is enabled.\n */\nexport function isTrustRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tisRightsManagementRequired(envVars) ||\n\t\tenvBoolean(envVars, \"dataspaceEnabled\", false) ||\n\t\tisFederatedCatalogueRequired(envVars)\n\t);\n}\n\n/**\n * Checks if the background tasks subsystem is required.\n * Returns true when any component that depends on the background tasks subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if dataspace or verifiable storage is enabled.\n */\nexport function isBackgroundTasksRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvBoolean(envVars, \"dataspaceEnabled\", false) ||\n\t\tisImmutableProofRequired(envVars) ||\n\t\tenvBoolean(envVars, \"healthEnabled\", false) ||\n\t\tcommaSeparatedListToArray<TelemetryConnectorType>(envVars.telemetryConnector).includes(\n\t\t\tTelemetryConnectorType.EntityStorage\n\t\t)\n\t);\n}\n\n/**\n * Checks if the immutable proof subsystem is required.\n * Returns true when any component that depends on the immutable proof subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if verifiable storage is enabled.\n */\nexport function isImmutableProofRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvBoolean(envVars, \"auditableItemGraphEnabled\", false) ||\n\t\tenvBoolean(envVars, \"auditableItemStreamEnabled\", false) ||\n\t\tenvBoolean(envVars, \"documentManagementEnabled\", false)\n\t);\n}\n\n/**\n * Checks if the federated catalogue subsystem is required.\n * Returns true when the catalogue is explicitly enabled, a remote endpoint is configured, filters are set, or dataspace is enabled.\n * @param envVars The environment variables.\n * @returns True if the federated catalogue is required.\n */\nexport function isFederatedCatalogueRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvBoolean(envVars, \"federatedCatalogueEnabled\", false) ||\n\t\tIs.stringValue(envVars.federatedCatalogueRemoteEndpoint) ||\n\t\tIs.stringValue(envVars.federatedCatalogueFilters) ||\n\t\tenvBoolean(envVars, \"dataspaceEnabled\", false)\n\t);\n}\n\n/**\n * Checks if the rights management subsystem is required.\n * Returns true when any component that depends on the rights management subsystem is enabled.\n * Note: rights management has no standalone enable flag - it is gated entirely on\n * `dataspaceEnabled`. Setting `TWIN_RIGHTS_MANAGEMENT_*` env var in isolation does not\n * enable the subsystem; `TWIN_DATASPACE_ENABLED` must also be true.\n * @param envVars The environment variables.\n * @returns True if rights management is enabled.\n */\nexport function isRightsManagementRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn envBoolean(envVars, \"dataspaceEnabled\", false);\n}\n\n/**\n * Checks if the task scheduler subsystem is required.\n * Returns true when any component that depends on the task scheduler subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if task scheduler is enabled.\n */\nexport function isTaskSchedulerRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvBoolean(envVars, \"taskSchedulerEnabled\", false) ||\n\t\tenvBoolean(envVars, \"dataspaceEnabled\", false) ||\n\t\tisRightsManagementRequired(envVars) ||\n\t\tisAuthEntityStorageRequired(envVars) ||\n\t\tisImmutableProofRequired(envVars) ||\n\t\tisMailboxEnabled(envVars)\n\t);\n}\n\n/**\n * Checks if the automation subsystem is required.\n * Returns true when any component that depends on the automation subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if automation is enabled.\n */\nexport function isAutomationRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn isRightsManagementRequired(envVars);\n}\n\n/**\n * Checks if the telemetry subsystem is enabled.\n * Returns true when any component that depends on the telemetry subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if telemetry is enabled.\n */\nexport function isTelemetryEnabled(envVars: IEngineEnvironmentVariables): boolean {\n\treturn commaSeparatedListToArray<TelemetryConnectorType>(envVars.telemetryConnector).some(\n\t\tt => t === TelemetryConnectorType.EntityStorage || t === TelemetryConnectorType.OpenTelemetry\n\t);\n}\n\n/**\n * Checks if the tracing subsystem is enabled.\n * Returns true when any component that depends on the tracing subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if tracing is enabled.\n */\nexport function isTracingEnabled(envVars: IEngineEnvironmentVariables): boolean {\n\treturn commaSeparatedListToArray<TracingConnectorType>(envVars.tracingConnector).some(\n\t\tt =>\n\t\t\tt === TracingConnectorType.EntityStorage ||\n\t\t\tt === TracingConnectorType.OpenTelemetry ||\n\t\t\tt === TracingConnectorType.Console\n\t);\n}\n\n/**\n * Checks if the mailbox subsystem is enabled.\n * Returns true when any component that depends on the mailbox subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if mailbox is enabled.\n */\nexport function isMailboxEnabled(envVars: IEngineEnvironmentVariables): boolean {\n\treturn commaSeparatedListToArray<EmailProtocolConnectorType>(envVars.emailProtocolConnector).some(\n\t\tt =>\n\t\t\tt === EmailProtocolConnectorType.Imap ||\n\t\t\tt === EmailProtocolConnectorType.Pop3 ||\n\t\t\tt === EmailProtocolConnectorType.Gmail ||\n\t\t\tt === EmailProtocolConnectorType.Outlook\n\t);\n}\n"]}