@twin.org/node-core 0.0.3-next.3 → 0.0.3-next.30

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.
Files changed (159) hide show
  1. package/README.md +3 -1
  2. package/dist/es/builders/engineEnvBuilder.js +194 -123
  3. package/dist/es/builders/engineEnvBuilder.js.map +1 -1
  4. package/dist/es/builders/engineServerEnvBuilder.js +51 -23
  5. package/dist/es/builders/engineServerEnvBuilder.js.map +1 -1
  6. package/dist/es/cli.js +247 -0
  7. package/dist/es/cli.js.map +1 -0
  8. package/dist/es/commands/bootstrapLegacy.js +186 -0
  9. package/dist/es/commands/bootstrapLegacy.js.map +1 -0
  10. package/dist/es/commands/help.js +85 -0
  11. package/dist/es/commands/help.js.map +1 -0
  12. package/dist/es/commands/identityCreate.js +316 -0
  13. package/dist/es/commands/identityCreate.js.map +1 -0
  14. package/dist/es/commands/identityImports.js +82 -0
  15. package/dist/es/commands/identityImports.js.map +1 -0
  16. package/dist/es/commands/identityVerifiableCredentialCreate.js +146 -0
  17. package/dist/es/commands/identityVerifiableCredentialCreate.js.map +1 -0
  18. package/dist/es/commands/identityVerificationMethodCreate.js +228 -0
  19. package/dist/es/commands/identityVerificationMethodCreate.js.map +1 -0
  20. package/dist/es/commands/identityVerificationMethodImport.js +126 -0
  21. package/dist/es/commands/identityVerificationMethodImport.js.map +1 -0
  22. package/dist/es/commands/nodeSetIdentity.js +64 -0
  23. package/dist/es/commands/nodeSetIdentity.js.map +1 -0
  24. package/dist/es/commands/nodeSetTenant.js +68 -0
  25. package/dist/es/commands/nodeSetTenant.js.map +1 -0
  26. package/dist/es/commands/tenantCreate.js +139 -0
  27. package/dist/es/commands/tenantCreate.js.map +1 -0
  28. package/dist/es/commands/tenantImport.js +97 -0
  29. package/dist/es/commands/tenantImport.js.map +1 -0
  30. package/dist/es/commands/tenantUpdate.js +94 -0
  31. package/dist/es/commands/tenantUpdate.js.map +1 -0
  32. package/dist/es/commands/userCreate.js +212 -0
  33. package/dist/es/commands/userCreate.js.map +1 -0
  34. package/dist/es/commands/userUpdate.js +132 -0
  35. package/dist/es/commands/userUpdate.js.map +1 -0
  36. package/dist/es/commands/vaultKeyCreate.js +191 -0
  37. package/dist/es/commands/vaultKeyCreate.js.map +1 -0
  38. package/dist/es/commands/vaultKeyImport.js +104 -0
  39. package/dist/es/commands/vaultKeyImport.js.map +1 -0
  40. package/dist/es/defaults.js +17 -1
  41. package/dist/es/defaults.js.map +1 -1
  42. package/dist/es/index.js +7 -3
  43. package/dist/es/index.js.map +1 -1
  44. package/dist/es/models/ICliArgs.js +4 -0
  45. package/dist/es/models/ICliArgs.js.map +1 -0
  46. package/dist/es/models/ICliCommand.js +2 -0
  47. package/dist/es/models/ICliCommand.js.map +1 -0
  48. package/dist/es/models/ICliCommandDefinition.js +2 -0
  49. package/dist/es/models/ICliCommandDefinition.js.map +1 -0
  50. package/dist/es/models/ICliCommandDefinitionParam.js +2 -0
  51. package/dist/es/models/ICliCommandDefinitionParam.js.map +1 -0
  52. package/dist/es/models/IEngineEnvironmentVariables.js.map +1 -1
  53. package/dist/es/models/IEngineServerEnvironmentVariables.js.map +1 -1
  54. package/dist/es/models/INodeEngineState.js.map +1 -1
  55. package/dist/es/models/INodeEnvironmentVariables.js.map +1 -1
  56. package/dist/es/models/INodeOptions.js.map +1 -1
  57. package/dist/es/models/cliCommandParamType.js +4 -0
  58. package/dist/es/models/cliCommandParamType.js.map +1 -0
  59. package/dist/es/node.js +84 -39
  60. package/dist/es/node.js.map +1 -1
  61. package/dist/es/start.js +139 -0
  62. package/dist/es/start.js.map +1 -0
  63. package/dist/es/utils.js +12 -22
  64. package/dist/es/utils.js.map +1 -1
  65. package/dist/types/builders/engineEnvBuilder.d.ts +1 -1
  66. package/dist/types/builders/engineServerEnvBuilder.d.ts +4 -2
  67. package/dist/types/cli.d.ts +56 -0
  68. package/dist/types/commands/bootstrapLegacy.d.ts +66 -0
  69. package/dist/types/commands/help.d.ts +23 -0
  70. package/dist/types/commands/identityCreate.d.ts +39 -0
  71. package/dist/types/commands/identityImports.d.ts +24 -0
  72. package/dist/types/commands/identityVerifiableCredentialCreate.d.ts +43 -0
  73. package/dist/types/commands/identityVerificationMethodCreate.d.ts +47 -0
  74. package/dist/types/commands/identityVerificationMethodImport.d.ts +31 -0
  75. package/dist/types/commands/nodeSetIdentity.d.ts +22 -0
  76. package/dist/types/commands/nodeSetTenant.d.ts +22 -0
  77. package/dist/types/commands/tenantCreate.d.ts +38 -0
  78. package/dist/types/commands/tenantImport.d.ts +26 -0
  79. package/dist/types/commands/tenantUpdate.d.ts +26 -0
  80. package/dist/types/commands/userCreate.d.ts +49 -0
  81. package/dist/types/commands/userUpdate.d.ts +38 -0
  82. package/dist/types/commands/vaultKeyCreate.d.ts +43 -0
  83. package/dist/types/commands/vaultKeyImport.d.ts +28 -0
  84. package/dist/types/defaults.d.ts +9 -1
  85. package/dist/types/index.d.ts +7 -3
  86. package/dist/types/models/ICliArgs.d.ts +20 -0
  87. package/dist/types/models/ICliCommand.d.ts +17 -0
  88. package/dist/types/models/ICliCommandDefinition.d.ts +46 -0
  89. package/dist/types/models/ICliCommandDefinitionParam.d.ts +35 -0
  90. package/dist/types/models/IEngineEnvironmentVariables.d.ts +72 -56
  91. package/dist/types/models/IEngineServerEnvironmentVariables.d.ts +4 -0
  92. package/dist/types/models/INodeEngineState.d.ts +0 -8
  93. package/dist/types/models/INodeEnvironmentVariables.d.ts +0 -38
  94. package/dist/types/models/INodeOptions.d.ts +6 -2
  95. package/dist/types/models/cliCommandParamType.d.ts +4 -0
  96. package/dist/types/node.d.ts +5 -4
  97. package/dist/types/{server.d.ts → start.d.ts} +4 -2
  98. package/dist/types/utils.d.ts +6 -8
  99. package/docs/changelog.md +199 -1
  100. package/docs/examples.md +99 -1
  101. package/docs/reference/functions/buildConfiguration.md +1 -1
  102. package/docs/reference/functions/buildEngineServerConfiguration.md +1 -1
  103. package/docs/reference/functions/constructCliCommand.md +27 -0
  104. package/docs/reference/functions/executeCommand.md +29 -0
  105. package/docs/reference/functions/getEnvDefaults.md +19 -0
  106. package/docs/reference/functions/getScriptDirectory.md +19 -0
  107. package/docs/reference/functions/parseCommandLineArgs.md +19 -0
  108. package/docs/reference/functions/processEnvOptions.md +27 -0
  109. package/docs/reference/functions/registerCommands.md +9 -0
  110. package/docs/reference/functions/resolvePackageEntryPoint.md +2 -2
  111. package/docs/reference/functions/run.md +8 -2
  112. package/docs/reference/functions/start.md +9 -3
  113. package/docs/reference/functions/substituteEnvOptions.md +25 -0
  114. package/docs/reference/index.md +14 -12
  115. package/docs/reference/interfaces/ICacheMetadata.md +3 -3
  116. package/docs/reference/interfaces/ICliArgs.md +35 -0
  117. package/docs/reference/interfaces/ICliCommand.md +23 -0
  118. package/docs/reference/interfaces/ICliCommandDefinition.md +101 -0
  119. package/docs/reference/interfaces/ICliCommandDefinitionParam.md +65 -0
  120. package/docs/reference/interfaces/IEngineEnvironmentVariables.md +349 -313
  121. package/docs/reference/interfaces/IEngineServerEnvironmentVariables.md +434 -370
  122. package/docs/reference/interfaces/IModuleProtocol.md +3 -3
  123. package/docs/reference/interfaces/INodeEngineState.md +4 -20
  124. package/docs/reference/interfaces/INodeEnvironmentVariables.md +448 -464
  125. package/docs/reference/interfaces/INodeOptions.md +44 -36
  126. package/docs/reference/interfaces/IProtocolHandlerResult.md +2 -2
  127. package/docs/reference/type-aliases/CliCommandParamType.md +5 -0
  128. package/docs/reference/type-aliases/NodeExtensionInitialiseEngineMethod.md +1 -1
  129. package/docs/reference/type-aliases/NodeExtensionInitialiseEngineServerMethod.md +1 -1
  130. package/docs/reference/type-aliases/NodeExtensionInitialiseMethod.md +1 -1
  131. package/docs/reference/type-aliases/NodeExtensionShutdownMethod.md +1 -1
  132. package/docs/reference/variables/ModuleProtocol.md +5 -5
  133. package/docs/reference/variables/TRUST_VERIFICATION_METHOD_ID.md +3 -0
  134. package/locales/en.json +589 -30
  135. package/package.json +6 -4
  136. package/dist/es/bootstrap.js +0 -360
  137. package/dist/es/bootstrap.js.map +0 -1
  138. package/dist/es/identity.js +0 -169
  139. package/dist/es/identity.js.map +0 -1
  140. package/dist/es/models/nodeFeatures.js +0 -21
  141. package/dist/es/models/nodeFeatures.js.map +0 -1
  142. package/dist/es/server.js +0 -81
  143. package/dist/es/server.js.map +0 -1
  144. package/dist/types/bootstrap.d.ts +0 -68
  145. package/dist/types/identity.d.ts +0 -14
  146. package/dist/types/models/nodeFeatures.d.ts +0 -21
  147. package/docs/detailed-guide.md +0 -129
  148. package/docs/reference/functions/bootstrap.md +0 -29
  149. package/docs/reference/functions/bootstrapAuth.md +0 -35
  150. package/docs/reference/functions/bootstrapBlobEncryption.md +0 -35
  151. package/docs/reference/functions/bootstrapImmutableProofMethod.md +0 -35
  152. package/docs/reference/functions/bootstrapNodeAdminUser.md +0 -35
  153. package/docs/reference/functions/bootstrapNodeId.md +0 -35
  154. package/docs/reference/functions/bootstrapSynchronisedStorage.md +0 -35
  155. package/docs/reference/functions/bootstrapTenantId.md +0 -35
  156. package/docs/reference/functions/getFeatures.md +0 -19
  157. package/docs/reference/type-aliases/NodeFeatures.md +0 -5
  158. package/docs/reference/variables/NodeFeatures.md +0 -25
  159. package/docs/reference/variables/VC_AUTHENTICATION_VERIFICATION_METHOD_ID.md +0 -3
