@twin.org/node-core 0.9.2-next.11 → 0.9.2-next.13
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.
- package/dist/es/builders/engineEnvBuilder.js +13 -1
- package/dist/es/builders/engineEnvBuilder.js.map +1 -1
- package/dist/es/builders/engineServerEnvBuilder.js +28 -0
- package/dist/es/builders/engineServerEnvBuilder.js.map +1 -1
- package/dist/es/models/IEngineEnvironmentVariables.js.map +1 -1
- package/dist/es/models/IEngineServerEnvironmentVariables.js.map +1 -1
- package/dist/es/models/engineEnvironmentVariableKeys.js +2 -0
- package/dist/es/models/engineEnvironmentVariableKeys.js.map +1 -1
- package/dist/es/models/engineServerEnvironmentVariableKeys.js +3 -1
- package/dist/es/models/engineServerEnvironmentVariableKeys.js.map +1 -1
- package/dist/es/node.js +1 -1
- package/dist/es/node.js.map +1 -1
- package/dist/types/builders/engineEnvBuilder.d.ts +7 -0
- package/dist/types/models/IEngineEnvironmentVariables.d.ts +8 -0
- package/dist/types/models/IEngineServerEnvironmentVariables.d.ts +8 -0
- package/docs/changelog.md +15 -0
- package/docs/reference/functions/isTracingRequired.md +20 -0
- package/docs/reference/index.md +1 -0
- package/docs/reference/interfaces/IEngineEnvironmentVariables.md +16 -0
- package/docs/reference/interfaces/IEngineServerEnvironmentVariables.md +16 -0
- package/package.json +2 -1
|
@@ -1432,7 +1432,9 @@ async function configureDataspace(coreConfig, envVars) {
|
|
|
1432
1432
|
stalledNegotiationTimeoutMs: envSecToMs(envVars, "dataspaceStalledNegotiationTimeout"),
|
|
1433
1433
|
stalledTransferTimeoutMs: envSecToMs(envVars, "dataspaceStalledTransferTimeout"),
|
|
1434
1434
|
providerTransferIdleTimeoutMs: envSecToMs(envVars, "dataspaceProviderTransferIdleTimeout"),
|
|
1435
|
-
providerTransferPolicySweepIntervalMs: envSecToMs(envVars, "dataspaceProviderTransferPolicySweepInterval")
|
|
1435
|
+
providerTransferPolicySweepIntervalMs: envSecToMs(envVars, "dataspaceProviderTransferPolicySweepInterval"),
|
|
1436
|
+
agreementUnusedThresholdMs: envMs(envVars, "dataspaceAgreementUnusedThreshold"),
|
|
1437
|
+
agreementSweepIntervalMs: envMs(envVars, "dataspaceAgreementSweepInterval")
|
|
1436
1438
|
}
|
|
1437
1439
|
},
|
|
1438
1440
|
isDefault: true
|
|
@@ -1578,4 +1580,14 @@ export function isTelemetryRequired(envVars) {
|
|
|
1578
1580
|
return (envVars.telemetryConnector === TelemetryConnectorType.EntityStorage ||
|
|
1579
1581
|
envVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry);
|
|
1580
1582
|
}
|
|
1583
|
+
/**
|
|
1584
|
+
* Checks if the tracing subsystem is required.
|
|
1585
|
+
* Returns true when any component that depends on the tracing subsystem is enabled.
|
|
1586
|
+
* @param envVars The environment variables.
|
|
1587
|
+
* @returns True if tracing is enabled.
|
|
1588
|
+
*/
|
|
1589
|
+
export function isTracingRequired(envVars) {
|
|
1590
|
+
return (envVars.tracingConnector === TracingConnectorType.EntityStorage ||
|
|
1591
|
+
envVars.tracingConnector === TracingConnectorType.OpenTelemetry);
|
|
1592
|
+
}
|
|
1581
1593
|
//# sourceMappingURL=engineEnvBuilder.js.map
|
|
@@ -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 path from \"node:path\";\nimport { Is, Mutex } from \"@twin.org/core\";\nimport type { IIotaConfig } from \"@twin.org/dlt-iota\";\nimport {\n\tAttestationComponentType,\n\tAttestationConnectorType,\n\tAuditableItemGraphComponentType,\n\tAuditableItemStreamComponentType,\n\ttype AutomationActionConfig,\n\ttype AutomationActionType,\n\tAutomationComponentType,\n\tBackgroundTaskComponentType,\n\tBlobStorageComponentType,\n\tBlobStorageConnectorType,\n\tContextIdHandlerComponentType,\n\ttype DataConverterConnectorType,\n\ttype DataExtractorConnectorType,\n\tDataProcessingComponentType,\n\tDataspaceControlPlaneComponentType,\n\tDataspaceDataPlaneComponentType,\n\ttype DltConfig,\n\tDltConfigType,\n\tDocumentManagementComponentType,\n\tEngineTypeHelper,\n\tEntityStorageConnectorType,\n\tEventBusComponentType,\n\tEventBusConnectorType,\n\tFaucetConnectorType,\n\tFederatedCatalogueComponentType,\n\ttype FederatedCatalogueFilterComponentType,\n\tHealthComponentType,\n\tIdentityComponentType,\n\tIdentityConnectorType,\n\tIdentityProfileComponentType,\n\tIdentityProfileConnectorType,\n\tIdentityResolverComponentType,\n\tIdentityResolverConnectorType,\n\ttype IEngineConfig,\n\tImmutableProofComponentType,\n\tLoggingComponentType,\n\tLoggingConnectorType,\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\ttype RightsManagementPolicyArbiterComponentType,\n\ttype RightsManagementPolicyEnforcementProcessorComponentType,\n\ttype RightsManagementPolicyExecutionActionComponentType,\n\ttype RightsManagementPolicyInformationSourceComponentType,\n\ttype RightsManagementPolicyNegotiatorComponentType,\n\ttype RightsManagementPolicyObligationEnforcerComponentType,\n\ttype RightsManagementPolicyRequesterComponentType,\n\tRightsManagementPxpComponentType,\n\tSchemaVersionMigrationComponentType,\n\tTaskSchedulerComponentType,\n\tTelemetryComponentType,\n\tTelemetryConnectorType,\n\tTenantAdminComponentType,\n\tTracingComponentType,\n\tTracingConnectorType,\n\tTrustComponentType,\n\ttype TrustGeneratorComponentType,\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 { CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from \"../defaults.js\";\nimport { isAuthEntityStorageRequired } from \"./engineServerEnvBuilder.js\";\nimport {\n\tcommaSeparatedListToArray,\n\tenvBoolean,\n\tenvCount,\n\tenvDateTime,\n\tenvInteger,\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\tsilentLoggers: commaSeparatedListToArray(envVars.loggingSilentComponents),\n\t\ttypes: {}\n\t};\n\n\tconst mutexTimeoutMs = envMs(envVars, \"mutexTimeoutDefault\");\n\tif (!Is.empty(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 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 = commaSeparatedListToArray<EntityStorageConnectorType>(\n\t\tenvVars.entityStorageConnectorType\n\t);\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.Memory)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.Memory,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.File)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.File,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tdirectory: envVars.storageFileRoot ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t},\n\t\t\t\tfolderPrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.AwsDynamoDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.AwsDynamoDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsDynamodbRegion ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsDynamodbAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsDynamodbAccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsDynamodbSecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsDynamodbEndpoint,\n\t\t\t\t\tconnectionTimeoutMs: envMs(envVars, \"awsDynamodbConnectionTimeout\"),\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.AzureCosmosDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.AzureCosmosDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tendpoint: envVars.azureCosmosdbEndpoint ?? \"\",\n\t\t\t\t\tkey: envVars.azureCosmosdbKey ?? \"\",\n\t\t\t\t\tdatabaseId: envVars.azureCosmosdbDatabaseId ?? \"\",\n\t\t\t\t\tcontainerId: envVars.azureCosmosdbContainerId ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.GcpFirestoreDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.GcpFirestoreDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tprojectId: envVars.gcpFirestoreProjectId ?? \"\",\n\t\t\t\t\tcredentials: envVars.gcpFirestoreCredentials ?? \"\",\n\t\t\t\t\tdatabaseId: envVars.gcpFirestoreDatabaseId ?? \"\",\n\t\t\t\t\tcollectionName: envVars.gcpFirestoreCollectionName ?? \"\",\n\t\t\t\t\tendpoint: envVars.gcpFirestoreEndpoint ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.ScyllaDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.ScyllaDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thosts: commaSeparatedListToArray(envVars.scylladbHosts),\n\t\t\t\t\tlocalDataCenter: envVars.scylladbLocalDataCenter ?? \"\",\n\t\t\t\t\tkeyspace: envVars.scylladbKeyspace ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"scylladbPort\"),\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\tpool: {\n\t\t\t\t\t\tcoreConnectionsPerHost: envCount(envVars, \"scylladbPoolCoreConnectionsPerHost\"),\n\t\t\t\t\t\tmaxRequestsPerConnection: envCount(envVars, \"scylladbPoolMaxRequestsPerConnection\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.MySqlDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.MySqlDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thost: envVars.mySqlHost ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"mySqlPort\"),\n\t\t\t\t\tuser: envVars.mySqlUser ?? \"\",\n\t\t\t\t\tpassword: envVars.mySqlPassword ?? \"\",\n\t\t\t\t\tdatabase: envVars.mySqlDatabase ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\tpool: {\n\t\t\t\t\t\tconnectionLimit: envCount(envVars, \"mySqlPoolConnectionLimit\"),\n\t\t\t\t\t\tmaxIdle: envCount(envVars, \"mySqlPoolMaxIdle\"),\n\t\t\t\t\t\tidleTimeout: envMs(envVars, \"mySqlPoolIdleTimeout\"),\n\t\t\t\t\t\tenableKeepAlive: envBoolean(envVars, \"mySqlPoolEnableKeepAlive\"),\n\t\t\t\t\t\twaitForConnections: envBoolean(envVars, \"mySqlPoolWaitForConnections\"),\n\t\t\t\t\t\tqueueLimit: envCount(envVars, \"mySqlPoolQueueLimit\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.MongoDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.MongoDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thost: envVars.mongoDbHost ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"mongoDbPort\"),\n\t\t\t\t\tuser: envVars.mongoDbUser ?? \"\",\n\t\t\t\t\tpassword: envVars.mongoDbPassword ?? \"\",\n\t\t\t\t\tdatabase: envVars.mongoDbDatabase ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\tpool: {\n\t\t\t\t\t\tmaxPoolSize: envCount(envVars, \"mongoDbPoolMaxPoolSize\"),\n\t\t\t\t\t\tminPoolSize: envCount(envVars, \"mongoDbPoolMinPoolSize\"),\n\t\t\t\t\t\tmaxIdleTimeMs: envMs(envVars, \"mongoDbPoolMaxIdleTime\"),\n\t\t\t\t\t\twaitQueueTimeoutMs: envMs(envVars, \"mongoDbPoolWaitQueueTimeout\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.PostgreSql)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.PostgreSql,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thost: envVars.postgreSqlHost ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"postgreSqlPort\"),\n\t\t\t\t\tuser: envVars.postgreSqlUser ?? \"\",\n\t\t\t\t\tpassword: envVars.postgreSqlPassword ?? \"\",\n\t\t\t\t\tdatabase: envVars.postgreSqlDatabase ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\tpool: {\n\t\t\t\t\t\tmax: envCount(envVars, \"postgreSqlPoolMax\"),\n\t\t\t\t\t\tidleTimeout: envSeconds(envVars, \"postgreSqlPoolIdleTimeout\"),\n\t\t\t\t\t\tconnectTimeout: envSeconds(envVars, \"postgreSqlPoolConnectTimeout\"),\n\t\t\t\t\t\tmaxLifetime: envSeconds(envVars, \"postgreSqlPoolMaxLifetime\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\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 = commaSeparatedListToArray(envVars.blobStorageConnectorType);\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.Memory)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.Memory\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.File)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.File,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tdirectory: Is.stringValue(envVars.storageFileRoot)\n\t\t\t\t\t\t? path.join(envVars.storageFileRoot, \"blob-storage\")\n\t\t\t\t\t\t: \"\"\n\t\t\t\t},\n\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.Ipfs)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.Ipfs,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tapiUrl: envVars.ipfsApiUrl ?? \"\",\n\t\t\t\t\tbearerToken: envVars.ipfsBearerToken\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.AwsS3)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.AwsS3,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsS3Region ?? \"\",\n\t\t\t\t\tbucketName: envVars.awsS3BucketName ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsS3AuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsS3AccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsS3SecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsS3Endpoint\n\t\t\t\t},\n\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.AzureStorage)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.AzureStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\taccountName: envVars.azureStorageAccountName ?? \"\",\n\t\t\t\t\taccountKey: envVars.azureStorageAccountKey ?? \"\",\n\t\t\t\t\tcontainerName: envVars.azureStorageContainerName ?? \"\",\n\t\t\t\t\tendpoint: envVars.azureStorageEndpoint ?? \"\"\n\t\t\t\t},\n\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.GcpStorage)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.GcpStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tprojectId: envVars.gcpStorageProjectId ?? \"\",\n\t\t\t\t\tcredentials: envVars.gcpStorageCredentials ?? \"\",\n\t\t\t\t\tbucketName: envVars.gcpStorageBucketName ?? \"\",\n\t\t\t\t\tapiEndpoint: envVars.gcpFirestoreEndpoint\n\t\t\t\t},\n\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\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}\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 = commaSeparatedListToArray<LoggingConnectorType>(\n\t\tenvVars.loggingConnector\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\tmutexTimeoutMs: envMs(envVars, \"loggingMutexTimeout\")\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\tmutexTimeoutMs: envMs(envVars, \"loggingMutexTimeout\")\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\tif (envVars.vaultConnector === 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 (envVars.vaultConnector === 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});\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\tif (envVars.eventBusConnector === 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\tif (envVars.telemetryConnector === TelemetryConnectorType.EntityStorage) {\n\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\ttype: TelemetryConnectorType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"telemetryMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (envVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry) {\n\t\tlet readers: IOpenTelemetryTelemetryConnectorConfig[\"readers\"];\n\t\tif (envVars.openTelemetryReader === OpenTelemetryReaderTypes.Prometheus) {\n\t\t\treaders = {\n\t\t\t\tprometheus: {\n\t\t\t\t\ttype: OpenTelemetryReaderTypes.Prometheus,\n\t\t\t\t\tport: envCount(envVars, \"openTelemetryPrometheusPort\")\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\ttype: TelemetryConnectorType.OpenTelemetry,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"telemetryMutexTimeout\"),\n\t\t\t\t\tmeterName: envVars.openTelemetryMeterName,\n\t\t\t\t\tmeterVersion: envVars.openTelemetryMeterVersion,\n\t\t\t\t\treaders\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.telemetryConnector.length > 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 (isTelemetryRequired(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\tisCloneable: false\n\t\t});\n\n\t\tcoreConfig.types.metricsProducerComponent ??= [];\n\n\t\tconst metricsProducers = commaSeparatedListToArray(\n\t\t\tenvVars.telemetryMetricsProducers ??\n\t\t\t\t[MetricsProducerComponentType.System, MetricsProducerComponentType.Process].join(\",\")\n\t\t);\n\n\t\tfor (const producerType of metricsProducers) {\n\t\t\tcoreConfig.types.metricsProducerComponent.push({\n\t\t\t\ttype: producerType as MetricsProducerComponentType,\n\t\t\t\toptions: { maxHistory: envCount(envVars, \"telemetryMetricsProducerMaxHistory\") },\n\t\t\t\tisCloneable: false\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\tif (envVars.tracingConnector === TracingConnectorType.EntityStorage) {\n\t\tcoreConfig.types.tracingConnector.push({\n\t\t\ttype: TracingConnectorType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"tracingMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (envVars.tracingConnector === TracingConnectorType.OpenTelemetry) {\n\t\tconst otelTracingConfig: IOpenTelemetryTracingConnectorConfig = {\n\t\t\ttracerName: envVars.openTelemetryTracingTracerName,\n\t\t\ttracerVersion: envVars.openTelemetryTracingTracerVersion\n\t\t};\n\t\tif (Is.stringValue(envVars.openTelemetryTracingEndpoint)) {\n\t\t\totelTracingConfig.exporters = {\n\t\t\t\totlp: {\n\t\t\t\t\tendpoint: envVars.openTelemetryTracingEndpoint,\n\t\t\t\t\tprocessor:\n\t\t\t\t\t\t(envVars.openTelemetryTracingProcessor as OpenTelemetryProcessorTypes) ??\n\t\t\t\t\t\tOpenTelemetryProcessorTypes.Batch\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcoreConfig.types.tracingConnector.push({\n\t\t\ttype: TracingConnectorType.OpenTelemetry,\n\t\t\toptions: {\n\t\t\t\tconfig: otelTracingConfig\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.tracingConnector.length > 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 = commaSeparatedListToArray(envVars.automationActionTypes);\n\n\t\tif (Is.arrayValue(automationActionTypes)) {\n\t\t\tcoreConfig.types.automationAction ??= [];\n\n\t\t\tfor (const actionType of automationActionTypes) {\n\t\t\t\tcoreConfig.types.automationAction.push({\n\t\t\t\t\ttype: actionType as AutomationActionType,\n\t\t\t\t\tisMultiInstance: true\n\t\t\t\t} as unknown as AutomationActionConfig);\n\t\t\t}\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}\n\t\t\t},\n\t\t\tisCloneable: false\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\tisCloneable: false\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});\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});\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});\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\tif (envBoolean(envVars, \"messagingEnabled\", false)) {\n\t\tcoreConfig.types.messagingEmailConnector ??= [];\n\t\tcoreConfig.types.messagingSmsConnector ??= [];\n\t\tcoreConfig.types.messagingPushNotificationConnector ??= [];\n\n\t\tif (envVars.messagingEmailConnector === MessagingEmailConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\t\ttype: MessagingEmailConnectorType.EntityStorage\n\t\t\t});\n\t\t} else if (envVars.messagingEmailConnector === MessagingEmailConnectorType.Aws) {\n\t\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\t\ttype: MessagingEmailConnectorType.Aws,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsSesEndpoint\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (envVars.messagingSmsConnector === MessagingSmsConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.messagingSmsConnector.push({\n\t\t\t\ttype: MessagingSmsConnectorType.EntityStorage\n\t\t\t});\n\t\t} else if (envVars.messagingSmsConnector === MessagingSmsConnectorType.Aws) {\n\t\t\tcoreConfig.types.messagingSmsConnector.push({\n\t\t\t\ttype: MessagingSmsConnectorType.Aws,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsSesEndpoint\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (\n\t\t\tenvVars.messagingPushNotificationConnector ===\n\t\t\tMessagingPushNotificationConnectorType.EntityStorage\n\t\t) {\n\t\t\tcoreConfig.types.messagingPushNotificationConnector.push({\n\t\t\t\ttype: MessagingPushNotificationConnectorType.EntityStorage\n\t\t\t});\n\t\t} else if (\n\t\t\tenvVars.messagingPushNotificationConnector === MessagingPushNotificationConnectorType.Aws\n\t\t) {\n\t\t\tlet messagingApps;\n\t\t\tif (Is.stringValue(envVars.awsMessagingPushNotificationApplications)) {\n\t\t\t\ttry {\n\t\t\t\t\tmessagingApps = JSON.parse(envVars.awsMessagingPushNotificationApplications);\n\t\t\t\t} catch {}\n\t\t\t} else if (Is.array(envVars.awsMessagingPushNotificationApplications)) {\n\t\t\t\tmessagingApps = envVars.awsMessagingPushNotificationApplications;\n\t\t\t}\n\t\t\tcoreConfig.types.messagingPushNotificationConnector.push({\n\t\t\t\ttype: MessagingPushNotificationConnectorType.Aws,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsSesEndpoint,\n\t\t\t\t\t\tapplicationsSettings: messagingApps ?? []\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\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 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\tif (envVars.faucetConnector === FaucetConnectorType.EntityStorage) {\n\t\tcoreConfig.types.faucetConnector.push({\n\t\t\ttype: FaucetConnectorType.EntityStorage\n\t\t});\n\t} else if (\n\t\tenvVars.faucetConnector === 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\tif (envVars.walletConnector === WalletConnectorType.EntityStorage) {\n\t\tcoreConfig.types.walletConnector.push({\n\t\t\ttype: WalletConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.walletConnector === 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\tif (envVars.nftConnector === NftConnectorType.EntityStorage) {\n\t\tcoreConfig.types.nftConnector.push({\n\t\t\ttype: NftConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.nftConnector === 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\tif (envVars.notarizationConnector === NotarizationConnectorType.EntityStorage) {\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.notarizationConnector === 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\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\tif (envVars.identityConnector === IdentityConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityConnector.push({\n\t\t\ttype: IdentityConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.identityConnector === 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\tif (envVars.identityResolverConnector === IdentityResolverConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityResolverConnector.push({\n\t\t\ttype: IdentityResolverConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.identityResolverConnector === 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 (envVars.identityResolverConnector === 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\tif (envVars.identityProfileConnector === IdentityConnectorType.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\tif (envVars.attestationConnector === 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\tif (envBoolean(envVars, \"dataProcessingEnabled\", false)) {\n\t\tcoreConfig.types.dataProcessingComponent ??= [];\n\t\tcoreConfig.types.dataProcessingComponent.push({ type: DataProcessingComponentType.Service });\n\n\t\tcoreConfig.types.dataConverterConnector ??= [];\n\n\t\tconst converterConnectors = commaSeparatedListToArray(envVars.dataConverterConnectors);\n\t\tfor (const converterConnector of converterConnectors) {\n\t\t\tcoreConfig.types.dataConverterConnector.push({\n\t\t\t\ttype: converterConnector as DataConverterConnectorType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.dataExtractorConnector ??= [];\n\t\tconst extractorConnectors = commaSeparatedListToArray(envVars.dataExtractorConnectors);\n\t\tfor (const extractorConnector of extractorConnectors) {\n\t\t\tcoreConfig.types.dataExtractorConnector.push({\n\t\t\t\ttype: extractorConnector as DataExtractorConnectorType\n\t\t\t});\n\t\t}\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 = commaSeparatedListToArray(envVars.trustGenerators);\n\t\tfor (const trustGeneratorType of trustGeneratorTypes) {\n\t\t\tcoreConfig.types.trustGeneratorComponent.push({\n\t\t\t\ttype: trustGeneratorType as TrustGeneratorComponentType,\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 = commaSeparatedListToArray(envVars.trustVerifiers);\n\t\tfor (const trustVerifierType of trustVerifierTypes) {\n\t\t\tconst type = trustVerifierType as TrustVerifierComponentType;\n\n\t\t\tif (type === TrustVerifierComponentType.IdentityAllowDeny) {\n\t\t\t\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\t\ttype,\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 {\n\t\t\t\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\t\ttype\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 = commaSeparatedListToArray(envVars.rightsManagementPolicyArbiters);\n\t\tfor (const policyArbiterType of policyArbiterTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyArbiterComponent.push({\n\t\t\t\ttype: policyArbiterType as RightsManagementPolicyArbiterComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyObligationEnforcerComponent ??= [];\n\t\tconst policyObligationEnforcerTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyObligationEnforcers\n\t\t);\n\t\tfor (const policyObligationEnforcerType of policyObligationEnforcerTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyObligationEnforcerComponent.push({\n\t\t\t\ttype: policyObligationEnforcerType as RightsManagementPolicyObligationEnforcerComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyEnforcementProcessorComponent ??= [];\n\t\tconst policyEnforcementProcessTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyEnforcementProcessors\n\t\t);\n\t\tfor (const policyEnforcementProcessorType of policyEnforcementProcessTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyEnforcementProcessorComponent.push({\n\t\t\t\ttype: policyEnforcementProcessorType as RightsManagementPolicyEnforcementProcessorComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyExecutionActionComponent ??= [];\n\t\tconst policyExecutionActionTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyExecutionActions\n\t\t);\n\t\tfor (const policyExecutionActionType of policyExecutionActionTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyExecutionActionComponent.push({\n\t\t\t\ttype: policyExecutionActionType as RightsManagementPolicyExecutionActionComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyInformationSourceComponent ??= [];\n\t\tconst policyInformationSourceTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyInformationSources\n\t\t);\n\t\tfor (const policyInformationSourceType of policyInformationSourceTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyInformationSourceComponent.push({\n\t\t\t\ttype: policyInformationSourceType as RightsManagementPolicyInformationSourceComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyRequesterComponent ??= [];\n\t\tconst policyRequesterTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyRequesters\n\t\t);\n\t\tfor (const policyRequesterType of policyRequesterTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyRequesterComponent.push({\n\t\t\t\ttype: policyRequesterType as RightsManagementPolicyRequesterComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyNegotiatorComponent ??= [];\n\t\tconst policyNegotiatorTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyNegotiators\n\t\t);\n\t\tfor (const policyNegotiatorType of policyNegotiatorTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyNegotiatorComponent.push({\n\t\t\t\ttype: policyNegotiatorType as RightsManagementPolicyNegotiatorComponentType\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 = commaSeparatedListToArray(envVars.federatedCatalogueFilters);\n\n\t\t\tfor (const filter of filters) {\n\t\t\t\tcoreConfig.types.federatedCatalogueFilterComponent.push({\n\t\t\t\t\ttype: filter as FederatedCatalogueFilterComponentType,\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}\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 envBoolean(envVars, \"dataspaceEnabled\", false) || isImmutableProofRequired(envVars);\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);\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 required.\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 isTelemetryRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvVars.telemetryConnector === TelemetryConnectorType.EntityStorage ||\n\t\tenvVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry\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 path from \"node:path\";\nimport { Is, Mutex } from \"@twin.org/core\";\nimport type { IIotaConfig } from \"@twin.org/dlt-iota\";\nimport {\n\tAttestationComponentType,\n\tAttestationConnectorType,\n\tAuditableItemGraphComponentType,\n\tAuditableItemStreamComponentType,\n\ttype AutomationActionConfig,\n\ttype AutomationActionType,\n\tAutomationComponentType,\n\tBackgroundTaskComponentType,\n\tBlobStorageComponentType,\n\tBlobStorageConnectorType,\n\tContextIdHandlerComponentType,\n\ttype DataConverterConnectorType,\n\ttype DataExtractorConnectorType,\n\tDataProcessingComponentType,\n\tDataspaceControlPlaneComponentType,\n\tDataspaceDataPlaneComponentType,\n\ttype DltConfig,\n\tDltConfigType,\n\tDocumentManagementComponentType,\n\tEngineTypeHelper,\n\tEntityStorageConnectorType,\n\tEventBusComponentType,\n\tEventBusConnectorType,\n\tFaucetConnectorType,\n\tFederatedCatalogueComponentType,\n\ttype FederatedCatalogueFilterComponentType,\n\tHealthComponentType,\n\tIdentityComponentType,\n\tIdentityConnectorType,\n\tIdentityProfileComponentType,\n\tIdentityProfileConnectorType,\n\tIdentityResolverComponentType,\n\tIdentityResolverConnectorType,\n\ttype IEngineConfig,\n\tImmutableProofComponentType,\n\tLoggingComponentType,\n\tLoggingConnectorType,\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\ttype RightsManagementPolicyArbiterComponentType,\n\ttype RightsManagementPolicyEnforcementProcessorComponentType,\n\ttype RightsManagementPolicyExecutionActionComponentType,\n\ttype RightsManagementPolicyInformationSourceComponentType,\n\ttype RightsManagementPolicyNegotiatorComponentType,\n\ttype RightsManagementPolicyObligationEnforcerComponentType,\n\ttype RightsManagementPolicyRequesterComponentType,\n\tRightsManagementPxpComponentType,\n\tSchemaVersionMigrationComponentType,\n\tTaskSchedulerComponentType,\n\tTelemetryComponentType,\n\tTelemetryConnectorType,\n\tTenantAdminComponentType,\n\tTracingComponentType,\n\tTracingConnectorType,\n\tTrustComponentType,\n\ttype TrustGeneratorComponentType,\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 { CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from \"../defaults.js\";\nimport { isAuthEntityStorageRequired } from \"./engineServerEnvBuilder.js\";\nimport {\n\tcommaSeparatedListToArray,\n\tenvBoolean,\n\tenvCount,\n\tenvDateTime,\n\tenvInteger,\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\tsilentLoggers: commaSeparatedListToArray(envVars.loggingSilentComponents),\n\t\ttypes: {}\n\t};\n\n\tconst mutexTimeoutMs = envMs(envVars, \"mutexTimeoutDefault\");\n\tif (!Is.empty(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 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 = commaSeparatedListToArray<EntityStorageConnectorType>(\n\t\tenvVars.entityStorageConnectorType\n\t);\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.Memory)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.Memory,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.File)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.File,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tdirectory: envVars.storageFileRoot ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t},\n\t\t\t\tfolderPrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.AwsDynamoDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.AwsDynamoDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsDynamodbRegion ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsDynamodbAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsDynamodbAccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsDynamodbSecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsDynamodbEndpoint,\n\t\t\t\t\tconnectionTimeoutMs: envMs(envVars, \"awsDynamodbConnectionTimeout\"),\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.AzureCosmosDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.AzureCosmosDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tendpoint: envVars.azureCosmosdbEndpoint ?? \"\",\n\t\t\t\t\tkey: envVars.azureCosmosdbKey ?? \"\",\n\t\t\t\t\tdatabaseId: envVars.azureCosmosdbDatabaseId ?? \"\",\n\t\t\t\t\tcontainerId: envVars.azureCosmosdbContainerId ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.GcpFirestoreDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.GcpFirestoreDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tprojectId: envVars.gcpFirestoreProjectId ?? \"\",\n\t\t\t\t\tcredentials: envVars.gcpFirestoreCredentials ?? \"\",\n\t\t\t\t\tdatabaseId: envVars.gcpFirestoreDatabaseId ?? \"\",\n\t\t\t\t\tcollectionName: envVars.gcpFirestoreCollectionName ?? \"\",\n\t\t\t\t\tendpoint: envVars.gcpFirestoreEndpoint ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\")\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.ScyllaDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.ScyllaDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thosts: commaSeparatedListToArray(envVars.scylladbHosts),\n\t\t\t\t\tlocalDataCenter: envVars.scylladbLocalDataCenter ?? \"\",\n\t\t\t\t\tkeyspace: envVars.scylladbKeyspace ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"scylladbPort\"),\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\tpool: {\n\t\t\t\t\t\tcoreConnectionsPerHost: envCount(envVars, \"scylladbPoolCoreConnectionsPerHost\"),\n\t\t\t\t\t\tmaxRequestsPerConnection: envCount(envVars, \"scylladbPoolMaxRequestsPerConnection\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.MySqlDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.MySqlDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thost: envVars.mySqlHost ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"mySqlPort\"),\n\t\t\t\t\tuser: envVars.mySqlUser ?? \"\",\n\t\t\t\t\tpassword: envVars.mySqlPassword ?? \"\",\n\t\t\t\t\tdatabase: envVars.mySqlDatabase ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\tpool: {\n\t\t\t\t\t\tconnectionLimit: envCount(envVars, \"mySqlPoolConnectionLimit\"),\n\t\t\t\t\t\tmaxIdle: envCount(envVars, \"mySqlPoolMaxIdle\"),\n\t\t\t\t\t\tidleTimeout: envMs(envVars, \"mySqlPoolIdleTimeout\"),\n\t\t\t\t\t\tenableKeepAlive: envBoolean(envVars, \"mySqlPoolEnableKeepAlive\"),\n\t\t\t\t\t\twaitForConnections: envBoolean(envVars, \"mySqlPoolWaitForConnections\"),\n\t\t\t\t\t\tqueueLimit: envCount(envVars, \"mySqlPoolQueueLimit\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.MongoDb)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.MongoDb,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thost: envVars.mongoDbHost ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"mongoDbPort\"),\n\t\t\t\t\tuser: envVars.mongoDbUser ?? \"\",\n\t\t\t\t\tpassword: envVars.mongoDbPassword ?? \"\",\n\t\t\t\t\tdatabase: envVars.mongoDbDatabase ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\tpool: {\n\t\t\t\t\t\tmaxPoolSize: envCount(envVars, \"mongoDbPoolMaxPoolSize\"),\n\t\t\t\t\t\tminPoolSize: envCount(envVars, \"mongoDbPoolMinPoolSize\"),\n\t\t\t\t\t\tmaxIdleTimeMs: envMs(envVars, \"mongoDbPoolMaxIdleTime\"),\n\t\t\t\t\t\twaitQueueTimeoutMs: envMs(envVars, \"mongoDbPoolWaitQueueTimeout\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.PostgreSql)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.PostgreSql,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thost: envVars.postgreSqlHost ?? \"\",\n\t\t\t\t\tport: envInteger(envVars, \"postgreSqlPort\"),\n\t\t\t\t\tuser: envVars.postgreSqlUser ?? \"\",\n\t\t\t\t\tpassword: envVars.postgreSqlPassword ?? \"\",\n\t\t\t\t\tdatabase: envVars.postgreSqlDatabase ?? \"\",\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"entityStorageMutexTimeout\"),\n\t\t\t\t\tpool: {\n\t\t\t\t\t\tmax: envCount(envVars, \"postgreSqlPoolMax\"),\n\t\t\t\t\t\tidleTimeout: envSeconds(envVars, \"postgreSqlPoolIdleTimeout\"),\n\t\t\t\t\t\tconnectTimeout: envSeconds(envVars, \"postgreSqlPoolConnectTimeout\"),\n\t\t\t\t\t\tmaxLifetime: envSeconds(envVars, \"postgreSqlPoolMaxLifetime\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttablePrefix: envVars.entityStorageTablePrefix\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 = commaSeparatedListToArray(envVars.blobStorageConnectorType);\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.Memory)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.Memory\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.File)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.File,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tdirectory: Is.stringValue(envVars.storageFileRoot)\n\t\t\t\t\t\t? path.join(envVars.storageFileRoot, \"blob-storage\")\n\t\t\t\t\t\t: \"\"\n\t\t\t\t},\n\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.Ipfs)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.Ipfs,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tapiUrl: envVars.ipfsApiUrl ?? \"\",\n\t\t\t\t\tbearerToken: envVars.ipfsBearerToken\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.AwsS3)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.AwsS3,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tregion: envVars.awsS3Region ?? \"\",\n\t\t\t\t\tbucketName: envVars.awsS3BucketName ?? \"\",\n\t\t\t\t\tauthMode: envVars.awsS3AuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\taccessKeyId: envVars.awsS3AccessKeyId,\n\t\t\t\t\tsecretAccessKey: envVars.awsS3SecretAccessKey,\n\t\t\t\t\tendpoint: envVars.awsS3Endpoint\n\t\t\t\t},\n\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.AzureStorage)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.AzureStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\taccountName: envVars.azureStorageAccountName ?? \"\",\n\t\t\t\t\taccountKey: envVars.azureStorageAccountKey ?? \"\",\n\t\t\t\t\tcontainerName: envVars.azureStorageContainerName ?? \"\",\n\t\t\t\t\tendpoint: envVars.azureStorageEndpoint ?? \"\"\n\t\t\t\t},\n\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\n\t\t\t}\n\t\t});\n\t}\n\n\tif (blobStorageConnectorTypes.includes(BlobStorageConnectorType.GcpStorage)) {\n\t\tcoreConfig.types.blobStorageConnector.push({\n\t\t\ttype: BlobStorageConnectorType.GcpStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tprojectId: envVars.gcpStorageProjectId ?? \"\",\n\t\t\t\t\tcredentials: envVars.gcpStorageCredentials ?? \"\",\n\t\t\t\t\tbucketName: envVars.gcpStorageBucketName ?? \"\",\n\t\t\t\t\tapiEndpoint: envVars.gcpFirestoreEndpoint\n\t\t\t\t},\n\t\t\t\tstoragePrefix: envVars.blobStoragePrefix\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}\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 = commaSeparatedListToArray<LoggingConnectorType>(\n\t\tenvVars.loggingConnector\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\tmutexTimeoutMs: envMs(envVars, \"loggingMutexTimeout\")\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\tmutexTimeoutMs: envMs(envVars, \"loggingMutexTimeout\")\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\tif (envVars.vaultConnector === 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 (envVars.vaultConnector === 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});\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\tif (envVars.eventBusConnector === 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\tif (envVars.telemetryConnector === TelemetryConnectorType.EntityStorage) {\n\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\ttype: TelemetryConnectorType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"telemetryMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (envVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry) {\n\t\tlet readers: IOpenTelemetryTelemetryConnectorConfig[\"readers\"];\n\t\tif (envVars.openTelemetryReader === OpenTelemetryReaderTypes.Prometheus) {\n\t\t\treaders = {\n\t\t\t\tprometheus: {\n\t\t\t\t\ttype: OpenTelemetryReaderTypes.Prometheus,\n\t\t\t\t\tport: envCount(envVars, \"openTelemetryPrometheusPort\")\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\ttype: TelemetryConnectorType.OpenTelemetry,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"telemetryMutexTimeout\"),\n\t\t\t\t\tmeterName: envVars.openTelemetryMeterName,\n\t\t\t\t\tmeterVersion: envVars.openTelemetryMeterVersion,\n\t\t\t\t\treaders\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.telemetryConnector.length > 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 (isTelemetryRequired(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\tisCloneable: false\n\t\t});\n\n\t\tcoreConfig.types.metricsProducerComponent ??= [];\n\n\t\tconst metricsProducers = commaSeparatedListToArray(\n\t\t\tenvVars.telemetryMetricsProducers ??\n\t\t\t\t[MetricsProducerComponentType.System, MetricsProducerComponentType.Process].join(\",\")\n\t\t);\n\n\t\tfor (const producerType of metricsProducers) {\n\t\t\tcoreConfig.types.metricsProducerComponent.push({\n\t\t\t\ttype: producerType as MetricsProducerComponentType,\n\t\t\t\toptions: { maxHistory: envCount(envVars, \"telemetryMetricsProducerMaxHistory\") },\n\t\t\t\tisCloneable: false\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\tif (envVars.tracingConnector === TracingConnectorType.EntityStorage) {\n\t\tcoreConfig.types.tracingConnector.push({\n\t\t\ttype: TracingConnectorType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmutexTimeoutMs: envMs(envVars, \"tracingMutexTimeout\")\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else if (envVars.tracingConnector === TracingConnectorType.OpenTelemetry) {\n\t\tconst otelTracingConfig: IOpenTelemetryTracingConnectorConfig = {\n\t\t\ttracerName: envVars.openTelemetryTracingTracerName,\n\t\t\ttracerVersion: envVars.openTelemetryTracingTracerVersion\n\t\t};\n\t\tif (Is.stringValue(envVars.openTelemetryTracingEndpoint)) {\n\t\t\totelTracingConfig.exporters = {\n\t\t\t\totlp: {\n\t\t\t\t\tendpoint: envVars.openTelemetryTracingEndpoint,\n\t\t\t\t\tprocessor:\n\t\t\t\t\t\t(envVars.openTelemetryTracingProcessor as OpenTelemetryProcessorTypes) ??\n\t\t\t\t\t\tOpenTelemetryProcessorTypes.Batch\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcoreConfig.types.tracingConnector.push({\n\t\t\ttype: TracingConnectorType.OpenTelemetry,\n\t\t\toptions: {\n\t\t\t\tconfig: otelTracingConfig\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.tracingConnector.length > 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 = commaSeparatedListToArray(envVars.automationActionTypes);\n\n\t\tif (Is.arrayValue(automationActionTypes)) {\n\t\t\tcoreConfig.types.automationAction ??= [];\n\n\t\t\tfor (const actionType of automationActionTypes) {\n\t\t\t\tcoreConfig.types.automationAction.push({\n\t\t\t\t\ttype: actionType as AutomationActionType,\n\t\t\t\t\tisMultiInstance: true\n\t\t\t\t} as unknown as AutomationActionConfig);\n\t\t\t}\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}\n\t\t\t},\n\t\t\tisCloneable: false\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\tisCloneable: false\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});\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});\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});\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\tif (envBoolean(envVars, \"messagingEnabled\", false)) {\n\t\tcoreConfig.types.messagingEmailConnector ??= [];\n\t\tcoreConfig.types.messagingSmsConnector ??= [];\n\t\tcoreConfig.types.messagingPushNotificationConnector ??= [];\n\n\t\tif (envVars.messagingEmailConnector === MessagingEmailConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\t\ttype: MessagingEmailConnectorType.EntityStorage\n\t\t\t});\n\t\t} else if (envVars.messagingEmailConnector === MessagingEmailConnectorType.Aws) {\n\t\t\tcoreConfig.types.messagingEmailConnector.push({\n\t\t\t\ttype: MessagingEmailConnectorType.Aws,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsSesEndpoint\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (envVars.messagingSmsConnector === MessagingSmsConnectorType.EntityStorage) {\n\t\t\tcoreConfig.types.messagingSmsConnector.push({\n\t\t\t\ttype: MessagingSmsConnectorType.EntityStorage\n\t\t\t});\n\t\t} else if (envVars.messagingSmsConnector === MessagingSmsConnectorType.Aws) {\n\t\t\tcoreConfig.types.messagingSmsConnector.push({\n\t\t\t\ttype: MessagingSmsConnectorType.Aws,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsSesEndpoint\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (\n\t\t\tenvVars.messagingPushNotificationConnector ===\n\t\t\tMessagingPushNotificationConnectorType.EntityStorage\n\t\t) {\n\t\t\tcoreConfig.types.messagingPushNotificationConnector.push({\n\t\t\t\ttype: MessagingPushNotificationConnectorType.EntityStorage\n\t\t\t});\n\t\t} else if (\n\t\t\tenvVars.messagingPushNotificationConnector === MessagingPushNotificationConnectorType.Aws\n\t\t) {\n\t\t\tlet messagingApps;\n\t\t\tif (Is.stringValue(envVars.awsMessagingPushNotificationApplications)) {\n\t\t\t\ttry {\n\t\t\t\t\tmessagingApps = JSON.parse(envVars.awsMessagingPushNotificationApplications);\n\t\t\t\t} catch {}\n\t\t\t} else if (Is.array(envVars.awsMessagingPushNotificationApplications)) {\n\t\t\t\tmessagingApps = envVars.awsMessagingPushNotificationApplications;\n\t\t\t}\n\t\t\tcoreConfig.types.messagingPushNotificationConnector.push({\n\t\t\t\ttype: MessagingPushNotificationConnectorType.Aws,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tregion: envVars.awsSesRegion ?? \"\",\n\t\t\t\t\t\tauthMode: envVars.awsSesAuthMode as \"credentials\" | \"pod\",\n\t\t\t\t\t\taccessKeyId: envVars.awsSesAccessKeyId,\n\t\t\t\t\t\tsecretAccessKey: envVars.awsSesSecretAccessKey,\n\t\t\t\t\t\tendpoint: envVars.awsSesEndpoint,\n\t\t\t\t\t\tapplicationsSettings: messagingApps ?? []\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\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 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\tif (envVars.faucetConnector === FaucetConnectorType.EntityStorage) {\n\t\tcoreConfig.types.faucetConnector.push({\n\t\t\ttype: FaucetConnectorType.EntityStorage\n\t\t});\n\t} else if (\n\t\tenvVars.faucetConnector === 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\tif (envVars.walletConnector === WalletConnectorType.EntityStorage) {\n\t\tcoreConfig.types.walletConnector.push({\n\t\t\ttype: WalletConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.walletConnector === 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\tif (envVars.nftConnector === NftConnectorType.EntityStorage) {\n\t\tcoreConfig.types.nftConnector.push({\n\t\t\ttype: NftConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.nftConnector === 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\tif (envVars.notarizationConnector === NotarizationConnectorType.EntityStorage) {\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.notarizationConnector === 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\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\tif (envVars.identityConnector === IdentityConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityConnector.push({\n\t\t\ttype: IdentityConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.identityConnector === 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\tif (envVars.identityResolverConnector === IdentityResolverConnectorType.EntityStorage) {\n\t\tcoreConfig.types.identityResolverConnector.push({\n\t\t\ttype: IdentityResolverConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.identityResolverConnector === 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 (envVars.identityResolverConnector === 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\tif (envVars.identityProfileConnector === IdentityConnectorType.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\tif (envVars.attestationConnector === 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\tif (envBoolean(envVars, \"dataProcessingEnabled\", false)) {\n\t\tcoreConfig.types.dataProcessingComponent ??= [];\n\t\tcoreConfig.types.dataProcessingComponent.push({ type: DataProcessingComponentType.Service });\n\n\t\tcoreConfig.types.dataConverterConnector ??= [];\n\n\t\tconst converterConnectors = commaSeparatedListToArray(envVars.dataConverterConnectors);\n\t\tfor (const converterConnector of converterConnectors) {\n\t\t\tcoreConfig.types.dataConverterConnector.push({\n\t\t\t\ttype: converterConnector as DataConverterConnectorType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.dataExtractorConnector ??= [];\n\t\tconst extractorConnectors = commaSeparatedListToArray(envVars.dataExtractorConnectors);\n\t\tfor (const extractorConnector of extractorConnectors) {\n\t\t\tcoreConfig.types.dataExtractorConnector.push({\n\t\t\t\ttype: extractorConnector as DataExtractorConnectorType\n\t\t\t});\n\t\t}\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 = commaSeparatedListToArray(envVars.trustGenerators);\n\t\tfor (const trustGeneratorType of trustGeneratorTypes) {\n\t\t\tcoreConfig.types.trustGeneratorComponent.push({\n\t\t\t\ttype: trustGeneratorType as TrustGeneratorComponentType,\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 = commaSeparatedListToArray(envVars.trustVerifiers);\n\t\tfor (const trustVerifierType of trustVerifierTypes) {\n\t\t\tconst type = trustVerifierType as TrustVerifierComponentType;\n\n\t\t\tif (type === TrustVerifierComponentType.IdentityAllowDeny) {\n\t\t\t\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\t\ttype,\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 {\n\t\t\t\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\t\ttype\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 = commaSeparatedListToArray(envVars.rightsManagementPolicyArbiters);\n\t\tfor (const policyArbiterType of policyArbiterTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyArbiterComponent.push({\n\t\t\t\ttype: policyArbiterType as RightsManagementPolicyArbiterComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyObligationEnforcerComponent ??= [];\n\t\tconst policyObligationEnforcerTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyObligationEnforcers\n\t\t);\n\t\tfor (const policyObligationEnforcerType of policyObligationEnforcerTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyObligationEnforcerComponent.push({\n\t\t\t\ttype: policyObligationEnforcerType as RightsManagementPolicyObligationEnforcerComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyEnforcementProcessorComponent ??= [];\n\t\tconst policyEnforcementProcessTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyEnforcementProcessors\n\t\t);\n\t\tfor (const policyEnforcementProcessorType of policyEnforcementProcessTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyEnforcementProcessorComponent.push({\n\t\t\t\ttype: policyEnforcementProcessorType as RightsManagementPolicyEnforcementProcessorComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyExecutionActionComponent ??= [];\n\t\tconst policyExecutionActionTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyExecutionActions\n\t\t);\n\t\tfor (const policyExecutionActionType of policyExecutionActionTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyExecutionActionComponent.push({\n\t\t\t\ttype: policyExecutionActionType as RightsManagementPolicyExecutionActionComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyInformationSourceComponent ??= [];\n\t\tconst policyInformationSourceTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyInformationSources\n\t\t);\n\t\tfor (const policyInformationSourceType of policyInformationSourceTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyInformationSourceComponent.push({\n\t\t\t\ttype: policyInformationSourceType as RightsManagementPolicyInformationSourceComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyRequesterComponent ??= [];\n\t\tconst policyRequesterTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyRequesters\n\t\t);\n\t\tfor (const policyRequesterType of policyRequesterTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyRequesterComponent.push({\n\t\t\t\ttype: policyRequesterType as RightsManagementPolicyRequesterComponentType\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.rightsManagementPolicyNegotiatorComponent ??= [];\n\t\tconst policyNegotiatorTypes = commaSeparatedListToArray(\n\t\t\tenvVars.rightsManagementPolicyNegotiators\n\t\t);\n\t\tfor (const policyNegotiatorType of policyNegotiatorTypes) {\n\t\t\tcoreConfig.types.rightsManagementPolicyNegotiatorComponent.push({\n\t\t\t\ttype: policyNegotiatorType as RightsManagementPolicyNegotiatorComponentType\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 = commaSeparatedListToArray(envVars.federatedCatalogueFilters);\n\n\t\t\tfor (const filter of filters) {\n\t\t\t\tcoreConfig.types.federatedCatalogueFilterComponent.push({\n\t\t\t\t\ttype: filter as FederatedCatalogueFilterComponentType,\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 envBoolean(envVars, \"dataspaceEnabled\", false) || isImmutableProofRequired(envVars);\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);\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 required.\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 isTelemetryRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvVars.telemetryConnector === TelemetryConnectorType.EntityStorage ||\n\t\tenvVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry\n\t);\n}\n\n/**\n * Checks if the tracing subsystem is required.\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 isTracingRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvVars.tracingConnector === TracingConnectorType.EntityStorage ||\n\t\tenvVars.tracingConnector === TracingConnectorType.OpenTelemetry\n\t);\n}\n"]}
|