@@ -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 { Coerce, Is } from \"@twin.org/core\";\nimport type { IIotaConfig } from \"@twin.org/dlt-iota\";\nimport type { IEngineModuleConfig } from \"@twin.org/engine-models\";\nimport {\n\tAttestationComponentType,\n\tAttestationConnectorType,\n\tAuditableItemGraphComponentType,\n\tAuditableItemStreamComponentType,\n\tAuthenticationGeneratorComponentType,\n\tBackgroundTaskConnectorType,\n\tBlobStorageComponentType,\n\tBlobStorageConnectorType,\n\tContextIdHandlerComponentType,\n\tDataConverterConnectorType,\n\tDataExtractorConnectorType,\n\tDataProcessingComponentType,\n\tDataSpaceConnectorComponentType,\n\ttype DltConfig,\n\tDltConfigType,\n\tDocumentManagementComponentType,\n\tEngineTypeHelper,\n\tEntityStorageConnectorType,\n\tEventBusComponentType,\n\tEventBusConnectorType,\n\tFaucetConnectorType,\n\tFederatedCatalogueComponentType,\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\tNftComponentType,\n\tNftConnectorType,\n\tRightsManagementDapComponentType,\n\tRightsManagementDarpComponentType,\n\tRightsManagementPapComponentType,\n\tRightsManagementPdpComponentType,\n\tRightsManagementPepComponentType,\n\tRightsManagementPipComponentType,\n\tRightsManagementPmpComponentType,\n\tRightsManagementPnapComponentType,\n\tRightsManagementPnpComponentType,\n\tRightsManagementPxpComponentType,\n\tSynchronisedStorageComponentType,\n\tTaskSchedulerComponentType,\n\tTelemetryComponentType,\n\tTelemetryConnectorType,\n\tTenantAdminComponentType,\n\tVaultConnectorType,\n\tVerifiableStorageComponentType,\n\tVerifiableStorageConnectorType,\n\tWalletConnectorType\n} from \"@twin.org/engine-types\";\nimport {\n\tDataAccessPointRestClient,\n\tPolicyNegotiationPointRestClient\n} from \"@twin.org/rights-management-rest-client\";\nimport type { IOdrlOffer } from \"@twin.org/standards-w3c-odrl\";\nimport {\n\tATTESTATION_VERIFICATION_METHOD_ID,\n\tBLOB_STORAGE_ENCRYPTION_KEY_ID,\n\tCONTEXT_ID_HANDLER_FEATURE_DID,\n\tCONTEXT_ID_HANDLER_FEATURE_TENANT,\n\tIMMUTABLE_PROOF_VERIFICATION_METHOD_ID,\n\tSYNCHRONISED_STORAGE_BLOB_STORAGE_ENCRYPTION_KEY_ID,\n\tVC_AUTHENTICATION_VERIFICATION_METHOD_ID\n} from \"../defaults.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 * @param contextIdKeys The context ID keys.\n * @returns The config for the core.\n */\nexport async function buildEngineConfiguration(\n\tenvVars: IEngineEnvironmentVariables,\n\tcontextIdKeys: { key: string; componentFeatures: string[] }[]\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: Coerce.boolean(envVars.debug) ?? false,\n\t\ttypes: {}\n\t};\n\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 configureMessaging(coreConfig, envVars);\n\n\tawait configureFaucet(coreConfig, envVars);\n\tawait configureWallet(coreConfig, envVars);\n\tawait configureNft(coreConfig, envVars);\n\tawait configureVerifiableStorage(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 configureVerifiableCredentialAuthentication(coreConfig, envVars);\n\tawait configureRightsManagement(coreConfig, envVars);\n\tawait configureSynchronisedStorage(coreConfig, envVars);\n\tawait configureFederatedCatalogue(coreConfig, envVars);\n\tawait configureDataSpaceConnector(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 */\nasync function configureEntityStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types ??= {};\n\tcoreConfig.types.entityStorageConnector ??= [];\n\n\tconst entityStorageConnectorTypes = envVars.entityStorageConnectorType?.split(\",\") ?? [];\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.Memory)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.Memory\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: { directory: envVars.storageFileRoot ?? \"\" },\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},\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},\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.gcpFirestoreApiEndpoint ?? \"\"\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: envVars.scylladbHosts?.split(\",\") ?? [],\n\t\t\t\t\tlocalDataCenter: envVars.scylladbLocalDataCenter ?? \"\",\n\t\t\t\t\tkeyspace: envVars.scylladbKeyspace ?? \"\",\n\t\t\t\t\tport: Coerce.integer(envVars.scylladbPort)\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: Coerce.integer(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},\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: Coerce.integer(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},\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: Coerce.integer(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},\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 (entityStorageConnectorTypes.includes(EntityStorageConnectorType.Synchronised)) {\n\t\t// For synchronised storage we use the default connector as the one we wrap for real DB operations\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.Synchronised,\n\t\t\toptions: {\n\t\t\t\tentityStorageConnectorType: defaultEntityStorageConnectorType\n\t\t\t}\n\t\t});\n\t}\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 */\nasync function configureBlobStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.blobStorageConnector ??= [];\n\n\tconst blobStorageConnectorTypes = envVars.blobStorageConnectorType?.split(\",\") ?? [];\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.gcpFirestoreApiEndpoint\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\t// If this blob storage connector is the one to use for public access\n\t\t\t// then add it as a feature\n\t\t\tif (\n\t\t\t\tIs.stringValue(envVars.blobStorageConnectorPublic) &&\n\t\t\t\tconfig.type === envVars.blobStorageConnectorPublic\n\t\t\t) {\n\t\t\t\tconfig.features ??= [];\n\t\t\t\tconfig.features.push(\"public\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (coreConfig.types.blobStorageConnector.length > 0) {\n\t\tcoreConfig.types.blobStorageComponent ??= [];\n\t\tcoreConfig.types.blobStorageComponent.push({\n\t\t\ttype: BlobStorageComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tvaultKeyId:\n\t\t\t\t\t\t(envVars.blobStorageEnableEncryption ?? false)\n\t\t\t\t\t\t\t? (envVars.blobStorageEncryptionKeyId ?? BLOB_STORAGE_ENCRYPTION_KEY_ID)\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 */\nasync function configureLogging(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.loggingConnector ??= [];\n\n\tconst loggingConnectorTypes = (envVars.loggingConnector ?? \"\").split(\",\");\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});\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 */\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});\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}\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 */\nasync function configureBackgroundTask(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.backgroundTaskConnector ??= [];\n\n\tif (envVars.backgroundTaskConnector === BackgroundTaskConnectorType.EntityStorage) {\n\t\tcoreConfig.types.backgroundTaskConnector.push({\n\t\t\ttype: BackgroundTaskConnectorType.EntityStorage\n\t\t});\n\t}\n}\n\n/**\n * Configures the event bud.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\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 */\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});\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 tenant.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureTenant(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.tenantEnabled) ?? false) {\n\t\tcoreConfig.types.tenantAdminComponent ??= [];\n\t\tcoreConfig.types.tenantAdminComponent.push({\n\t\t\ttype: TenantAdminComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.tenantComponent ??= [];\n\t\tcoreConfig.types.tenantComponent.push({ type: TenantAdminComponentType.Service });\n\t}\n}\n\n/**\n * Configures the context id handlers.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\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 (Coerce.boolean(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 */\nasync function configureMessaging(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(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\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: Is.json(envVars.awsMessagingPushNotificationApplications)\n\t\t\t\t\t\t\t? JSON.parse(envVars.awsMessagingPushNotificationApplications)\n\t\t\t\t\t\t\t: []\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 */\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 (envVars.faucetConnector === FaucetConnectorType.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.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 */\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 */\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\tcoreConfig.types.nftConnector.push({\n\t\t\ttype: NftConnectorType.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.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 verifiable storage.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureVerifiableStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.verifiableStorageConnector ??= [];\n\n\tif (envVars.verifiableStorageConnector === VerifiableStorageConnectorType.EntityStorage) {\n\t\tcoreConfig.types.verifiableStorageConnector.push({\n\t\t\ttype: VerifiableStorageConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.verifiableStorageConnector === VerifiableStorageConnectorType.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.verifiableStorageConnector.push({\n\t\t\ttype: VerifiableStorageConnectorType.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.verifiableStorageConnector.length > 0) {\n\t\tcoreConfig.types.verifiableStorageComponent ??= [];\n\t\tcoreConfig.types.verifiableStorageComponent.push({\n\t\t\ttype: VerifiableStorageComponentType.Service\n\t\t});\n\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:\n\t\t\t\t\t\tenvVars.immutableProofVerificationMethodId ?? IMMUTABLE_PROOF_VERIFICATION_METHOD_ID\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 */\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: dltConfig?.options?.config ?? ({} as IIotaConfig)\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 */\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: dltConfig?.options?.config ?? ({} as IIotaConfig)\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 */\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 */\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:\n\t\t\t\t\t\tenvVars.attestationVerificationMethodId ?? ATTESTATION_VERIFICATION_METHOD_ID\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 */\nasync function configureAuditableItemGraph(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.auditableItemGraphEnabled) ?? false) {\n\t\tcoreConfig.types.auditableItemGraphComponent ??= [];\n\t\tcoreConfig.types.auditableItemGraphComponent.push({\n\t\t\ttype: AuditableItemGraphComponentType.Service\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 */\nasync function configureAuditableItemStream(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.auditableItemStreamEnabled) ?? false) {\n\t\tcoreConfig.types.auditableItemStreamComponent ??= [];\n\t\tcoreConfig.types.auditableItemStreamComponent.push({\n\t\t\ttype: AuditableItemStreamComponentType.Service\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 */\nasync function configureDataProcessing(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(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 = envVars.dataConverterConnectors?.split(\",\") ?? [];\n\t\tfor (const converterConnector of converterConnectors) {\n\t\t\tif (converterConnector === DataConverterConnectorType.Json) {\n\t\t\t\tcoreConfig.types.dataConverterConnector.push({\n\t\t\t\t\ttype: DataConverterConnectorType.Json\n\t\t\t\t});\n\t\t\t} else if (converterConnector === DataConverterConnectorType.Xml) {\n\t\t\t\tcoreConfig.types.dataConverterConnector.push({\n\t\t\t\t\ttype: DataConverterConnectorType.Xml\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tcoreConfig.types.dataExtractorConnector ??= [];\n\t\tconst extractorConnectors = envVars.dataExtractorConnectors?.split(\",\") ?? [];\n\t\tfor (const extractorConnector of extractorConnectors) {\n\t\t\tif (extractorConnector === DataExtractorConnectorType.JsonPath) {\n\t\t\t\tcoreConfig.types.dataExtractorConnector.push({\n\t\t\t\t\ttype: DataExtractorConnectorType.JsonPath\n\t\t\t\t});\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 */\nasync function configureDocumentManagement(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.documentManagementEnabled) ?? false) {\n\t\tcoreConfig.types.documentManagementComponent ??= [];\n\t\tcoreConfig.types.documentManagementComponent.push({\n\t\t\ttype: DocumentManagementComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the verifiable credential authentication.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureVerifiableCredentialAuthentication(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.vcAuthenticationEnabled) ?? false) {\n\t\t// Can only perform VC authentication if identity component is available\n\t\tcoreConfig.types.authenticationGeneratorComponent ??= [];\n\t\tcoreConfig.types.authenticationGeneratorComponent.push({\n\t\t\ttype: AuthenticationGeneratorComponentType.VerifiableCredential,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverificationMethodId:\n\t\t\t\t\t\tenvVars.vcAuthenticationVerificationMethodId ?? VC_AUTHENTICATION_VERIFICATION_METHOD_ID\n\t\t\t\t}\n\t\t\t},\n\t\t\tfeatures: [\"verifiable-credential\"]\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 */\nasync function configureRightsManagement(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.rightsManagementEnabled) ?? false) {\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\toptions: {\n\t\t\t\tinformationModulesConfig: Is.arrayValue<IEngineModuleConfig>(\n\t\t\t\t\tenvVars.rightsManagementInformationSources\n\t\t\t\t)\n\t\t\t\t\t? envVars.rightsManagementInformationSources\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPxpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPxpComponent.push({\n\t\t\ttype: RightsManagementPxpComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tactionModulesConfig: Is.arrayValue<IEngineModuleConfig>(\n\t\t\t\t\tenvVars.rightsManagementExecutionActions\n\t\t\t\t)\n\t\t\t\t\t? envVars.rightsManagementExecutionActions\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPdpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPdpComponent.push({\n\t\t\ttype: RightsManagementPdpComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tarbiterModulesConfig: Is.arrayValue<IEngineModuleConfig>(envVars.rightsManagementArbiters)\n\t\t\t\t\t? envVars.rightsManagementArbiters\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPepComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPepComponent.push({\n\t\t\ttype: RightsManagementPepComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tprocessorModulesConfig: Is.arrayValue<IEngineModuleConfig>(\n\t\t\t\t\tenvVars.rightsManagementEnforcementProcessors\n\t\t\t\t)\n\t\t\t\t\t? envVars.rightsManagementEnforcementProcessors\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPnpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tnegotiatorModulesConfig: Is.arrayValue<IEngineModuleConfig>(\n\t\t\t\t\tenvVars.rightsManagementNegotiators\n\t\t\t\t)\n\t\t\t\t\t? envVars.rightsManagementNegotiators\n\t\t\t\t\t: undefined,\n\t\t\t\trequesterModulesConfig: Is.arrayValue<IEngineModuleConfig>(\n\t\t\t\t\tenvVars.rightsManagementRequesters\n\t\t\t\t)\n\t\t\t\t\t? envVars.rightsManagementRequesters\n\t\t\t\t\t: undefined,\n\t\t\t\tconfig: {\n\t\t\t\t\tbaseCallbackUrl: envVars.rightsManagementBaseCallbackUrl ?? \"\",\n\t\t\t\t\toffers: Is.arrayValue<IOdrlOffer>(envVars.rightsManagementOffers)\n\t\t\t\t\t\t? envVars.rightsManagementOffers\n\t\t\t\t\t\t: [],\n\t\t\t\t\tnegotiationComponentCreator: async url =>\n\t\t\t\t\t\tnew PolicyNegotiationPointRestClient({ endpoint: url })\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPnapComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPnapComponent.push({\n\t\t\ttype: RightsManagementPnapComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementDapComponent ??= [];\n\t\tcoreConfig.types.rightsManagementDapComponent.push({\n\t\t\ttype: RightsManagementDapComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementDarpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementDarpComponent.push({\n\t\t\ttype: RightsManagementDarpComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tdataAccessComponentCreator: async url => new DataAccessPointRestClient({ endpoint: url })\n\t\t\t\t}\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 */\nasync function configureTaskScheduler(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.taskSchedulerEnabled) ?? false) {\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 synchronised storage.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureSynchronisedStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (\n\t\tIs.arrayValue(coreConfig.types.identityResolverComponent) &&\n\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false)\n\t) {\n\t\t// Check if the config provides a custom verifiable storage key id\n\t\tlet verifiableStorageKeyId = Coerce.string(envVars.synchronisedStorageVerifiableStorageKeyId);\n\n\t\tif (!Is.stringValue(verifiableStorageKeyId)) {\n\t\t\t// No custom key so default to the network setting\n\t\t\tverifiableStorageKeyId = envVars.iotaNetwork;\n\t\t}\n\t\tcoreConfig.types.synchronisedStorageComponent ??= [];\n\t\tcoreConfig.types.synchronisedStorageComponent.push({\n\t\t\ttype: SynchronisedStorageComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverifiableStorageKeyId: verifiableStorageKeyId ?? \"\",\n\t\t\t\t\tblobStorageEncryptionKeyId:\n\t\t\t\t\t\tenvVars.synchronisedStorageBlobStorageEncryptionKeyId ??\n\t\t\t\t\t\tSYNCHRONISED_STORAGE_BLOB_STORAGE_ENCRYPTION_KEY_ID,\n\t\t\t\t\tentityUpdateIntervalMinutes: Coerce.number(\n\t\t\t\t\t\tenvVars.synchronisedStorageEntityUpdateIntervalMinutes\n\t\t\t\t\t),\n\t\t\t\t\tconsolidationIntervalMinutes: Coerce.number(\n\t\t\t\t\t\tenvVars.synchronisedStorageConsolidationIntervalMinutes\n\t\t\t\t\t),\n\t\t\t\t\tconsolidationBatchSize: Coerce.number(envVars.synchronisedStorageConsolidationBatchSize),\n\t\t\t\t\tmaxConsolidations: Coerce.number(envVars.synchronisedStorageMaxConsolidations)\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// If there is a trusted url set, we need to add a client\n\t\t// and give it a feature of trusted so that when the synchronised\n\t\t// storage is created it can pickup the correct component\n\t\tif (Is.stringValue(envVars.synchronisedStorageTrustedUrl)) {\n\t\t\tcoreConfig.types.synchronisedStorageComponent.push({\n\t\t\t\ttype: SynchronisedStorageComponentType.RestClient,\n\t\t\t\toptions: {\n\t\t\t\t\tendpoint: envVars.synchronisedStorageTrustedUrl\n\t\t\t\t},\n\t\t\t\tfeatures: [\"trusted\"]\n\t\t\t});\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 */\nasync function configureFederatedCatalogue(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.federatedCatalogueEnabled) ?? false) {\n\t\tcoreConfig.types.federatedCatalogueComponent ??= [];\n\t\tcoreConfig.types.federatedCatalogueComponent.push({\n\t\t\ttype: FederatedCatalogueComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tsubResourceCacheTtlMs: Coerce.number(envVars.federatedCatalogueCacheTtlMs),\n\t\t\t\t\tclearingHouseApproverList:\n\t\t\t\t\t\tCoerce.object<string[]>(envVars.federatedCatalogueClearingHouseApproverList) ?? []\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the data space connector.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureDataSpaceConnector(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.dataSpaceConnectorEnabled) ?? false) {\n\t\tcoreConfig.types.dataSpaceConnectorComponent ??= [];\n\t\tcoreConfig.types.dataSpaceConnectorComponent.push({\n\t\t\ttype: DataSpaceConnectorComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tretainActivityLogsFor: Coerce.number(envVars.dataSpaceConnectorRetainActivityLogsFor),\n\t\t\t\t\tactivityLogsCleanUpInterval: Coerce.number(\n\t\t\t\t\t\tenvVars.dataSpaceConnectorActivityLogsCleanUpInterval\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 DLT.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\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: Coerce.number(envVars.iotaCoinType),\n\t\t\t\t\tgasStation: gasStationConfig\n\t\t\t\t}\n\t\t\t}\n\t\t});\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 { Coerce, Is } from \"@twin.org/core\";\nimport type { IIotaConfig } from \"@twin.org/dlt-iota\";\nimport {\n\tAttestationComponentType,\n\tAttestationConnectorType,\n\tAuditableItemGraphComponentType,\n\tAuditableItemStreamComponentType,\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\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\tNftComponentType,\n\tNftConnectorType,\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\tSynchronisedStorageComponentType,\n\tTaskSchedulerComponentType,\n\tTelemetryComponentType,\n\tTelemetryConnectorType,\n\tTenantAdminComponentType,\n\tTrustComponentType,\n\ttype TrustGeneratorComponentType,\n\ttype TrustVerifierComponentType,\n\tVaultConnectorType,\n\tVerifiableStorageComponentType,\n\tVerifiableStorageConnectorType,\n\tWalletConnectorType\n} from \"@twin.org/engine-types\";\nimport { CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from \"../defaults.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 * @param contextIdKeys The context ID keys.\n * @returns The config for the core.\n */\nexport async function buildEngineConfiguration(\n\tenvVars: IEngineEnvironmentVariables,\n\tcontextIdKeys: { key: string; requiredHandlerFeatures: string[] }[]\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: Coerce.boolean(envVars.debug) ?? false,\n\t\tsilent: Coerce.boolean(envVars.silent) ?? false,\n\t\ttypes: {}\n\t};\n\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 configureMessaging(coreConfig, envVars);\n\n\tawait configureFaucet(coreConfig, envVars);\n\tawait configureWallet(coreConfig, envVars);\n\tawait configureNft(coreConfig, envVars);\n\tawait configureVerifiableStorage(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\tawait configureSynchronisedStorage(coreConfig, envVars);\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 */\nasync function configureEntityStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types ??= {};\n\tcoreConfig.types.entityStorageConnector ??= [];\n\n\tconst entityStorageConnectorTypes = commaSeparatedListToArray<\n\t\tOmit<EntityStorageConnectorType, typeof EntityStorageConnectorType.Synchronised>\n\t>(envVars.entityStorageConnectorType);\n\n\tif (entityStorageConnectorTypes.includes(EntityStorageConnectorType.Memory)) {\n\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\ttype: EntityStorageConnectorType.Memory\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: { directory: envVars.storageFileRoot ?? \"\" },\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: Coerce.integer(envVars.awsDynamodbConnectionTimeoutMs)\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},\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.gcpFirestoreApiEndpoint ?? \"\"\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: Coerce.integer(envVars.scylladbPort)\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: Coerce.integer(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},\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: Coerce.integer(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},\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: Coerce.integer(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},\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 */\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.gcpFirestoreApiEndpoint\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\t// If this blob storage connector is the one to use for public access\n\t\t\t// then add it as a feature\n\t\t\tif (\n\t\t\t\tIs.stringValue(envVars.blobStorageConnectorPublic) &&\n\t\t\t\tconfig.type === envVars.blobStorageConnectorPublic\n\t\t\t) {\n\t\t\t\tconfig.features ??= [];\n\t\t\t\tconfig.features.push(\"public\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (coreConfig.types.blobStorageConnector.length > 0) {\n\t\tcoreConfig.types.blobStorageComponent ??= [];\n\t\tcoreConfig.types.blobStorageComponent.push({\n\t\t\ttype: BlobStorageComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tvaultKeyId:\n\t\t\t\t\t\t(envVars.blobStorageEnableEncryption ?? false)\n\t\t\t\t\t\t\t? envVars.blobStorageEncryptionKeyId\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the logging.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\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});\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 */\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 */\nasync function configureBackgroundTask(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.backgroundTaskComponent ??= [];\n\n\tif (Coerce.boolean(envVars.backgroundTasksEnabled) ?? false) {\n\t\tcoreConfig.types.backgroundTaskComponent.push({\n\t\t\ttype: BackgroundTaskComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the event bud.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\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 */\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});\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 tenant.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureTenant(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.tenantEnabled) ?? false) {\n\t\tcoreConfig.types.tenantAdminComponent ??= [];\n\t\tcoreConfig.types.tenantAdminComponent.push({\n\t\t\ttype: TenantAdminComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.tenantComponent ??= [];\n\t\tcoreConfig.types.tenantComponent.push({ type: TenantAdminComponentType.Service });\n\t}\n}\n\n/**\n * Configures the context id handlers.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\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 (Coerce.boolean(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 */\nasync function configureMessaging(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(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\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: Is.array(envVars.awsMessagingPushNotificationApplications)\n\t\t\t\t\t\t\t? JSON.parse(envVars.awsMessagingPushNotificationApplications)\n\t\t\t\t\t\t\t: []\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 */\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 (envVars.faucetConnector === FaucetConnectorType.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.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 */\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 */\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\tcoreConfig.types.nftConnector.push({\n\t\t\ttype: NftConnectorType.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.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 verifiable storage.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureVerifiableStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.verifiableStorageConnector ??= [];\n\n\tif (envVars.verifiableStorageConnector === VerifiableStorageConnectorType.EntityStorage) {\n\t\tcoreConfig.types.verifiableStorageConnector.push({\n\t\t\ttype: VerifiableStorageConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.verifiableStorageConnector === VerifiableStorageConnectorType.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.verifiableStorageConnector.push({\n\t\t\ttype: VerifiableStorageConnectorType.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.verifiableStorageConnector.length > 0) {\n\t\tcoreConfig.types.verifiableStorageComponent ??= [];\n\t\tcoreConfig.types.verifiableStorageComponent.push({\n\t\t\ttype: VerifiableStorageComponentType.Service\n\t\t});\n\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}\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 */\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\twalletAddressIndex: Coerce.integer(envVars.identityWalletAddressIndex) ?? 0\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 */\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: dltConfig?.options?.config ?? ({} as IIotaConfig)\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 */\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 */\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 */\nasync function configureAuditableItemGraph(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.auditableItemGraphEnabled) ?? false) {\n\t\tcoreConfig.types.auditableItemGraphComponent ??= [];\n\t\tcoreConfig.types.auditableItemGraphComponent.push({\n\t\t\ttype: AuditableItemGraphComponentType.Service\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 */\nasync function configureAuditableItemStream(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.auditableItemStreamEnabled) ?? false) {\n\t\tcoreConfig.types.auditableItemStreamComponent ??= [];\n\t\tcoreConfig.types.auditableItemStreamComponent.push({\n\t\t\ttype: AuditableItemStreamComponentType.Service\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 */\nasync function configureDataProcessing(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(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 */\nasync function configureDocumentManagement(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.documentManagementEnabled) ?? false) {\n\t\tcoreConfig.types.documentManagementComponent ??= [];\n\t\tcoreConfig.types.documentManagementComponent.push({\n\t\t\ttype: DocumentManagementComponentType.Service\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 */\nasync function configureTrust(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.trustEnabled) ?? false) {\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: Coerce.integer(envVars.trustJwtTtlSeconds)\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\tcoreConfig.types.trustVerifierComponent.push({\n\t\t\t\ttype: trustVerifierType as TrustVerifierComponentType\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 */\nasync function configureRightsManagement(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.rightsManagementEnabled) ?? false) {\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// 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\tendpoint: \"http://localhost\"\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: envVars.rightsManagementCallbackPath ?? \"\",\n\t\t\t\t\tincludeErrorDetails: coreConfig.debug ?? false\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});\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 */\nasync function configureTaskScheduler(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.taskSchedulerEnabled) ?? false) {\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 synchronised storage.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureSynchronisedStorage(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (\n\t\tIs.arrayValue(coreConfig.types.identityResolverComponent) &&\n\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false)\n\t) {\n\t\t// Check if the config provides a custom verifiable storage key id\n\t\tlet verifiableStorageKeyId = Coerce.string(envVars.synchronisedStorageVerifiableStorageKeyId);\n\n\t\tif (!Is.stringValue(verifiableStorageKeyId)) {\n\t\t\t// No custom key so default to the network setting\n\t\t\tverifiableStorageKeyId = envVars.iotaNetwork;\n\t\t}\n\t\tcoreConfig.types.synchronisedStorageComponent ??= [];\n\t\tcoreConfig.types.synchronisedStorageComponent.push({\n\t\t\ttype: SynchronisedStorageComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverifiableStorageKeyId: verifiableStorageKeyId ?? \"\",\n\t\t\t\t\tblobStorageEncryptionKeyId: envVars.synchronisedStorageBlobStorageEncryptionKeyId,\n\t\t\t\t\tentityUpdateIntervalMinutes: Coerce.number(\n\t\t\t\t\t\tenvVars.synchronisedStorageEntityUpdateIntervalMinutes\n\t\t\t\t\t),\n\t\t\t\t\tconsolidationIntervalMinutes: Coerce.number(\n\t\t\t\t\t\tenvVars.synchronisedStorageConsolidationIntervalMinutes\n\t\t\t\t\t),\n\t\t\t\t\tconsolidationBatchSize: Coerce.number(envVars.synchronisedStorageConsolidationBatchSize),\n\t\t\t\t\tmaxConsolidations: Coerce.number(envVars.synchronisedStorageMaxConsolidations)\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// If there is a trusted url set, we need to add a client\n\t\t// and give it a feature of trusted so that when the synchronised\n\t\t// storage is created it can pickup the correct component\n\t\tif (Is.stringValue(envVars.synchronisedStorageTrustedUrl)) {\n\t\t\tcoreConfig.types.synchronisedStorageComponent.push({\n\t\t\t\ttype: SynchronisedStorageComponentType.RestClient,\n\t\t\t\toptions: {\n\t\t\t\t\tendpoint: envVars.synchronisedStorageTrustedUrl\n\t\t\t\t},\n\t\t\t\tfeatures: [\"trusted\"]\n\t\t\t});\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 */\nasync function configureFederatedCatalogue(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.federatedCatalogueEnabled) ?? false) {\n\t\t// If synchronised storage is enabled, then we need to add an entity storage connector\n\t\t// using synchronised storage for the federated catalogue component\n\t\t// as it relies on the synchronised storage to sync the data between the different instances of the federated catalogue\n\t\tlet overrideEntityStorageType;\n\t\tif (\n\t\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false) &&\n\t\t\tIs.arrayValue(coreConfig.types.entityStorageConnector)\n\t\t) {\n\t\t\tlet defaultConnector = coreConfig.types.entityStorageConnector.find(\n\t\t\t\tconnector => connector.isDefault\n\t\t\t);\n\t\t\tif (Is.empty(defaultConnector)) {\n\t\t\t\t// If there is no default connector, we set the first one as the default one\n\t\t\t\tdefaultConnector = coreConfig.types.entityStorageConnector[0];\n\t\t\t}\n\n\t\t\toverrideEntityStorageType = \"federated-catalogue-dataset\";\n\t\t\tcoreConfig.types.entityStorageConnector ??= [];\n\t\t\tcoreConfig.types.entityStorageConnector.push({\n\t\t\t\ttype: EntityStorageConnectorType.Synchronised,\n\t\t\t\toverrideInstanceType: overrideEntityStorageType,\n\t\t\t\toptions: {\n\t\t\t\t\tentityStorageConnectorType: defaultConnector.type\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tcoreConfig.types.federatedCatalogueComponent ??= [];\n\t\tcoreConfig.types.federatedCatalogueComponent.push({\n\t\t\ttype: FederatedCatalogueComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tdatasetEntityStorageType: overrideEntityStorageType\n\t\t\t}\n\t\t});\n\n\t\tcoreConfig.types.federatedCatalogueFilterComponent ??= [];\n\t\tconst filters = commaSeparatedListToArray(envVars.federatedCatalogueFilters);\n\n\t\tfor (const filter of filters) {\n\t\t\tcoreConfig.types.federatedCatalogueFilterComponent.push({\n\t\t\t\ttype: filter as FederatedCatalogueFilterComponentType,\n\t\t\t\toptions: {}\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 */\nasync function configureDataspace(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (Coerce.boolean(envVars.dataspaceEnabled) ?? false) {\n\t\tcoreConfig.types.dataspaceControlPlaneComponent ??= [];\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\tdataPlanePath: envVars.dataspaceDataPlanePath\n\t\t\t\t}\n\t\t\t}\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\tretainActivityLogsFor: Coerce.number(envVars.dataspaceRetainActivityLogsFor),\n\t\t\t\t\tactivityLogsCleanUpInterval: Coerce.number(envVars.dataspaceActivityLogsCleanUpInterval)\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 */\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: Coerce.number(envVars.iotaCoinType),\n\t\t\t\t\tgasStation: gasStationConfig\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Converts a comma separated list to an array.\n * @param value The comma separated list.\n * @returns The array.\n */\nfunction commaSeparatedListToArray<T>(value: string | undefined): T[] {\n\treturn (value ?? \"\")\n\t\t.split(\",\")\n\t\t.map(item => item.trim())\n\t\t.filter(item => item.length > 0) as T[];\n}\n"]}
@@ -1,10 +1,8 @@
1
1
  import { ContextIdKeys } from "@twin.org/context";
2
- import { Coerce, Is } from "@twin.org/core";
2
+ import { Coerce, GeneralError, Is, StringHelper, Url } from "@twin.org/core";
3
3
  import { addDefaultRestPaths, addDefaultSocketPaths } from "@twin.org/engine-server";
4
- import { AuthenticationAdminComponentType, AuthenticationComponentType, InformationComponentType, RestRouteProcessorType, SocketRouteProcessorType } from "@twin.org/engine-server-types";
5
- import { AUTH_SIGNING_KEY_ID, CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from "../defaults.js";
6
- import { NodeFeatures } from "../models/nodeFeatures.js";
7
- import { getFeatures } from "../utils.js";
4
+ import { AuthenticationAdminComponentType, AuthenticationComponentType, HostingComponentType, InformationComponentType, RestRouteProcessorType, SocketRouteProcessorType } from "@twin.org/engine-server-types";
5
+ import { CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from "../defaults.js";
8
6
  /**
9
7
  * Handles the configuration of the server.
10
8
  * @param envVars The environment variables for the engine server.
@@ -30,6 +28,19 @@ export async function buildEngineServerConfiguration(envVars, availableContextId
30
28
  : undefined,
31
29
  corsOrigins: Is.stringValue(envVars.corsOrigins) ? envVars.corsOrigins.split(",") : undefined
32
30
  };
31
+ const localOrigin = `http://${webServerOptions.host ?? "localhost"}:${webServerOptions.port ?? 3000}`;
32
+ let publicOrigin;
33
+ if (Is.stringValue(envVars.publicOrigin)) {
34
+ const publicUrl = Url.tryParseExact(envVars.publicOrigin);
35
+ if (!Is.empty(publicUrl)) {
36
+ const urlParts = publicUrl.parts();
37
+ publicOrigin = `${urlParts.schema}://${urlParts.host}${Is.integer(urlParts.port) ? `:${urlParts.port}` : ""}`;
38
+ }
39
+ else {
40
+ throw new GeneralError("node", "invalidPublicOrigin", { publicOrigin: envVars.publicOrigin });
41
+ }
42
+ }
43
+ const nodeIdentityEnabled = Coerce.boolean(envVars.nodeIdentityEnabled) ?? true;
33
44
  const tenantEnabled = Coerce.boolean(envVars.tenantEnabled) ?? false;
34
45
  if (tenantEnabled) {
35
46
  webServerOptions.allowedHeaders ??= [];
@@ -53,6 +64,17 @@ export async function buildEngineServerConfiguration(envVars, availableContextId
53
64
  }
54
65
  }
55
66
  }
67
+ ],
68
+ hostingComponent: [
69
+ {
70
+ type: HostingComponentType.Service,
71
+ options: {
72
+ config: {
73
+ localOrigin,
74
+ publicOrigin
75
+ }
76
+ }
77
+ }
56
78
  ]
57
79
  }
58
80
  };
@@ -69,12 +91,10 @@ export async function buildEngineServerConfiguration(envVars, availableContextId
69
91
  }
70
92
  serverConfig.types.restRouteProcessor ??= [];
71
93
  serverConfig.types.socketRouteProcessor ??= [];
72
- const features = getFeatures(envVars);
73
- const hasNodeId = features.includes(NodeFeatures.NodeId);
74
- if (hasNodeId) {
94
+ if (nodeIdentityEnabled) {
75
95
  availableContextIdKeys.push({
76
96
  key: ContextIdKeys.Node,
77
- componentFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]
97
+ requiredHandlerFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]
78
98
  });
79
99
  serverConfig.types.restRouteProcessor.push({
80
100
  type: RestRouteProcessorType.ContextId,
@@ -96,7 +116,7 @@ export async function buildEngineServerConfiguration(envVars, availableContextId
96
116
  if (tenantEnabled) {
97
117
  availableContextIdKeys.push({
98
118
  key: ContextIdKeys.Tenant,
99
- componentFeatures: [CONTEXT_ID_HANDLER_FEATURE_TENANT]
119
+ requiredHandlerFeatures: [CONTEXT_ID_HANDLER_FEATURE_TENANT]
100
120
  });
101
121
  serverConfig.types.restRouteProcessor.push({
102
122
  type: RestRouteProcessorType.Tenant
@@ -162,18 +182,18 @@ export async function buildEngineServerConfiguration(envVars, availableContextId
162
182
  if (authProcessorType === AuthenticationComponentType.EntityStorage) {
163
183
  availableContextIdKeys.push({
164
184
  key: ContextIdKeys.Organization,
165
- componentFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]
185
+ requiredHandlerFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]
166
186
  });
167
187
  availableContextIdKeys.push({
168
188
  key: ContextIdKeys.User,
169
- componentFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]
189
+ requiredHandlerFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]
170
190
  });
171
191
  serverConfig.types.authenticationComponent ??= [];
172
192
  serverConfig.types.authenticationComponent.push({
173
193
  type: AuthenticationComponentType.EntityStorage,
174
194
  options: {
175
195
  config: {
176
- signingKeyName: envVars.authSigningKeyId ?? AUTH_SIGNING_KEY_ID
196
+ signingKeyName: envVars.authSigningKeyId
177
197
  }
178
198
  }
179
199
  });
@@ -181,7 +201,7 @@ export async function buildEngineServerConfiguration(envVars, availableContextId
181
201
  type: RestRouteProcessorType.AuthHeader,
182
202
  options: {
183
203
  config: {
184
- signingKeyName: envVars.authSigningKeyId ?? AUTH_SIGNING_KEY_ID
204
+ signingKeyName: envVars.authSigningKeyId
185
205
  }
186
206
  }
187
207
  });
@@ -189,21 +209,29 @@ export async function buildEngineServerConfiguration(envVars, availableContextId
189
209
  type: SocketRouteProcessorType.AuthHeader,
190
210
  options: {
191
211
  config: {
192
- signingKeyName: envVars.authSigningKeyId ?? AUTH_SIGNING_KEY_ID
212
+ signingKeyName: envVars.authSigningKeyId
193
213
  }
194
214
  }
195
215
  });
196
216
  }
197
- if (Coerce.boolean(envVars.vcAuthenticationEnabled) ?? false) {
198
- serverConfig.types.restRouteProcessor.push({
199
- type: RestRouteProcessorType.AuthVerifiableCredential
200
- });
201
- serverConfig.types.socketRouteProcessor.push({
202
- type: SocketRouteProcessorType.AuthVerifiableCredential
203
- });
204
- }
205
217
  addDefaultRestPaths(serverConfig);
206
218
  addDefaultSocketPaths(serverConfig);
219
+ // See if any of the rest paths should be overridden by environment variables and update the config accordingly
220
+ for (const componentType in serverConfig.types) {
221
+ const types = serverConfig.types[componentType];
222
+ if (Is.arrayValue(types)) {
223
+ for (const typeConfig of types) {
224
+ if (Is.stringValue(typeConfig.restPath)) {
225
+ const envVarName = `restPath${StringHelper.pascalCase(componentType.replace("Component", ""))}`;
226
+ const overrideRestPath = envVars[envVarName];
227
+ if (Is.stringValue(overrideRestPath)) {
228
+ typeConfig.restPath = overrideRestPath;
229
+ }
230
+ break;
231
+ }
232
+ }
233
+ }
234
+ }
207
235
  return serverConfig;
208
236
  }
209
237
  //# sourceMappingURL=engineServerEnvBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engineServerEnvBuilder.js","sourceRoot":"","sources":["../../../src/builders/engineServerEnvBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IServerInfo, IWebServerOptions } from \"@twin.org/api-models\";\nimport { ContextIdKeys } from \"@twin.org/context\";\nimport { Coerce, Is } from \"@twin.org/core\";\nimport type { IEngineCoreConfig } from \"@twin.org/engine-models\";\nimport { addDefaultRestPaths, addDefaultSocketPaths } from \"@twin.org/engine-server\";\nimport {\n\tAuthenticationAdminComponentType,\n\tAuthenticationComponentType,\n\ttype IEngineServerConfig,\n\tInformationComponentType,\n\ttype MimeTypeProcessorType,\n\tRestRouteProcessorType,\n\tSocketRouteProcessorType\n} from \"@twin.org/engine-server-types\";\nimport type { HttpMethod } from \"@twin.org/web\";\nimport {\n\tAUTH_SIGNING_KEY_ID,\n\tCONTEXT_ID_HANDLER_FEATURE_DID,\n\tCONTEXT_ID_HANDLER_FEATURE_TENANT\n} from \"../defaults.js\";\nimport type { IEngineServerEnvironmentVariables } from \"../models/IEngineServerEnvironmentVariables.js\";\nimport { NodeFeatures } from \"../models/nodeFeatures.js\";\nimport { getFeatures } from \"../utils.js\";\n\n/**\n * Handles the configuration of the server.\n * @param envVars The environment variables for the engine server.\n * @param availableContextIdKeys The context ID keys.\n * @param coreEngineConfig The core engine config.\n * @param serverInfo The server information.\n * @param openApiSpecPath The path to the open api spec.\n * @param favIconPath The path to the favicon.\n * @returns The config for the core and the server.\n */\nexport async function buildEngineServerConfiguration(\n\tenvVars: IEngineServerEnvironmentVariables,\n\tavailableContextIdKeys: { key: string; componentFeatures: string[] }[],\n\tcoreEngineConfig: IEngineCoreConfig,\n\tserverInfo: IServerInfo,\n\topenApiSpecPath?: string,\n\tfavIconPath?: string\n): Promise<IEngineServerConfig> {\n\tconst webServerOptions: IWebServerOptions = {\n\t\tport: Coerce.number(envVars.port),\n\t\thost: Coerce.string(envVars.host),\n\t\tmethods: Is.stringValue(envVars.httpMethods)\n\t\t\t? (envVars.httpMethods.split(\",\") as HttpMethod[])\n\t\t\t: undefined,\n\t\tallowedHeaders: Is.stringValue(envVars.httpAllowedHeaders)\n\t\t\t? envVars.httpAllowedHeaders.split(\",\")\n\t\t\t: undefined,\n\t\texposedHeaders: Is.stringValue(envVars.httpExposedHeaders)\n\t\t\t? envVars.httpExposedHeaders.split(\",\")\n\t\t\t: undefined,\n\t\tcorsOrigins: Is.stringValue(envVars.corsOrigins) ? envVars.corsOrigins.split(\",\") : undefined\n\t};\n\n\tconst tenantEnabled = Coerce.boolean(envVars.tenantEnabled) ?? false;\n\tif (tenantEnabled) {\n\t\twebServerOptions.allowedHeaders ??= [];\n\t\tif (!webServerOptions.allowedHeaders.includes(\"x-api-key\")) {\n\t\t\twebServerOptions.allowedHeaders.push(\"x-api-key\");\n\t\t}\n\t}\n\n\tconst serverConfig: IEngineServerConfig = {\n\t\t...coreEngineConfig,\n\t\tweb: webServerOptions,\n\t\ttypes: {\n\t\t\t...coreEngineConfig.types,\n\t\t\tinformationComponent: [\n\t\t\t\t{\n\t\t\t\t\ttype: InformationComponentType.Service,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tserverInfo,\n\t\t\t\t\t\t\topenApiSpecPath,\n\t\t\t\t\t\t\tfavIconPath\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t};\n\n\tif (Is.stringValue(envVars.mimeTypeProcessors)) {\n\t\tconst mimeTypeProcessors = envVars.mimeTypeProcessors.split(\",\");\n\n\t\tif (Is.arrayValue(mimeTypeProcessors)) {\n\t\t\tserverConfig.types.mimeTypeProcessor ??= [];\n\t\t\tfor (const mimeTypeProcessor of mimeTypeProcessors) {\n\t\t\t\tserverConfig.types.mimeTypeProcessor.push({\n\t\t\t\t\ttype: mimeTypeProcessor as MimeTypeProcessorType\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tserverConfig.types.restRouteProcessor ??= [];\n\tserverConfig.types.socketRouteProcessor ??= [];\n\n\tconst features = getFeatures(envVars);\n\tconst hasNodeId = features.includes(NodeFeatures.NodeId);\n\n\tif (hasNodeId) {\n\t\tavailableContextIdKeys.push({\n\t\t\tkey: ContextIdKeys.Node,\n\t\t\tcomponentFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]\n\t\t});\n\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.ContextId,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tkey: ContextIdKeys.Node\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.ContextId,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tkey: ContextIdKeys.Node\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (tenantEnabled) {\n\t\tavailableContextIdKeys.push({\n\t\t\tkey: ContextIdKeys.Tenant,\n\t\t\tcomponentFeatures: [CONTEXT_ID_HANDLER_FEATURE_TENANT]\n\t\t});\n\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.Tenant\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.Tenant\n\t\t});\n\t}\n\n\tif (!coreEngineConfig.silent) {\n\t\tconst includeBody = Coerce.boolean(envVars.routeLoggingIncludeBody) ?? coreEngineConfig.debug;\n\t\tconst fullBase64 = Coerce.boolean(envVars.routeLoggingFullBase64) ?? false;\n\t\tconst obfuscateProperties = Is.stringValue(envVars.routeLoggingObfuscateProperties)\n\t\t\t? envVars.routeLoggingObfuscateProperties.split(\",\")\n\t\t\t: undefined;\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.Logging,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tincludeBody,\n\t\t\t\t\tfullBase64,\n\t\t\t\t\tobfuscateProperties\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.Logging,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tincludeBody,\n\t\t\t\t\tfullBase64,\n\t\t\t\t\tobfuscateProperties\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tserverConfig.types.restRouteProcessor.push({\n\t\ttype: RestRouteProcessorType.RestRoute,\n\t\toptions: {\n\t\t\tconfig: {\n\t\t\t\tincludeErrorStack: coreEngineConfig.debug\n\t\t\t}\n\t\t}\n\t});\n\tserverConfig.types.socketRouteProcessor.push({\n\t\ttype: SocketRouteProcessorType.SocketRoute,\n\t\toptions: {\n\t\t\tconfig: {\n\t\t\t\tincludeErrorStack: coreEngineConfig.debug\n\t\t\t}\n\t\t}\n\t});\n\n\tconst authAdminProcessorType = envVars.authAdminProcessorType;\n\tif (authAdminProcessorType === AuthenticationAdminComponentType.EntityStorage) {\n\t\tserverConfig.types.authenticationAdminComponent ??= [];\n\t\tserverConfig.types.authenticationAdminComponent.push({\n\t\t\ttype: AuthenticationAdminComponentType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {}\n\t\t\t}\n\t\t});\n\t}\n\n\tconst authProcessorType = envVars.authProcessorType;\n\tif (authProcessorType === AuthenticationComponentType.EntityStorage) {\n\t\tavailableContextIdKeys.push({\n\t\t\tkey: ContextIdKeys.Organization,\n\t\t\tcomponentFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]\n\t\t});\n\t\tavailableContextIdKeys.push({\n\t\t\tkey: ContextIdKeys.User,\n\t\t\tcomponentFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]\n\t\t});\n\n\t\tserverConfig.types.authenticationComponent ??= [];\n\t\tserverConfig.types.authenticationComponent.push({\n\t\t\ttype: AuthenticationComponentType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tsigningKeyName: envVars.authSigningKeyId ?? AUTH_SIGNING_KEY_ID\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.AuthHeader,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tsigningKeyName: envVars.authSigningKeyId ?? AUTH_SIGNING_KEY_ID\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.AuthHeader,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tsigningKeyName: envVars.authSigningKeyId ?? AUTH_SIGNING_KEY_ID\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (Coerce.boolean(envVars.vcAuthenticationEnabled) ?? false) {\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.AuthVerifiableCredential\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.AuthVerifiableCredential\n\t\t});\n\t}\n\n\taddDefaultRestPaths(serverConfig);\n\taddDefaultSocketPaths(serverConfig);\n\n\treturn serverConfig;\n}\n"]}
1
+ {"version":3,"file":"engineServerEnvBuilder.js","sourceRoot":"","sources":["../../../src/builders/engineServerEnvBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IServerInfo, IWebServerOptions } from \"@twin.org/api-models\";\nimport { ContextIdKeys } from \"@twin.org/context\";\nimport { Coerce, GeneralError, Is, StringHelper, Url } from \"@twin.org/core\";\nimport type { IEngineCoreConfig } from \"@twin.org/engine-models\";\nimport { addDefaultRestPaths, addDefaultSocketPaths } from \"@twin.org/engine-server\";\nimport {\n\tAuthenticationAdminComponentType,\n\tAuthenticationComponentType,\n\tHostingComponentType,\n\ttype IEngineServerConfig,\n\tInformationComponentType,\n\ttype MimeTypeProcessorType,\n\tRestRouteProcessorType,\n\tSocketRouteProcessorType\n} from \"@twin.org/engine-server-types\";\nimport type { HttpMethod } from \"@twin.org/web\";\nimport { CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from \"../defaults.js\";\nimport type { IEngineServerEnvironmentVariables } from \"../models/IEngineServerEnvironmentVariables.js\";\n\n/**\n * Handles the configuration of the server.\n * @param envVars The environment variables for the engine server.\n * @param availableContextIdKeys The context ID keys.\n * @param coreEngineConfig The core engine config.\n * @param serverInfo The server information.\n * @param openApiSpecPath The path to the open api spec.\n * @param favIconPath The path to the favicon.\n * @returns The config for the core and the server.\n */\nexport async function buildEngineServerConfiguration(\n\tenvVars: IEngineServerEnvironmentVariables & { [id: string]: string | unknown },\n\tavailableContextIdKeys: { key: string; requiredHandlerFeatures: string[] }[],\n\tcoreEngineConfig: IEngineCoreConfig,\n\tserverInfo: IServerInfo,\n\topenApiSpecPath?: string,\n\tfavIconPath?: string\n): Promise<IEngineServerConfig> {\n\tconst webServerOptions: IWebServerOptions = {\n\t\tport: Coerce.number(envVars.port),\n\t\thost: Coerce.string(envVars.host),\n\t\tmethods: Is.stringValue(envVars.httpMethods)\n\t\t\t? (envVars.httpMethods.split(\",\") as HttpMethod[])\n\t\t\t: undefined,\n\t\tallowedHeaders: Is.stringValue(envVars.httpAllowedHeaders)\n\t\t\t? envVars.httpAllowedHeaders.split(\",\")\n\t\t\t: undefined,\n\t\texposedHeaders: Is.stringValue(envVars.httpExposedHeaders)\n\t\t\t? envVars.httpExposedHeaders.split(\",\")\n\t\t\t: undefined,\n\t\tcorsOrigins: Is.stringValue(envVars.corsOrigins) ? envVars.corsOrigins.split(\",\") : undefined\n\t};\n\n\tconst localOrigin = `http://${webServerOptions.host ?? \"localhost\"}:${webServerOptions.port ?? 3000}`;\n\n\tlet publicOrigin;\n\tif (Is.stringValue(envVars.publicOrigin)) {\n\t\tconst publicUrl = Url.tryParseExact(envVars.publicOrigin);\n\t\tif (!Is.empty(publicUrl)) {\n\t\t\tconst urlParts = publicUrl.parts();\n\t\t\tpublicOrigin = `${urlParts.schema}://${urlParts.host}${Is.integer(urlParts.port) ? `:${urlParts.port}` : \"\"}`;\n\t\t} else {\n\t\t\tthrow new GeneralError(\"node\", \"invalidPublicOrigin\", { publicOrigin: envVars.publicOrigin });\n\t\t}\n\t}\n\n\tconst nodeIdentityEnabled = Coerce.boolean(envVars.nodeIdentityEnabled) ?? true;\n\tconst tenantEnabled = Coerce.boolean(envVars.tenantEnabled) ?? false;\n\tif (tenantEnabled) {\n\t\twebServerOptions.allowedHeaders ??= [];\n\t\tif (!webServerOptions.allowedHeaders.includes(\"x-api-key\")) {\n\t\t\twebServerOptions.allowedHeaders.push(\"x-api-key\");\n\t\t}\n\t}\n\n\tconst serverConfig: IEngineServerConfig = {\n\t\t...coreEngineConfig,\n\t\tweb: webServerOptions,\n\t\ttypes: {\n\t\t\t...coreEngineConfig.types,\n\t\t\tinformationComponent: [\n\t\t\t\t{\n\t\t\t\t\ttype: InformationComponentType.Service,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tserverInfo,\n\t\t\t\t\t\t\topenApiSpecPath,\n\t\t\t\t\t\t\tfavIconPath\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\thostingComponent: [\n\t\t\t\t{\n\t\t\t\t\ttype: HostingComponentType.Service,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tlocalOrigin,\n\t\t\t\t\t\t\tpublicOrigin\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t};\n\n\tif (Is.stringValue(envVars.mimeTypeProcessors)) {\n\t\tconst mimeTypeProcessors = envVars.mimeTypeProcessors.split(\",\");\n\n\t\tif (Is.arrayValue(mimeTypeProcessors)) {\n\t\t\tserverConfig.types.mimeTypeProcessor ??= [];\n\t\t\tfor (const mimeTypeProcessor of mimeTypeProcessors) {\n\t\t\t\tserverConfig.types.mimeTypeProcessor.push({\n\t\t\t\t\ttype: mimeTypeProcessor as MimeTypeProcessorType\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tserverConfig.types.restRouteProcessor ??= [];\n\tserverConfig.types.socketRouteProcessor ??= [];\n\n\tif (nodeIdentityEnabled) {\n\t\tavailableContextIdKeys.push({\n\t\t\tkey: ContextIdKeys.Node,\n\t\t\trequiredHandlerFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]\n\t\t});\n\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.ContextId,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tkey: ContextIdKeys.Node\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.ContextId,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tkey: ContextIdKeys.Node\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (tenantEnabled) {\n\t\tavailableContextIdKeys.push({\n\t\t\tkey: ContextIdKeys.Tenant,\n\t\t\trequiredHandlerFeatures: [CONTEXT_ID_HANDLER_FEATURE_TENANT]\n\t\t});\n\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.Tenant\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.Tenant\n\t\t});\n\t}\n\n\tif (!coreEngineConfig.silent) {\n\t\tconst includeBody = Coerce.boolean(envVars.routeLoggingIncludeBody) ?? coreEngineConfig.debug;\n\t\tconst fullBase64 = Coerce.boolean(envVars.routeLoggingFullBase64) ?? false;\n\t\tconst obfuscateProperties = Is.stringValue(envVars.routeLoggingObfuscateProperties)\n\t\t\t? envVars.routeLoggingObfuscateProperties.split(\",\")\n\t\t\t: undefined;\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.Logging,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tincludeBody,\n\t\t\t\t\tfullBase64,\n\t\t\t\t\tobfuscateProperties\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.Logging,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tincludeBody,\n\t\t\t\t\tfullBase64,\n\t\t\t\t\tobfuscateProperties\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tserverConfig.types.restRouteProcessor.push({\n\t\ttype: RestRouteProcessorType.RestRoute,\n\t\toptions: {\n\t\t\tconfig: {\n\t\t\t\tincludeErrorStack: coreEngineConfig.debug\n\t\t\t}\n\t\t}\n\t});\n\tserverConfig.types.socketRouteProcessor.push({\n\t\ttype: SocketRouteProcessorType.SocketRoute,\n\t\toptions: {\n\t\t\tconfig: {\n\t\t\t\tincludeErrorStack: coreEngineConfig.debug\n\t\t\t}\n\t\t}\n\t});\n\n\tconst authAdminProcessorType = envVars.authAdminProcessorType;\n\tif (authAdminProcessorType === AuthenticationAdminComponentType.EntityStorage) {\n\t\tserverConfig.types.authenticationAdminComponent ??= [];\n\t\tserverConfig.types.authenticationAdminComponent.push({\n\t\t\ttype: AuthenticationAdminComponentType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {}\n\t\t\t}\n\t\t});\n\t}\n\n\tconst authProcessorType = envVars.authProcessorType;\n\tif (authProcessorType === AuthenticationComponentType.EntityStorage) {\n\t\tavailableContextIdKeys.push({\n\t\t\tkey: ContextIdKeys.Organization,\n\t\t\trequiredHandlerFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]\n\t\t});\n\t\tavailableContextIdKeys.push({\n\t\t\tkey: ContextIdKeys.User,\n\t\t\trequiredHandlerFeatures: [CONTEXT_ID_HANDLER_FEATURE_DID]\n\t\t});\n\n\t\tserverConfig.types.authenticationComponent ??= [];\n\t\tserverConfig.types.authenticationComponent.push({\n\t\t\ttype: AuthenticationComponentType.EntityStorage,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tsigningKeyName: envVars.authSigningKeyId\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tserverConfig.types.restRouteProcessor.push({\n\t\t\ttype: RestRouteProcessorType.AuthHeader,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tsigningKeyName: envVars.authSigningKeyId\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tserverConfig.types.socketRouteProcessor.push({\n\t\t\ttype: SocketRouteProcessorType.AuthHeader,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tsigningKeyName: envVars.authSigningKeyId\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\taddDefaultRestPaths(serverConfig);\n\taddDefaultSocketPaths(serverConfig);\n\n\t// See if any of the rest paths should be overridden by environment variables and update the config accordingly\n\tfor (const componentType in serverConfig.types) {\n\t\tconst types = serverConfig.types[componentType];\n\n\t\tif (Is.arrayValue(types)) {\n\t\t\tfor (const typeConfig of types) {\n\t\t\t\tif (Is.stringValue(typeConfig.restPath)) {\n\t\t\t\t\tconst envVarName = `restPath${StringHelper.pascalCase(componentType.replace(\"Component\", \"\"))}`;\n\t\t\t\t\tconst overrideRestPath = envVars[envVarName];\n\t\t\t\t\tif (Is.stringValue(overrideRestPath)) {\n\t\t\t\t\t\ttypeConfig.restPath = overrideRestPath;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn serverConfig;\n}\n"]}