@twin.org/node-core 0.0.3-next.39 → 0.0.3-next.40

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.
@@ -518,7 +518,8 @@ async function configureHealth(coreConfig, envVars) {
518
518
  type: HealthComponentType.Service,
519
519
  options: {
520
520
  config: {
521
- healthCheckInterval: (Coerce.integer(envVars.healthIntervalSeconds) ?? 60) * 1000
521
+ healthCheckInterval: (Coerce.integer(envVars.healthIntervalSeconds) ?? 60) * 1000,
522
+ initialInterval: (Coerce.integer(envVars.healthStartupIntervalSeconds) ?? 2) * 1000
522
523
  }
523
524
  }
524
525
  });
@@ -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 {\n\tAttestationComponentType,\n\tAttestationConnectorType,\n\tAuditableItemGraphComponentType,\n\tAuditableItemStreamComponentType,\n\ttype AutomationActionConfig,\n\ttype AutomationActionType,\n\tAutomationComponentType,\n\tBackgroundTaskComponentType,\n\tBlobStorageComponentType,\n\tBlobStorageConnectorType,\n\tContextIdHandlerComponentType,\n\ttype DataConverterConnectorType,\n\ttype DataExtractorConnectorType,\n\tDataProcessingComponentType,\n\tDataspaceControlPlaneComponentType,\n\tDataspaceDataPlaneComponentType,\n\ttype DltConfig,\n\tDltConfigType,\n\tDocumentManagementComponentType,\n\tEngineTypeHelper,\n\tEntityStorageConnectorType,\n\tEventBusComponentType,\n\tEventBusConnectorType,\n\tFaucetConnectorType,\n\tFederatedCatalogueComponentType,\n\ttype FederatedCatalogueFilterComponentType,\n\tHealthComponentType,\n\tIdentityComponentType,\n\tIdentityConnectorType,\n\tIdentityProfileComponentType,\n\tIdentityProfileConnectorType,\n\tIdentityResolverComponentType,\n\tIdentityResolverConnectorType,\n\ttype IEngineConfig,\n\tImmutableProofComponentType,\n\tLoggingComponentType,\n\tLoggingConnectorType,\n\tMessagingAdminComponentType,\n\tMessagingComponentType,\n\tMessagingEmailConnectorType,\n\tMessagingPushNotificationConnectorType,\n\tMessagingSmsConnectorType,\n\tMetricsCollectorComponentType,\n\tMetricsProducerComponentType,\n\tNftComponentType,\n\tNftConnectorType,\n\tNotarizationComponentType,\n\tNotarizationConnectorType,\n\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\tUrlTransformerComponentType,\n\tVaultConnectorType,\n\tVerifiableStorageComponentType,\n\tVerifiableStorageConnectorType,\n\tWalletConnectorType\n} from \"@twin.org/engine-types\";\nimport {\n\ttype IOpenTelemetryTelemetryConnectorConfig,\n\tOpenTelemetryReaderTypes\n} from \"@twin.org/telemetry-connector-opentelemetry\";\nimport { CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from \"../defaults.js\";\nimport { isAuthEntityStorageRequired } from \"./engineServerEnvBuilder.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 configureMetricsCollector(coreConfig, envVars);\n\tawait configureMessaging(coreConfig, envVars);\n\tawait configureAutomation(coreConfig, envVars);\n\tawait configureHealth(coreConfig, envVars);\n\tawait configureUrlTransformer(coreConfig, envVars);\n\n\tawait configureFaucet(coreConfig, envVars);\n\tawait configureWallet(coreConfig, envVars);\n\tawait configureNft(coreConfig, envVars);\n\tawait configureNotarization(coreConfig, envVars);\n\tawait configureVerifiableStorage(coreConfig, envVars);\n\tawait configureImmutableProof(coreConfig, envVars);\n\tawait configureIdentity(coreConfig, envVars);\n\tawait configureIdentityResolver(coreConfig, envVars);\n\tawait configureIdentityProfile(coreConfig, envVars);\n\tawait configureAttestation(coreConfig, envVars);\n\tawait configureDataProcessing(coreConfig, envVars);\n\n\tawait configureAuditableItemGraph(coreConfig, envVars);\n\tawait configureAuditableItemStream(coreConfig, envVars);\n\tawait configureDocumentManagement(coreConfig, envVars);\n\tawait configureTrust(coreConfig, envVars);\n\tawait configureRightsManagement(coreConfig, envVars);\n\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 (isBackgroundTasksRequired(envVars)) {\n\t\tcoreConfig.types.backgroundTaskComponent.push({\n\t\t\ttype: BackgroundTaskComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the event 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} else if (envVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry) {\n\t\tlet readers: IOpenTelemetryTelemetryConnectorConfig[\"readers\"];\n\t\tif (envVars.openTelemetryReader === \"prometheus\") {\n\t\t\treaders = {\n\t\t\t\tprometheus: {\n\t\t\t\t\ttype: OpenTelemetryReaderTypes.Prometheus,\n\t\t\t\t\tport: Coerce.integer(envVars.openTelemetryPrometheusPort)\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\ttype: TelemetryConnectorType.OpenTelemetry,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmeterName: envVars.openTelemetryMeterName,\n\t\t\t\t\tmeterVersion: envVars.openTelemetryMeterVersion,\n\t\t\t\t\treaders\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.telemetryConnector.length > 0) {\n\t\tcoreConfig.types.telemetryComponent ??= [];\n\t\tcoreConfig.types.telemetryComponent.push({ type: TelemetryComponentType.Service });\n\t}\n}\n\n/**\n * Configures the metrics producers and orchestrator service.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureMetricsCollector(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isTelemetryRequired(envVars)) {\n\t\tconst intervalSec = Coerce.integer(envVars.telemetryMetricsCollectorIntervalSeconds) ?? 60;\n\n\t\tcoreConfig.types.metricsCollectorComponent ??= [];\n\t\tcoreConfig.types.metricsCollectorComponent.push({\n\t\t\ttype: MetricsCollectorComponentType.Service,\n\t\t\toptions: { config: { intervalMs: intervalSec * 1000 } }\n\t\t});\n\n\t\tconst maxHistory = Coerce.integer(envVars.telemetryMetricsProducerMaxHistory) ?? 1440;\n\t\tcoreConfig.types.metricsProducerComponent ??= [];\n\n\t\tconst metricsProducers = commaSeparatedListToArray(\n\t\t\tenvVars.telemetryMetricsProducers ??\n\t\t\t\t[MetricsProducerComponentType.System, MetricsProducerComponentType.Process].join(\",\")\n\t\t);\n\n\t\tfor (const producerType of metricsProducers) {\n\t\t\tcoreConfig.types.metricsProducerComponent.push({\n\t\t\t\ttype: producerType as MetricsProducerComponentType,\n\t\t\t\toptions: { maxHistory }\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Configures the automation.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureAutomation(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.automationComponent ??= [];\n\n\tif (isAutomationRequired(envVars)) {\n\t\tcoreConfig.types.automationComponent.push({\n\t\t\ttype: AutomationComponentType.Service\n\t\t});\n\n\t\tconst automationActionTypes = commaSeparatedListToArray(envVars.automationActionTypes);\n\n\t\tif (Is.arrayValue(automationActionTypes)) {\n\t\t\tcoreConfig.types.automationAction ??= [];\n\n\t\t\tfor (const actionType of automationActionTypes) {\n\t\t\t\tcoreConfig.types.automationAction.push({\n\t\t\t\t\ttype: actionType as AutomationActionType,\n\t\t\t\t\tisMultiInstance: true\n\t\t\t\t} as unknown as AutomationActionConfig);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Configures the health.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureHealth(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.healthComponent ??= [];\n\n\tif (Coerce.boolean(envVars.healthEnabled) ?? false) {\n\t\tcoreConfig.types.healthComponent.push({\n\t\t\ttype: HealthComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thealthCheckInterval: (Coerce.integer(envVars.healthIntervalSeconds) ?? 60) * 1000\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the url transformer.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureUrlTransformer(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.urlTransformerComponent ??= [];\n\n\tif (isUrlTransformerRequired(envVars) ?? false) {\n\t\tcoreConfig.types.urlTransformerComponent.push({\n\t\t\ttype: UrlTransformerComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tparamEncryptionKeyName: envVars.urlTransformerEncryptionKeyId,\n\t\t\t\t\tqueryParamNames: {\n\t\t\t\t\t\ttenant: \"tenant-token\"\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 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 notarization.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureNotarization(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.notarizationConnector ??= [];\n\n\tif (envVars.notarizationConnector === NotarizationConnectorType.EntityStorage) {\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.notarizationConnector === NotarizationConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: dltConfig?.options?.config ?? ({} as IIotaConfig)\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.notarizationConnector.length > 0) {\n\t\tcoreConfig.types.notarizationComponent ??= [];\n\t\tcoreConfig.types.notarizationComponent.push({ type: NotarizationComponentType.Service });\n\t}\n}\n\n/**\n * Configures the 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\t}\n}\n\n/**\n * Configures the immutable proof.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureImmutableProof(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isImmutableProofRequired(envVars)) {\n\t\tcoreConfig.types.immutableProofComponent ??= [];\n\t\tcoreConfig.types.immutableProofComponent.push({\n\t\t\ttype: ImmutableProofComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverificationMethodId: envVars.immutableProofVerificationMethodId\n\t\t\t\t}\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 (isTrustRequired(envVars)) {\n\t\tcoreConfig.types.trustComponent ??= [];\n\t\tcoreConfig.types.trustComponent.push({\n\t\t\ttype: TrustComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.trustGeneratorComponent ??= [];\n\t\tconst trustGeneratorTypes = commaSeparatedListToArray(envVars.trustGenerators);\n\t\tfor (const trustGeneratorType of trustGeneratorTypes) {\n\t\t\tcoreConfig.types.trustGeneratorComponent.push({\n\t\t\t\ttype: trustGeneratorType as TrustGeneratorComponentType,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tverificationMethodId: envVars.trustVerificationMethodId ?? \"\",\n\t\t\t\t\t\ttokenTtlInSeconds: 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 (isRightsManagementRequired(envVars)) {\n\t\tcoreConfig.types.rightsManagementPapComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPapComponent.push({\n\t\t\ttype: RightsManagementPapComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPmpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPmpComponent.push({\n\t\t\ttype: RightsManagementPmpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPipComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPipComponent.push({\n\t\t\ttype: RightsManagementPipComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPxpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPxpComponent.push({\n\t\t\ttype: RightsManagementPxpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPdpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPdpComponent.push({\n\t\t\ttype: RightsManagementPdpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPepComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPepComponent.push({\n\t\t\ttype: RightsManagementPepComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPnpComponent ??= [];\n\n\t\t// Single source of truth for the rights-management mount path.\n\t\tconst rightsManagementPath = envVars.rightsManagementCallbackPath ?? \"rights-management\";\n\n\t\t// We add a multi instance REST client for the remote negotiations\n\t\t// use a dummy endpoint for now as the actual endpoint will be provided in the config\n\t\t// of the policy negotiator when it is used for remote negotiations\n\t\t// We must add it before the service as the service needs to be able to request\n\t\t// the REST client type from the engine core to be able to support remote negotiations\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.RestClient,\n\t\t\toptions: {\n\t\t\t\tendpoint: \"http://localhost\",\n\t\t\t\tpathPrefix: rightsManagementPath\n\t\t\t},\n\t\t\tisMultiInstance: true,\n\t\t\tfeatures: [\"remote\"]\n\t\t});\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tcallbackPath: rightsManagementPath,\n\t\t\t\t\tincludeErrorDetails: coreConfig.debug ?? false\n\t\t\t\t}\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 (isTaskSchedulerRequired(envVars)) {\n\t\tcoreConfig.types.taskSchedulerComponent ??= [];\n\t\tcoreConfig.types.taskSchedulerComponent.push({\n\t\t\ttype: TaskSchedulerComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the 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 (isFederatedCatalogueRequired(envVars)) {\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\n/**\n * Checks if the trust subsystem is required.\n * Returns true when any component that depends on the trust subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if rights-management, synchronised-storage, or dataspace is enabled.\n */\nexport function isTrustRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tisRightsManagementRequired(envVars) ||\n\t\t(Coerce.boolean(envVars.dataspaceEnabled) ?? false) ||\n\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false)\n\t);\n}\n\n/**\n * Checks if the URL transformer subsystem is required.\n * Returns true when any component that depends on the URL transformer subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if rights-management, dataspace, federated-catalogue, or tenant is enabled.\n */\nexport function isUrlTransformerRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tisRightsManagementRequired(envVars) ||\n\t\t(Coerce.boolean(envVars.dataspaceEnabled) ?? false) ||\n\t\t(Coerce.boolean(envVars.tenantEnabled) ?? false) ||\n\t\tisFederatedCatalogueRequired(envVars)\n\t);\n}\n\n/**\n * Checks if the background tasks subsystem is required.\n * Returns true when any component that depends on the background tasks subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if dataspace or verifiable storage is enabled.\n */\nexport function isBackgroundTasksRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (Coerce.boolean(envVars.dataspaceEnabled) ?? false) || isImmutableProofRequired(envVars);\n}\n\n/**\n * Checks if the immutable proof subsystem is required.\n * Returns true when any component that depends on the immutable proof subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if verifiable storage is enabled.\n */\nexport function isImmutableProofRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvVars.verifiableStorageConnector === VerifiableStorageConnectorType.EntityStorage ||\n\t\tenvVars.verifiableStorageConnector === VerifiableStorageConnectorType.Iota\n\t);\n}\n\n/**\n * Checks if the immutable proof subsystem is required.\n * Returns true when any component that depends on the immutable proof subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if verifiable storage is enabled.\n */\nexport function isFederatedCatalogueRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn Coerce.boolean(envVars.dataspaceEnabled) ?? false;\n}\n\n/**\n * Checks if the rights management subsystem is required.\n * Returns true when any component that depends on the rights management subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if rights management is enabled.\n */\nexport function isRightsManagementRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn Coerce.boolean(envVars.dataspaceEnabled) ?? false;\n}\n\n/**\n * Checks if the task scheduler subsystem is required.\n * Returns true when any component that depends on the task scheduler subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if task scheduler is enabled.\n */\nexport function isTaskSchedulerRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\t(Coerce.boolean(envVars.dataspaceEnabled) ?? false) ||\n\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false) ||\n\t\tisRightsManagementRequired(envVars) ||\n\t\tisAuthEntityStorageRequired(envVars)\n\t);\n}\n\n/**\n * Checks if the automation subsystem is required.\n * Returns true when any component that depends on the automation subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if automation is enabled.\n */\nexport function isAutomationRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn isRightsManagementRequired(envVars);\n}\n\n/**\n * Checks if the telemetry subsystem is required.\n * Returns true when any component that depends on the telemetry subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if telemetry is enabled.\n */\nexport function isTelemetryRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvVars.telemetryConnector === TelemetryConnectorType.EntityStorage ||\n\t\tenvVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry\n\t);\n}\n"]}
1
+ {"version":3,"file":"engineEnvBuilder.js","sourceRoot":"","sources":["../../../src/builders/engineEnvBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport path from \"node:path\";\nimport { Coerce, Is } from \"@twin.org/core\";\nimport type { IIotaConfig } from \"@twin.org/dlt-iota\";\nimport {\n\tAttestationComponentType,\n\tAttestationConnectorType,\n\tAuditableItemGraphComponentType,\n\tAuditableItemStreamComponentType,\n\ttype AutomationActionConfig,\n\ttype AutomationActionType,\n\tAutomationComponentType,\n\tBackgroundTaskComponentType,\n\tBlobStorageComponentType,\n\tBlobStorageConnectorType,\n\tContextIdHandlerComponentType,\n\ttype DataConverterConnectorType,\n\ttype DataExtractorConnectorType,\n\tDataProcessingComponentType,\n\tDataspaceControlPlaneComponentType,\n\tDataspaceDataPlaneComponentType,\n\ttype DltConfig,\n\tDltConfigType,\n\tDocumentManagementComponentType,\n\tEngineTypeHelper,\n\tEntityStorageConnectorType,\n\tEventBusComponentType,\n\tEventBusConnectorType,\n\tFaucetConnectorType,\n\tFederatedCatalogueComponentType,\n\ttype FederatedCatalogueFilterComponentType,\n\tHealthComponentType,\n\tIdentityComponentType,\n\tIdentityConnectorType,\n\tIdentityProfileComponentType,\n\tIdentityProfileConnectorType,\n\tIdentityResolverComponentType,\n\tIdentityResolverConnectorType,\n\ttype IEngineConfig,\n\tImmutableProofComponentType,\n\tLoggingComponentType,\n\tLoggingConnectorType,\n\tMessagingAdminComponentType,\n\tMessagingComponentType,\n\tMessagingEmailConnectorType,\n\tMessagingPushNotificationConnectorType,\n\tMessagingSmsConnectorType,\n\tMetricsCollectorComponentType,\n\tMetricsProducerComponentType,\n\tNftComponentType,\n\tNftConnectorType,\n\tNotarizationComponentType,\n\tNotarizationConnectorType,\n\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\tUrlTransformerComponentType,\n\tVaultConnectorType,\n\tVerifiableStorageComponentType,\n\tVerifiableStorageConnectorType,\n\tWalletConnectorType\n} from \"@twin.org/engine-types\";\nimport {\n\ttype IOpenTelemetryTelemetryConnectorConfig,\n\tOpenTelemetryReaderTypes\n} from \"@twin.org/telemetry-connector-opentelemetry\";\nimport { CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from \"../defaults.js\";\nimport { isAuthEntityStorageRequired } from \"./engineServerEnvBuilder.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 configureMetricsCollector(coreConfig, envVars);\n\tawait configureMessaging(coreConfig, envVars);\n\tawait configureAutomation(coreConfig, envVars);\n\tawait configureHealth(coreConfig, envVars);\n\tawait configureUrlTransformer(coreConfig, envVars);\n\n\tawait configureFaucet(coreConfig, envVars);\n\tawait configureWallet(coreConfig, envVars);\n\tawait configureNft(coreConfig, envVars);\n\tawait configureNotarization(coreConfig, envVars);\n\tawait configureVerifiableStorage(coreConfig, envVars);\n\tawait configureImmutableProof(coreConfig, envVars);\n\tawait configureIdentity(coreConfig, envVars);\n\tawait configureIdentityResolver(coreConfig, envVars);\n\tawait configureIdentityProfile(coreConfig, envVars);\n\tawait configureAttestation(coreConfig, envVars);\n\tawait configureDataProcessing(coreConfig, envVars);\n\n\tawait configureAuditableItemGraph(coreConfig, envVars);\n\tawait configureAuditableItemStream(coreConfig, envVars);\n\tawait configureDocumentManagement(coreConfig, envVars);\n\tawait configureTrust(coreConfig, envVars);\n\tawait configureRightsManagement(coreConfig, envVars);\n\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 (isBackgroundTasksRequired(envVars)) {\n\t\tcoreConfig.types.backgroundTaskComponent.push({\n\t\t\ttype: BackgroundTaskComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the event 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} else if (envVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry) {\n\t\tlet readers: IOpenTelemetryTelemetryConnectorConfig[\"readers\"];\n\t\tif (envVars.openTelemetryReader === \"prometheus\") {\n\t\t\treaders = {\n\t\t\t\tprometheus: {\n\t\t\t\t\ttype: OpenTelemetryReaderTypes.Prometheus,\n\t\t\t\t\tport: Coerce.integer(envVars.openTelemetryPrometheusPort)\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tcoreConfig.types.telemetryConnector.push({\n\t\t\ttype: TelemetryConnectorType.OpenTelemetry,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tmeterName: envVars.openTelemetryMeterName,\n\t\t\t\t\tmeterVersion: envVars.openTelemetryMeterVersion,\n\t\t\t\t\treaders\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.telemetryConnector.length > 0) {\n\t\tcoreConfig.types.telemetryComponent ??= [];\n\t\tcoreConfig.types.telemetryComponent.push({ type: TelemetryComponentType.Service });\n\t}\n}\n\n/**\n * Configures the metrics producers and orchestrator service.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureMetricsCollector(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isTelemetryRequired(envVars)) {\n\t\tconst intervalSec = Coerce.integer(envVars.telemetryMetricsCollectorIntervalSeconds) ?? 60;\n\n\t\tcoreConfig.types.metricsCollectorComponent ??= [];\n\t\tcoreConfig.types.metricsCollectorComponent.push({\n\t\t\ttype: MetricsCollectorComponentType.Service,\n\t\t\toptions: { config: { intervalMs: intervalSec * 1000 } }\n\t\t});\n\n\t\tconst maxHistory = Coerce.integer(envVars.telemetryMetricsProducerMaxHistory) ?? 1440;\n\t\tcoreConfig.types.metricsProducerComponent ??= [];\n\n\t\tconst metricsProducers = commaSeparatedListToArray(\n\t\t\tenvVars.telemetryMetricsProducers ??\n\t\t\t\t[MetricsProducerComponentType.System, MetricsProducerComponentType.Process].join(\",\")\n\t\t);\n\n\t\tfor (const producerType of metricsProducers) {\n\t\t\tcoreConfig.types.metricsProducerComponent.push({\n\t\t\t\ttype: producerType as MetricsProducerComponentType,\n\t\t\t\toptions: { maxHistory }\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Configures the automation.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureAutomation(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.automationComponent ??= [];\n\n\tif (isAutomationRequired(envVars)) {\n\t\tcoreConfig.types.automationComponent.push({\n\t\t\ttype: AutomationComponentType.Service\n\t\t});\n\n\t\tconst automationActionTypes = commaSeparatedListToArray(envVars.automationActionTypes);\n\n\t\tif (Is.arrayValue(automationActionTypes)) {\n\t\t\tcoreConfig.types.automationAction ??= [];\n\n\t\t\tfor (const actionType of automationActionTypes) {\n\t\t\t\tcoreConfig.types.automationAction.push({\n\t\t\t\t\ttype: actionType as AutomationActionType,\n\t\t\t\t\tisMultiInstance: true\n\t\t\t\t} as unknown as AutomationActionConfig);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Configures the health.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureHealth(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.healthComponent ??= [];\n\n\tif (Coerce.boolean(envVars.healthEnabled) ?? false) {\n\t\tcoreConfig.types.healthComponent.push({\n\t\t\ttype: HealthComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\thealthCheckInterval: (Coerce.integer(envVars.healthIntervalSeconds) ?? 60) * 1000,\n\t\t\t\t\tinitialInterval: (Coerce.integer(envVars.healthStartupIntervalSeconds) ?? 2) * 1000\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Configures the url transformer.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureUrlTransformer(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.urlTransformerComponent ??= [];\n\n\tif (isUrlTransformerRequired(envVars) ?? false) {\n\t\tcoreConfig.types.urlTransformerComponent.push({\n\t\t\ttype: UrlTransformerComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tparamEncryptionKeyName: envVars.urlTransformerEncryptionKeyId,\n\t\t\t\t\tqueryParamNames: {\n\t\t\t\t\t\ttenant: \"tenant-token\"\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 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 notarization.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureNotarization(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tcoreConfig.types.notarizationConnector ??= [];\n\n\tif (envVars.notarizationConnector === NotarizationConnectorType.EntityStorage) {\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.EntityStorage\n\t\t});\n\t} else if (envVars.notarizationConnector === NotarizationConnectorType.Iota) {\n\t\tconst dltConfig = EngineTypeHelper.getConfigOfType<DltConfig>(\n\t\t\tcoreConfig,\n\t\t\t\"dltConfig\",\n\t\t\tDltConfigType.Iota\n\t\t);\n\t\tcoreConfig.types.notarizationConnector.push({\n\t\t\ttype: NotarizationConnectorType.Iota,\n\t\t\toptions: {\n\t\t\t\tconfig: dltConfig?.options?.config ?? ({} as IIotaConfig)\n\t\t\t}\n\t\t});\n\t}\n\n\tif (coreConfig.types.notarizationConnector.length > 0) {\n\t\tcoreConfig.types.notarizationComponent ??= [];\n\t\tcoreConfig.types.notarizationComponent.push({ type: NotarizationComponentType.Service });\n\t}\n}\n\n/**\n * Configures the 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\t}\n}\n\n/**\n * Configures the immutable proof.\n * @param coreConfig The core config.\n * @param envVars The environment variables.\n */\nasync function configureImmutableProof(\n\tcoreConfig: IEngineConfig,\n\tenvVars: IEngineEnvironmentVariables\n): Promise<void> {\n\tif (isImmutableProofRequired(envVars)) {\n\t\tcoreConfig.types.immutableProofComponent ??= [];\n\t\tcoreConfig.types.immutableProofComponent.push({\n\t\t\ttype: ImmutableProofComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tverificationMethodId: envVars.immutableProofVerificationMethodId\n\t\t\t\t}\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 (isTrustRequired(envVars)) {\n\t\tcoreConfig.types.trustComponent ??= [];\n\t\tcoreConfig.types.trustComponent.push({\n\t\t\ttype: TrustComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.trustGeneratorComponent ??= [];\n\t\tconst trustGeneratorTypes = commaSeparatedListToArray(envVars.trustGenerators);\n\t\tfor (const trustGeneratorType of trustGeneratorTypes) {\n\t\t\tcoreConfig.types.trustGeneratorComponent.push({\n\t\t\t\ttype: trustGeneratorType as TrustGeneratorComponentType,\n\t\t\t\toptions: {\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tverificationMethodId: envVars.trustVerificationMethodId ?? \"\",\n\t\t\t\t\t\ttokenTtlInSeconds: 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 (isRightsManagementRequired(envVars)) {\n\t\tcoreConfig.types.rightsManagementPapComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPapComponent.push({\n\t\t\ttype: RightsManagementPapComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPmpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPmpComponent.push({\n\t\t\ttype: RightsManagementPmpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPipComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPipComponent.push({\n\t\t\ttype: RightsManagementPipComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPxpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPxpComponent.push({\n\t\t\ttype: RightsManagementPxpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPdpComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPdpComponent.push({\n\t\t\ttype: RightsManagementPdpComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPepComponent ??= [];\n\t\tcoreConfig.types.rightsManagementPepComponent.push({\n\t\t\ttype: RightsManagementPepComponentType.Service\n\t\t});\n\n\t\tcoreConfig.types.rightsManagementPnpComponent ??= [];\n\n\t\t// Single source of truth for the rights-management mount path.\n\t\tconst rightsManagementPath = envVars.rightsManagementCallbackPath ?? \"rights-management\";\n\n\t\t// We add a multi instance REST client for the remote negotiations\n\t\t// use a dummy endpoint for now as the actual endpoint will be provided in the config\n\t\t// of the policy negotiator when it is used for remote negotiations\n\t\t// We must add it before the service as the service needs to be able to request\n\t\t// the REST client type from the engine core to be able to support remote negotiations\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.RestClient,\n\t\t\toptions: {\n\t\t\t\tendpoint: \"http://localhost\",\n\t\t\t\tpathPrefix: rightsManagementPath\n\t\t\t},\n\t\t\tisMultiInstance: true,\n\t\t\tfeatures: [\"remote\"]\n\t\t});\n\t\tcoreConfig.types.rightsManagementPnpComponent.push({\n\t\t\ttype: RightsManagementPnpComponentType.Service,\n\t\t\toptions: {\n\t\t\t\tconfig: {\n\t\t\t\t\tcallbackPath: rightsManagementPath,\n\t\t\t\t\tincludeErrorDetails: coreConfig.debug ?? false\n\t\t\t\t}\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 (isTaskSchedulerRequired(envVars)) {\n\t\tcoreConfig.types.taskSchedulerComponent ??= [];\n\t\tcoreConfig.types.taskSchedulerComponent.push({\n\t\t\ttype: TaskSchedulerComponentType.Service\n\t\t});\n\t}\n}\n\n/**\n * Configures the 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 (isFederatedCatalogueRequired(envVars)) {\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\n/**\n * Checks if the trust subsystem is required.\n * Returns true when any component that depends on the trust subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if rights-management, synchronised-storage, or dataspace is enabled.\n */\nexport function isTrustRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tisRightsManagementRequired(envVars) ||\n\t\t(Coerce.boolean(envVars.dataspaceEnabled) ?? false) ||\n\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false)\n\t);\n}\n\n/**\n * Checks if the URL transformer subsystem is required.\n * Returns true when any component that depends on the URL transformer subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if rights-management, dataspace, federated-catalogue, or tenant is enabled.\n */\nexport function isUrlTransformerRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tisRightsManagementRequired(envVars) ||\n\t\t(Coerce.boolean(envVars.dataspaceEnabled) ?? false) ||\n\t\t(Coerce.boolean(envVars.tenantEnabled) ?? false) ||\n\t\tisFederatedCatalogueRequired(envVars)\n\t);\n}\n\n/**\n * Checks if the background tasks subsystem is required.\n * Returns true when any component that depends on the background tasks subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if dataspace or verifiable storage is enabled.\n */\nexport function isBackgroundTasksRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (Coerce.boolean(envVars.dataspaceEnabled) ?? false) || isImmutableProofRequired(envVars);\n}\n\n/**\n * Checks if the immutable proof subsystem is required.\n * Returns true when any component that depends on the immutable proof subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if verifiable storage is enabled.\n */\nexport function isImmutableProofRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvVars.verifiableStorageConnector === VerifiableStorageConnectorType.EntityStorage ||\n\t\tenvVars.verifiableStorageConnector === VerifiableStorageConnectorType.Iota\n\t);\n}\n\n/**\n * Checks if the immutable proof subsystem is required.\n * Returns true when any component that depends on the immutable proof subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if verifiable storage is enabled.\n */\nexport function isFederatedCatalogueRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn Coerce.boolean(envVars.dataspaceEnabled) ?? false;\n}\n\n/**\n * Checks if the rights management subsystem is required.\n * Returns true when any component that depends on the rights management subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if rights management is enabled.\n */\nexport function isRightsManagementRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn Coerce.boolean(envVars.dataspaceEnabled) ?? false;\n}\n\n/**\n * Checks if the task scheduler subsystem is required.\n * Returns true when any component that depends on the task scheduler subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if task scheduler is enabled.\n */\nexport function isTaskSchedulerRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\t(Coerce.boolean(envVars.dataspaceEnabled) ?? false) ||\n\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false) ||\n\t\tisRightsManagementRequired(envVars) ||\n\t\tisAuthEntityStorageRequired(envVars)\n\t);\n}\n\n/**\n * Checks if the automation subsystem is required.\n * Returns true when any component that depends on the automation subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if automation is enabled.\n */\nexport function isAutomationRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn isRightsManagementRequired(envVars);\n}\n\n/**\n * Checks if the telemetry subsystem is required.\n * Returns true when any component that depends on the telemetry subsystem is enabled.\n * @param envVars The environment variables.\n * @returns True if telemetry is enabled.\n */\nexport function isTelemetryRequired(envVars: IEngineEnvironmentVariables): boolean {\n\treturn (\n\t\tenvVars.telemetryConnector === TelemetryConnectorType.EntityStorage ||\n\t\tenvVars.telemetryConnector === TelemetryConnectorType.OpenTelemetry\n\t);\n}\n"]}
@@ -188,7 +188,7 @@ export async function bootstrapLegacy(engineCore, envVars, params) {
188
188
  tenantId,
189
189
  email: envVars.adminUserName ?? "admin@node",
190
190
  password: envVars.adminUserPassword,
191
- scope: "tenant-admin",
191
+ scope: ["tenant-admin", "user-admin"].join(","),
192
192
  givenName: "Node",
193
193
  familyName: "Admin",
194
194
  overwriteMode: "skip"
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrapLegacy.js","sourceRoot":"","sources":["../../../src/commands/bootstrapLegacy.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { CLIDisplay } from \"@twin.org/cli-core\";\nimport { ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport { Coerce, Converter, GeneralError, I18n, Is } from \"@twin.org/core\";\nimport type { IEngineCore } from \"@twin.org/engine-models\";\nimport { identityCreate } from \"./identityCreate.js\";\nimport { identityVerificationMethodCreate } from \"./identityVerificationMethodCreate.js\";\nimport { nodeSetIdentity } from \"./nodeSetIdentity.js\";\nimport { nodeSetTenant } from \"./nodeSetTenant.js\";\nimport { tenantCreate } from \"./tenantCreate.js\";\nimport { userCreate } from \"./userCreate.js\";\nimport { vaultKeyCreate } from \"./vaultKeyCreate.js\";\nimport { vaultKeyImport } from \"./vaultKeyImport.js\";\nimport { isTrustRequired, isUrlTransformerRequired } from \"../builders/engineEnvBuilder.js\";\nimport type { ICliCommandDefinition } from \"../models/ICliCommandDefinition.js\";\nimport type { INodeEngineConfig } from \"../models/INodeEngineConfig.js\";\nimport type { INodeEngineState } from \"../models/INodeEngineState.js\";\nimport type { INodeEnvironmentVariables } from \"../models/INodeEnvironmentVariables.js\";\n\nconst COMMAND_NAME = \"bootstrap-legacy\";\n\n/**\n * Get the command definition parameters.\n * @param commandDefinitions The registered command definitions.\n */\nexport function getCommandDefinitionBootstrapLegacy(commandDefinitions: {\n\t[id: string]: ICliCommandDefinition;\n}): void {\n\tcommandDefinitions[COMMAND_NAME] = {\n\t\tcommand: COMMAND_NAME,\n\t\tdescription: I18n.formatMessage(\"node.cli.commands.bootstrap-legacy.description\"),\n\t\texample: I18n.formatMessage(\"node.cli.commands.bootstrap-legacy.example\"),\n\t\trequiresNodeIdentity: false,\n\t\trequiresTenantId: false,\n\t\tparams: [\n\t\t\t{\n\t\t\t\tkey: \"env-prefix\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.bootstrap-legacy.params.env-prefix.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"load-env\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.bootstrap-legacy.params.load-env.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t}\n\t\t],\n\t\taction: async (engineCore, envVars, params) => bootstrapLegacy(engineCore, envVars, params)\n\t};\n}\n\n/**\n * Command for legacy bootstrap.\n * @param engineCore The engine core.\n * @param envVars The environment variables for the node.\n * @param params The parameters for the command.\n */\nexport async function bootstrapLegacy(\n\tengineCore: IEngineCore<INodeEngineConfig, INodeEngineState>,\n\tenvVars: INodeEnvironmentVariables & {\n\t\t/**\n\t\t * The features that are enabled on the node.\n\t\t * @default []\n\t\t */\n\t\tfeatures?: string;\n\n\t\t/**\n\t\t * The identity of the node which, if empty and node-identity feature is enabled it will be generated.\n\t\t */\n\t\tnodeIdentity?: string;\n\n\t\t/**\n\t\t * The mnemonic for the identity, if empty and node-identity feature is enabled it will be randomly generated.\n\t\t */\n\t\tnodeMnemonic?: string;\n\n\t\t/**\n\t\t * A tenant id to use as a default for the node.\n\t\t */\n\t\ttenantId?: string;\n\n\t\t/**\n\t\t * A tenant api key to use as a default for the node.\n\t\t */\n\t\ttenantApiKey?: string;\n\n\t\t/**\n\t\t * If the node-admin-user feature is enabled, this will be the organization of the user, if one is not provided it will be generated\n\t\t */\n\t\torganizationIdentity?: string;\n\n\t\t/**\n\t\t * The mnemonic for the organization, if empty and node-admin-user feature is enabled it will be randomly generated.\n\t\t */\n\t\torganizationMnemonic?: string;\n\n\t\t/**\n\t\t * If the node-admin-user feature is enabled, this will be the identity of the user, if one is not provided it will be generated\n\t\t */\n\t\tadminUserIdentity?: string;\n\n\t\t/**\n\t\t * The mnemonic for the admin user, if empty and node-admin-user feature is enabled it will be randomly generated.\n\t\t */\n\t\tadminUserMnemonic?: string;\n\n\t\t/**\n\t\t * If the node-admin-user feature is enabled, this will be the name of the user.\n\t\t * @default admin@node\n\t\t */\n\t\tadminUserName?: string;\n\n\t\t/**\n\t\t * If the node-admin-user feature is enabled, this will be the password of the user, if empty it will be randomly generated.\n\t\t */\n\t\tadminUserPassword?: string;\n\t},\n\tparams: {}\n): Promise<void> {\n\tconst features = (envVars.features ?? \"\")\n\t\t.split(\",\")\n\t\t.map(f => f.trim())\n\t\t.filter(f => f.length > 0);\n\n\tconst state = engineCore.getState();\n\tconst requireWallet = features.includes(\"node-wallet\");\n\tlet tenantId = state.nodeTenantId;\n\tlet nodeId = state.nodeId;\n\n\tif (features.length === 0) {\n\t\tthrow new GeneralError(\"bootstrapLegacy\", \"noFeaturesEnabled\");\n\t}\n\n\tif (features.includes(\"node-identity\") && Is.empty(nodeId)) {\n\t\tCLIDisplay.break();\n\t\tCLIDisplay.section(\n\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeIdentityCreate\")\n\t\t);\n\n\t\tconst nodeIdentity = await identityCreate(engineCore, envVars, {\n\t\t\tidentity: envVars.nodeIdentity,\n\t\t\tmnemonic: envVars.nodeMnemonic,\n\t\t\tfundWallet: requireWallet\n\t\t});\n\n\t\tnodeId = nodeIdentity.did;\n\n\t\tCLIDisplay.break();\n\t\tCLIDisplay.section(\n\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeAuthKeyCreate\")\n\t\t);\n\t\tawait vaultKeyCreate(engineCore, envVars, {\n\t\t\tidentity: nodeIdentity.did,\n\t\t\tkeyType: \"Ed25519\",\n\t\t\tkeyId: envVars.authSigningKeyId,\n\t\t\toverwriteMode: \"skip\"\n\t\t});\n\n\t\tif (isTrustRequired(envVars)) {\n\t\t\tCLIDisplay.break();\n\t\t\tCLIDisplay.section(\n\t\t\t\tI18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.bootstrap-legacy.labels.trustVerificationMethodCreate\"\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tawait identityVerificationMethodCreate(engineCore, envVars, {\n\t\t\t\tidentity: nodeIdentity.did,\n\t\t\t\tverificationMethodType: \"assertionMethod\",\n\t\t\t\tverificationMethodId: envVars.trustVerificationMethodId,\n\t\t\t\toverwriteMode: \"skip\"\n\t\t\t});\n\t\t}\n\n\t\tif (\n\t\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false) &&\n\t\t\tIs.stringBase64(envVars.synchronisedStorageBlobStorageKey)\n\t\t) {\n\t\t\tCLIDisplay.break();\n\t\t\tCLIDisplay.section(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.synchronisedStorageKeyAdd\")\n\t\t\t);\n\t\t\tawait vaultKeyImport(engineCore, envVars, {\n\t\t\t\tidentity: nodeIdentity.did,\n\t\t\t\tkeyType: \"ChaCha20Poly1305\",\n\t\t\t\tkeyId: envVars.synchronisedStorageBlobStorageEncryptionKeyId,\n\t\t\t\tprivateKeyHex: Converter.bytesToHex(\n\t\t\t\t\tConverter.base64ToBytes(envVars.synchronisedStorageBlobStorageKey)\n\t\t\t\t)\n\t\t\t});\n\t\t}\n\n\t\tif (isUrlTransformerRequired(envVars)) {\n\t\t\tCLIDisplay.break();\n\t\t\tCLIDisplay.section(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.urlTransformParamKeyAdd\")\n\t\t\t);\n\t\t\tawait vaultKeyCreate(engineCore, envVars, {\n\t\t\t\tidentity: nodeIdentity.did,\n\t\t\t\tkeyType: \"ChaCha20Poly1305\",\n\t\t\t\tkeyId: envVars.urlTransformerEncryptionKeyId\n\t\t\t});\n\t\t}\n\n\t\tCLIDisplay.break();\n\t\tCLIDisplay.section(\n\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeIdentitySet\")\n\t\t);\n\t\tawait nodeSetIdentity(engineCore, envVars, {\n\t\t\tidentity: nodeId\n\t\t});\n\n\t\tconst tenantEnabled = Coerce.boolean(envVars.tenantEnabled) ?? false;\n\t\tif (tenantEnabled) {\n\t\t\tif (Is.empty(tenantId)) {\n\t\t\t\tawait ContextIdStore.run({ [ContextIdKeys.Node]: nodeId }, async () => {\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeTenantCreate\")\n\t\t\t\t\t);\n\t\t\t\t\tconst tenantDetails = await tenantCreate(engineCore, envVars, {\n\t\t\t\t\t\ttenantId: envVars.tenantId,\n\t\t\t\t\t\tapiKey: envVars.tenantApiKey,\n\t\t\t\t\t\tlabel: \"Node\"\n\t\t\t\t\t});\n\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeTenantSet\")\n\t\t\t\t\t);\n\t\t\t\t\tawait nodeSetTenant(engineCore, envVars, {\n\t\t\t\t\t\ttenantId: tenantDetails.tenantId\n\t\t\t\t\t});\n\n\t\t\t\t\ttenantId = tenantDetails.tenantId;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tif (features.includes(\"node-admin-user\")) {\n\t\tawait ContextIdStore.run(\n\t\t\t{ [ContextIdKeys.Node]: nodeId, [ContextIdKeys.Tenant]: tenantId },\n\t\t\tasync () => {\n\t\t\t\tCLIDisplay.break();\n\t\t\t\tCLIDisplay.section(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.organisationCreate\")\n\t\t\t\t);\n\t\t\t\tconst organisation = await identityCreate(engineCore, envVars, {\n\t\t\t\t\tidentity: envVars.organizationIdentity,\n\t\t\t\t\tmnemonic: envVars.organizationMnemonic,\n\t\t\t\t\tfundWallet: requireWallet\n\t\t\t\t});\n\n\t\t\t\tif (Coerce.boolean(envVars.blobStorageEnableEncryption) ?? false) {\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.blobStorageKeyCreate\")\n\t\t\t\t\t);\n\t\t\t\t\tawait vaultKeyCreate(engineCore, envVars, {\n\t\t\t\t\t\tidentity: organisation.did,\n\t\t\t\t\t\tkeyType: \"ChaCha20Poly1305\",\n\t\t\t\t\t\tkeyId: envVars.blobStorageEncryptionKeyId,\n\t\t\t\t\t\toverwriteMode: \"skip\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst defaultAttestationConnectorType =\n\t\t\t\t\tengineCore.getRegisteredInstanceTypeOptional(\"attestationConnector\");\n\t\t\t\tif (!Is.empty(defaultAttestationConnectorType)) {\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.attestationMethodCreate\")\n\t\t\t\t\t);\n\t\t\t\t\tawait identityVerificationMethodCreate(engineCore, envVars, {\n\t\t\t\t\t\tidentity: organisation.did,\n\t\t\t\t\t\tverificationMethodType: \"assertionMethod\",\n\t\t\t\t\t\tverificationMethodId: envVars.attestationVerificationMethodId,\n\t\t\t\t\t\toverwriteMode: \"skip\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst defaultImmutableProofComponentType =\n\t\t\t\t\tengineCore.getRegisteredInstanceTypeOptional(\"immutableProofComponent\");\n\n\t\t\t\tif (!Is.empty(defaultImmutableProofComponentType)) {\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\n\t\t\t\t\t\t\t\"node.cli.commands.bootstrap-legacy.labels.immutableProofMethodCreate\"\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\tawait identityVerificationMethodCreate(engineCore, envVars, {\n\t\t\t\t\t\tidentity: organisation.did,\n\t\t\t\t\t\tverificationMethodType: \"assertionMethod\",\n\t\t\t\t\t\tverificationMethodId: envVars.immutableProofVerificationMethodId,\n\t\t\t\t\t\toverwriteMode: \"skip\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tCLIDisplay.break();\n\t\t\t\tCLIDisplay.section(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.adminIdentityCreate\")\n\t\t\t\t);\n\t\t\t\tconst adminUserIdentity = await identityCreate(engineCore, envVars, {\n\t\t\t\t\tidentity: envVars.adminUserIdentity,\n\t\t\t\t\tmnemonic: envVars.adminUserMnemonic,\n\t\t\t\t\tcontroller: organisation.did\n\t\t\t\t});\n\n\t\t\t\tCLIDisplay.break();\n\t\t\t\tCLIDisplay.section(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.adminUserCreate\")\n\t\t\t\t);\n\t\t\t\tawait userCreate(engineCore, envVars, {\n\t\t\t\t\tuserIdentity: adminUserIdentity.did,\n\t\t\t\t\torganizationIdentity: organisation.did,\n\t\t\t\t\ttenantId,\n\t\t\t\t\temail: envVars.adminUserName ?? \"admin@node\",\n\t\t\t\t\tpassword: envVars.adminUserPassword,\n\t\t\t\t\tscope: \"tenant-admin\",\n\t\t\t\t\tgivenName: \"Node\",\n\t\t\t\t\tfamilyName: \"Admin\",\n\t\t\t\t\toverwriteMode: \"skip\"\n\t\t\t\t});\n\t\t\t}\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"bootstrapLegacy.js","sourceRoot":"","sources":["../../../src/commands/bootstrapLegacy.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { CLIDisplay } from \"@twin.org/cli-core\";\nimport { ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport { Coerce, Converter, GeneralError, I18n, Is } from \"@twin.org/core\";\nimport type { IEngineCore } from \"@twin.org/engine-models\";\nimport { identityCreate } from \"./identityCreate.js\";\nimport { identityVerificationMethodCreate } from \"./identityVerificationMethodCreate.js\";\nimport { nodeSetIdentity } from \"./nodeSetIdentity.js\";\nimport { nodeSetTenant } from \"./nodeSetTenant.js\";\nimport { tenantCreate } from \"./tenantCreate.js\";\nimport { userCreate } from \"./userCreate.js\";\nimport { vaultKeyCreate } from \"./vaultKeyCreate.js\";\nimport { vaultKeyImport } from \"./vaultKeyImport.js\";\nimport { isTrustRequired, isUrlTransformerRequired } from \"../builders/engineEnvBuilder.js\";\nimport type { ICliCommandDefinition } from \"../models/ICliCommandDefinition.js\";\nimport type { INodeEngineConfig } from \"../models/INodeEngineConfig.js\";\nimport type { INodeEngineState } from \"../models/INodeEngineState.js\";\nimport type { INodeEnvironmentVariables } from \"../models/INodeEnvironmentVariables.js\";\n\nconst COMMAND_NAME = \"bootstrap-legacy\";\n\n/**\n * Get the command definition parameters.\n * @param commandDefinitions The registered command definitions.\n */\nexport function getCommandDefinitionBootstrapLegacy(commandDefinitions: {\n\t[id: string]: ICliCommandDefinition;\n}): void {\n\tcommandDefinitions[COMMAND_NAME] = {\n\t\tcommand: COMMAND_NAME,\n\t\tdescription: I18n.formatMessage(\"node.cli.commands.bootstrap-legacy.description\"),\n\t\texample: I18n.formatMessage(\"node.cli.commands.bootstrap-legacy.example\"),\n\t\trequiresNodeIdentity: false,\n\t\trequiresTenantId: false,\n\t\tparams: [\n\t\t\t{\n\t\t\t\tkey: \"env-prefix\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.bootstrap-legacy.params.env-prefix.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"load-env\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.bootstrap-legacy.params.load-env.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t}\n\t\t],\n\t\taction: async (engineCore, envVars, params) => bootstrapLegacy(engineCore, envVars, params)\n\t};\n}\n\n/**\n * Command for legacy bootstrap.\n * @param engineCore The engine core.\n * @param envVars The environment variables for the node.\n * @param params The parameters for the command.\n */\nexport async function bootstrapLegacy(\n\tengineCore: IEngineCore<INodeEngineConfig, INodeEngineState>,\n\tenvVars: INodeEnvironmentVariables & {\n\t\t/**\n\t\t * The features that are enabled on the node.\n\t\t * @default []\n\t\t */\n\t\tfeatures?: string;\n\n\t\t/**\n\t\t * The identity of the node which, if empty and node-identity feature is enabled it will be generated.\n\t\t */\n\t\tnodeIdentity?: string;\n\n\t\t/**\n\t\t * The mnemonic for the identity, if empty and node-identity feature is enabled it will be randomly generated.\n\t\t */\n\t\tnodeMnemonic?: string;\n\n\t\t/**\n\t\t * A tenant id to use as a default for the node.\n\t\t */\n\t\ttenantId?: string;\n\n\t\t/**\n\t\t * A tenant api key to use as a default for the node.\n\t\t */\n\t\ttenantApiKey?: string;\n\n\t\t/**\n\t\t * If the node-admin-user feature is enabled, this will be the organization of the user, if one is not provided it will be generated\n\t\t */\n\t\torganizationIdentity?: string;\n\n\t\t/**\n\t\t * The mnemonic for the organization, if empty and node-admin-user feature is enabled it will be randomly generated.\n\t\t */\n\t\torganizationMnemonic?: string;\n\n\t\t/**\n\t\t * If the node-admin-user feature is enabled, this will be the identity of the user, if one is not provided it will be generated\n\t\t */\n\t\tadminUserIdentity?: string;\n\n\t\t/**\n\t\t * The mnemonic for the admin user, if empty and node-admin-user feature is enabled it will be randomly generated.\n\t\t */\n\t\tadminUserMnemonic?: string;\n\n\t\t/**\n\t\t * If the node-admin-user feature is enabled, this will be the name of the user.\n\t\t * @default admin@node\n\t\t */\n\t\tadminUserName?: string;\n\n\t\t/**\n\t\t * If the node-admin-user feature is enabled, this will be the password of the user, if empty it will be randomly generated.\n\t\t */\n\t\tadminUserPassword?: string;\n\t},\n\tparams: {}\n): Promise<void> {\n\tconst features = (envVars.features ?? \"\")\n\t\t.split(\",\")\n\t\t.map(f => f.trim())\n\t\t.filter(f => f.length > 0);\n\n\tconst state = engineCore.getState();\n\tconst requireWallet = features.includes(\"node-wallet\");\n\tlet tenantId = state.nodeTenantId;\n\tlet nodeId = state.nodeId;\n\n\tif (features.length === 0) {\n\t\tthrow new GeneralError(\"bootstrapLegacy\", \"noFeaturesEnabled\");\n\t}\n\n\tif (features.includes(\"node-identity\") && Is.empty(nodeId)) {\n\t\tCLIDisplay.break();\n\t\tCLIDisplay.section(\n\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeIdentityCreate\")\n\t\t);\n\n\t\tconst nodeIdentity = await identityCreate(engineCore, envVars, {\n\t\t\tidentity: envVars.nodeIdentity,\n\t\t\tmnemonic: envVars.nodeMnemonic,\n\t\t\tfundWallet: requireWallet\n\t\t});\n\n\t\tnodeId = nodeIdentity.did;\n\n\t\tCLIDisplay.break();\n\t\tCLIDisplay.section(\n\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeAuthKeyCreate\")\n\t\t);\n\t\tawait vaultKeyCreate(engineCore, envVars, {\n\t\t\tidentity: nodeIdentity.did,\n\t\t\tkeyType: \"Ed25519\",\n\t\t\tkeyId: envVars.authSigningKeyId,\n\t\t\toverwriteMode: \"skip\"\n\t\t});\n\n\t\tif (isTrustRequired(envVars)) {\n\t\t\tCLIDisplay.break();\n\t\t\tCLIDisplay.section(\n\t\t\t\tI18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.bootstrap-legacy.labels.trustVerificationMethodCreate\"\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tawait identityVerificationMethodCreate(engineCore, envVars, {\n\t\t\t\tidentity: nodeIdentity.did,\n\t\t\t\tverificationMethodType: \"assertionMethod\",\n\t\t\t\tverificationMethodId: envVars.trustVerificationMethodId,\n\t\t\t\toverwriteMode: \"skip\"\n\t\t\t});\n\t\t}\n\n\t\tif (\n\t\t\t(Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false) &&\n\t\t\tIs.stringBase64(envVars.synchronisedStorageBlobStorageKey)\n\t\t) {\n\t\t\tCLIDisplay.break();\n\t\t\tCLIDisplay.section(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.synchronisedStorageKeyAdd\")\n\t\t\t);\n\t\t\tawait vaultKeyImport(engineCore, envVars, {\n\t\t\t\tidentity: nodeIdentity.did,\n\t\t\t\tkeyType: \"ChaCha20Poly1305\",\n\t\t\t\tkeyId: envVars.synchronisedStorageBlobStorageEncryptionKeyId,\n\t\t\t\tprivateKeyHex: Converter.bytesToHex(\n\t\t\t\t\tConverter.base64ToBytes(envVars.synchronisedStorageBlobStorageKey)\n\t\t\t\t)\n\t\t\t});\n\t\t}\n\n\t\tif (isUrlTransformerRequired(envVars)) {\n\t\t\tCLIDisplay.break();\n\t\t\tCLIDisplay.section(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.urlTransformParamKeyAdd\")\n\t\t\t);\n\t\t\tawait vaultKeyCreate(engineCore, envVars, {\n\t\t\t\tidentity: nodeIdentity.did,\n\t\t\t\tkeyType: \"ChaCha20Poly1305\",\n\t\t\t\tkeyId: envVars.urlTransformerEncryptionKeyId\n\t\t\t});\n\t\t}\n\n\t\tCLIDisplay.break();\n\t\tCLIDisplay.section(\n\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeIdentitySet\")\n\t\t);\n\t\tawait nodeSetIdentity(engineCore, envVars, {\n\t\t\tidentity: nodeId\n\t\t});\n\n\t\tconst tenantEnabled = Coerce.boolean(envVars.tenantEnabled) ?? false;\n\t\tif (tenantEnabled) {\n\t\t\tif (Is.empty(tenantId)) {\n\t\t\t\tawait ContextIdStore.run({ [ContextIdKeys.Node]: nodeId }, async () => {\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeTenantCreate\")\n\t\t\t\t\t);\n\t\t\t\t\tconst tenantDetails = await tenantCreate(engineCore, envVars, {\n\t\t\t\t\t\ttenantId: envVars.tenantId,\n\t\t\t\t\t\tapiKey: envVars.tenantApiKey,\n\t\t\t\t\t\tlabel: \"Node\"\n\t\t\t\t\t});\n\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.nodeTenantSet\")\n\t\t\t\t\t);\n\t\t\t\t\tawait nodeSetTenant(engineCore, envVars, {\n\t\t\t\t\t\ttenantId: tenantDetails.tenantId\n\t\t\t\t\t});\n\n\t\t\t\t\ttenantId = tenantDetails.tenantId;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tif (features.includes(\"node-admin-user\")) {\n\t\tawait ContextIdStore.run(\n\t\t\t{ [ContextIdKeys.Node]: nodeId, [ContextIdKeys.Tenant]: tenantId },\n\t\t\tasync () => {\n\t\t\t\tCLIDisplay.break();\n\t\t\t\tCLIDisplay.section(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.organisationCreate\")\n\t\t\t\t);\n\t\t\t\tconst organisation = await identityCreate(engineCore, envVars, {\n\t\t\t\t\tidentity: envVars.organizationIdentity,\n\t\t\t\t\tmnemonic: envVars.organizationMnemonic,\n\t\t\t\t\tfundWallet: requireWallet\n\t\t\t\t});\n\n\t\t\t\tif (Coerce.boolean(envVars.blobStorageEnableEncryption) ?? false) {\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.blobStorageKeyCreate\")\n\t\t\t\t\t);\n\t\t\t\t\tawait vaultKeyCreate(engineCore, envVars, {\n\t\t\t\t\t\tidentity: organisation.did,\n\t\t\t\t\t\tkeyType: \"ChaCha20Poly1305\",\n\t\t\t\t\t\tkeyId: envVars.blobStorageEncryptionKeyId,\n\t\t\t\t\t\toverwriteMode: \"skip\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst defaultAttestationConnectorType =\n\t\t\t\t\tengineCore.getRegisteredInstanceTypeOptional(\"attestationConnector\");\n\t\t\t\tif (!Is.empty(defaultAttestationConnectorType)) {\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.attestationMethodCreate\")\n\t\t\t\t\t);\n\t\t\t\t\tawait identityVerificationMethodCreate(engineCore, envVars, {\n\t\t\t\t\t\tidentity: organisation.did,\n\t\t\t\t\t\tverificationMethodType: \"assertionMethod\",\n\t\t\t\t\t\tverificationMethodId: envVars.attestationVerificationMethodId,\n\t\t\t\t\t\toverwriteMode: \"skip\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst defaultImmutableProofComponentType =\n\t\t\t\t\tengineCore.getRegisteredInstanceTypeOptional(\"immutableProofComponent\");\n\n\t\t\t\tif (!Is.empty(defaultImmutableProofComponentType)) {\n\t\t\t\t\tCLIDisplay.break();\n\t\t\t\t\tCLIDisplay.section(\n\t\t\t\t\t\tI18n.formatMessage(\n\t\t\t\t\t\t\t\"node.cli.commands.bootstrap-legacy.labels.immutableProofMethodCreate\"\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\tawait identityVerificationMethodCreate(engineCore, envVars, {\n\t\t\t\t\t\tidentity: organisation.did,\n\t\t\t\t\t\tverificationMethodType: \"assertionMethod\",\n\t\t\t\t\t\tverificationMethodId: envVars.immutableProofVerificationMethodId,\n\t\t\t\t\t\toverwriteMode: \"skip\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tCLIDisplay.break();\n\t\t\t\tCLIDisplay.section(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.adminIdentityCreate\")\n\t\t\t\t);\n\t\t\t\tconst adminUserIdentity = await identityCreate(engineCore, envVars, {\n\t\t\t\t\tidentity: envVars.adminUserIdentity,\n\t\t\t\t\tmnemonic: envVars.adminUserMnemonic,\n\t\t\t\t\tcontroller: organisation.did\n\t\t\t\t});\n\n\t\t\t\tCLIDisplay.break();\n\t\t\t\tCLIDisplay.section(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.bootstrap-legacy.labels.adminUserCreate\")\n\t\t\t\t);\n\t\t\t\tawait userCreate(engineCore, envVars, {\n\t\t\t\t\tuserIdentity: adminUserIdentity.did,\n\t\t\t\t\torganizationIdentity: organisation.did,\n\t\t\t\t\ttenantId,\n\t\t\t\t\temail: envVars.adminUserName ?? \"admin@node\",\n\t\t\t\t\tpassword: envVars.adminUserPassword,\n\t\t\t\t\tscope: [\"tenant-admin\", \"user-admin\"].join(\",\"),\n\t\t\t\t\tgivenName: \"Node\",\n\t\t\t\t\tfamilyName: \"Admin\",\n\t\t\t\t\toverwriteMode: \"skip\"\n\t\t\t\t});\n\t\t\t}\n\t\t);\n\t}\n}\n"]}
@@ -3,7 +3,7 @@
3
3
  import { CLIDisplay, CLIUtils } from "@twin.org/cli-core";
4
4
  import { Coerce, GeneralError, I18n, Is, RandomHelper, StringHelper } from "@twin.org/core";
5
5
  import { Bip39 } from "@twin.org/crypto";
6
- import { WalletConnectorType } from "@twin.org/engine-types";
6
+ import { IdentityConnectorType, WalletConnectorType } from "@twin.org/engine-types";
7
7
  import { EntityStorageConnectorFactory } from "@twin.org/entity-storage-models";
8
8
  import { Did, IdentityConnectorFactory, IdentityResolverConnectorFactory } from "@twin.org/identity-models";
9
9
  import { VaultConnectorFactory } from "@twin.org/vault-models";
@@ -126,7 +126,8 @@ export async function identityCreate(engineCore, envVars, params) {
126
126
  CLIDisplay.break();
127
127
  CLIDisplay.value(I18n.formatMessage("node.cli.commands.identity-create.labels.mnemonic"), mnemonicResult.mnemonic);
128
128
  CLIDisplay.value(I18n.formatMessage("node.cli.commands.identity-create.labels.did"), workingIdentity);
129
- if (Is.stringValue(envVars.iotaExplorerEndpoint)) {
129
+ if (Is.stringValue(envVars.iotaExplorerEndpoint) &&
130
+ envVars.identityConnector === IdentityConnectorType.Iota) {
130
131
  const idParts = Did.parse(workingIdentity);
131
132
  if (Is.stringValue(walletAddress)) {
132
133
  CLIDisplay.value(I18n.formatMessage("node.cli.commands.identity-create.labels.walletAddress"), `${StringHelper.trimTrailingSlashes(envVars.iotaExplorerEndpoint)}/address/${walletAddress}?network=${idParts.network ?? envVars.iotaNetwork}`);
@@ -1 +1 @@
1
- {"version":3,"file":"identityCreate.js","sourceRoot":"","sources":["../../../src/commands/identityCreate.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { CLIDisplay, CLIUtils } from \"@twin.org/cli-core\";\nimport { Coerce, GeneralError, I18n, Is, RandomHelper, StringHelper } from \"@twin.org/core\";\nimport { Bip39 } from \"@twin.org/crypto\";\nimport type { IEngineCore } from \"@twin.org/engine-models\";\nimport { WalletConnectorType } from \"@twin.org/engine-types\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport {\n\tDid,\n\tIdentityConnectorFactory,\n\tIdentityResolverConnectorFactory\n} from \"@twin.org/identity-models\";\nimport { nameofKebabCase } from \"@twin.org/nameof\";\nimport { type IVaultConnector, VaultConnectorFactory } from \"@twin.org/vault-models\";\nimport type { WalletAddress } from \"@twin.org/wallet-connector-entity-storage\";\nimport { WalletConnectorFactory } from \"@twin.org/wallet-models\";\nimport type { ICliCommandDefinition } from \"../models/ICliCommandDefinition.js\";\nimport type { INodeEngineConfig } from \"../models/INodeEngineConfig.js\";\nimport type { INodeEngineState } from \"../models/INodeEngineState.js\";\nimport type { INodeEnvironmentVariables } from \"../models/INodeEnvironmentVariables.js\";\n\nconst COMMAND_NAME = \"identity-create\";\n\n/**\n * Get the command definition parameters.\n * @param commandDefinitions The registered command definitions.\n */\nexport function getCommandDefinitionIdentityCreate(commandDefinitions: {\n\t[id: string]: ICliCommandDefinition;\n}): void {\n\tcommandDefinitions[COMMAND_NAME] = {\n\t\tcommand: COMMAND_NAME,\n\t\tdescription: I18n.formatMessage(\"node.cli.commands.identity-create.description\"),\n\t\texample: I18n.formatMessage(\"node.cli.commands.identity-create.example\"),\n\t\trequiresNodeIdentity: false,\n\t\trequiresTenantId: false,\n\t\tparams: [\n\t\t\t{\n\t\t\t\tkey: \"env-prefix\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.env-prefix.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"mnemonic\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.mnemonic.description\"\n\t\t\t\t),\n\t\t\t\textendedType: \"24 words\",\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"identity\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.identity.description\"\n\t\t\t\t),\n\t\t\t\textendedType: \"did\",\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"controller\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.controller.description\"\n\t\t\t\t),\n\t\t\t\textendedType: \"did\",\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"fund-wallet\",\n\t\t\t\ttype: \"boolean\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.fund-wallet.description\"\n\t\t\t\t),\n\t\t\t\trequired: false,\n\t\t\t\tdefaultValue: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"load-env\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.load-env.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"output-json\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.output-json.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"output-env\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.output-env.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"output-env-prefix\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.output-env-prefix.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t}\n\t\t],\n\t\taction: async (engineCore, envVars, params) => identityCreate(engineCore, envVars, params)\n\t};\n}\n\n/**\n * Command for creating an identity.\n * @param engineCore The engine core.\n * @param envVars The environment variables for the node.\n * @param params The parameters for the command.\n * @param params.mnemonic The mnemonic to use for the identity.\n * @param params.identity The DID of the identity to create.\n * @param params.controller The controller DID for the identity.\n * @param params.fundWallet Whether to fund the wallet associated with the identity from a faucet.\n * @param params.outputJson The output .json file to store the command output.\n * @param params.outputEnv The output .env file to store the command output.\n * @param params.outputEnvPrefix The prefix to use for variables in the output .env file.\n * @returns The identity details.\n */\nexport async function identityCreate(\n\tengineCore: IEngineCore<INodeEngineConfig, INodeEngineState>,\n\tenvVars: INodeEnvironmentVariables,\n\tparams: {\n\t\tmnemonic?: string;\n\t\tidentity?: string;\n\t\tcontroller?: string;\n\t\tfundWallet?: boolean;\n\t\toutputJson?: string;\n\t\toutputEnv?: string;\n\t\toutputEnvPrefix?: string;\n\t}\n): Promise<{ mnemonic: string; did: string; walletAddress?: string }> {\n\tlet workingIdentity = params?.identity;\n\tlet tempIdentity;\n\tif (!Is.stringValue(workingIdentity)) {\n\t\ttempIdentity = `did:temp:${RandomHelper.generateUuidV7()}`;\n\t\tworkingIdentity = tempIdentity;\n\t}\n\tlet mnemonicStored = false;\n\n\tconst defaultVaultConnectorType = engineCore.getRegisteredInstanceType(\"vaultConnector\");\n\tconst vaultConnector = VaultConnectorFactory.get(defaultVaultConnectorType);\n\n\ttry {\n\t\tconst mnemonicResult = await mnemonicCreate(vaultConnector, workingIdentity, params.mnemonic);\n\t\tmnemonicStored = mnemonicResult.stored;\n\n\t\tconst fundWallet = params.fundWallet ?? false;\n\t\tlet walletAddress;\n\t\tif (fundWallet) {\n\t\t\twalletAddress = await generateWallet(\n\t\t\t\tengineCore,\n\t\t\t\tworkingIdentity,\n\t\t\t\tCoerce.integer(envVars.identityWalletAddressIndex) ?? 0\n\t\t\t);\n\t\t}\n\n\t\tconst workingController = params?.controller ?? workingIdentity;\n\t\tworkingIdentity = await identityGenerate(engineCore, workingController, workingIdentity);\n\n\t\tif (Is.stringValue(tempIdentity)) {\n\t\t\t// If we were using a temporary identity store the mnemonic using\n\t\t\t// the final identity\n\t\t\tawait mnemonicFinalise(vaultConnector, tempIdentity, workingIdentity);\n\n\t\t\tawait walletFinalise(engineCore, workingIdentity, walletAddress);\n\t\t}\n\n\t\tCLIDisplay.break();\n\n\t\tCLIDisplay.value(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.mnemonic\"),\n\t\t\tmnemonicResult.mnemonic\n\t\t);\n\t\tCLIDisplay.value(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.did\"),\n\t\t\tworkingIdentity\n\t\t);\n\t\tif (Is.stringValue(envVars.iotaExplorerEndpoint)) {\n\t\t\tconst idParts = Did.parse(workingIdentity);\n\t\t\tif (Is.stringValue(walletAddress)) {\n\t\t\t\tCLIDisplay.value(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.walletAddress\"),\n\t\t\t\t\t`${StringHelper.trimTrailingSlashes(envVars.iotaExplorerEndpoint)}/address/${walletAddress}?network=${idParts.network ?? envVars.iotaNetwork}`\n\t\t\t\t);\n\t\t\t}\n\t\t\tCLIDisplay.value(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.explorer\"),\n\t\t\t\t`${StringHelper.trimTrailingSlashes(envVars.iotaExplorerEndpoint)}/object/${idParts.id}?network=${idParts.network ?? envVars.iotaNetwork}`\n\t\t\t);\n\t\t}\n\t\tCLIDisplay.break();\n\n\t\tconst json = { mnemonic: mnemonicResult.mnemonic, did: workingIdentity, walletAddress };\n\t\tif (Is.stringValue(params.outputJson)) {\n\t\t\tawait CLIUtils.writeJsonFile(\n\t\t\t\tparams.outputJson,\n\t\t\t\t{ mnemonic: mnemonicResult.mnemonic, did: workingIdentity, walletAddress },\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\n\t\tif (Is.stringValue(params.outputEnv)) {\n\t\t\tconst output = [\n\t\t\t\t`${params.outputEnvPrefix}MNEMONIC=\"${mnemonicResult.mnemonic}\"`,\n\t\t\t\t`${params.outputEnvPrefix}DID=\"${workingIdentity}\"`\n\t\t\t];\n\t\t\tif (Is.stringValue(walletAddress)) {\n\t\t\t\toutput.push(`${params.outputEnvPrefix}WALLET_ADDRESS=\"${walletAddress}\"`);\n\t\t\t}\n\t\t\tawait CLIUtils.writeEnvFile(params.outputEnv, output, false);\n\t\t}\n\n\t\tCLIDisplay.done();\n\n\t\treturn json;\n\t} finally {\n\t\t// Always remove temporary identity mnemonic if created\n\t\tif (Is.stringValue(tempIdentity) && mnemonicStored) {\n\t\t\tawait mnemonicRemove(vaultConnector, tempIdentity);\n\t\t}\n\t}\n}\n\n/**\n * Handle the mnemonic generation or retrieval.\n * @param vaultConnector The vault connector.\n * @param identity The working identity.\n * @param providedMnemonic The mnemonic provided by the user.\n * @returns The mnemonic and the flag to determine if the mnemonic was stored.\n */\nasync function mnemonicCreate(\n\tvaultConnector: IVaultConnector,\n\tidentity: string,\n\tprovidedMnemonic?: string\n): Promise<{\n\tstored: boolean;\n\tmnemonic: string;\n}> {\n\tif (Is.stringValue(providedMnemonic) && !Bip39.validateMnemonic(providedMnemonic)) {\n\t\tthrow new GeneralError(\"identityCreate\", \"invalidMnemonic\");\n\t}\n\tlet mnemonic = providedMnemonic;\n\tlet storeMnemonic;\n\n\tCLIDisplay.section(\n\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.processingMnemonic\")\n\t);\n\n\tconst mnemonicKey = `${identity}/mnemonic`;\n\n\ttry {\n\t\tCLIDisplay.task(I18n.formatMessage(\"node.cli.commands.identity-create.labels.readingMnemonic\"));\n\t\tconst storedMnemonic = await vaultConnector.getSecret<string>(mnemonicKey);\n\t\tif (Is.stringValue(storedMnemonic)) {\n\t\t\tCLIDisplay.task(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.existingMnemonic\")\n\t\t\t);\n\t\t\tstoreMnemonic = storedMnemonic !== mnemonic && !Is.empty(mnemonic);\n\t\t\tmnemonic = storedMnemonic;\n\t\t} else {\n\t\t\tCLIDisplay.task(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.noExistingMnemonic\")\n\t\t\t);\n\t\t\tstoreMnemonic = true;\n\t\t}\n\t} catch {\n\t\tCLIDisplay.task(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.noExistingMnemonic\")\n\t\t);\n\t\tstoreMnemonic = true;\n\t}\n\n\t// If there is no mnemonic then we need to generate one\n\tif (Is.empty(mnemonic)) {\n\t\tCLIDisplay.task(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.generatingMnemonic\")\n\t\t);\n\t\tmnemonic = Bip39.randomMnemonic();\n\t\tstoreMnemonic = true;\n\t}\n\n\t// If there is no mnemonic stored in the vault then we need to store it\n\tif (storeMnemonic) {\n\t\tCLIDisplay.task(I18n.formatMessage(\"node.cli.commands.identity-create.labels.storingMnemonic\"));\n\t\tawait vaultConnector.setSecret(mnemonicKey, mnemonic);\n\t}\n\tCLIDisplay.break();\n\n\treturn {\n\t\tstored: storeMnemonic,\n\t\tmnemonic\n\t};\n}\n\n/**\n * Finalise the mnemonic for the node identity.\n * @param vaultConnector The vault connector to use.\n * @param tempIdentity The identity of the node.\n * @param identity The final identity for the node.\n */\nasync function mnemonicFinalise(\n\tvaultConnector: IVaultConnector,\n\ttempIdentity: string,\n\tidentity: string\n): Promise<void> {\n\t// Now that we have an identity we can remove the temporary one\n\t// and store the mnemonic with the new identity\n\tif (tempIdentity !== identity) {\n\t\tconst mnemonic = await vaultConnector.getSecret(`${tempIdentity}/mnemonic`);\n\t\tawait vaultConnector.setSecret(`${identity}/mnemonic`, mnemonic);\n\n\t\ttry {\n\t\t\t// not all accounts have account entries in the vault, so wrap this in a try catch\n\t\t\tconst accountChunk = await vaultConnector.getSecret(`${tempIdentity}/account/0/0/0`);\n\t\t\tawait vaultConnector.setSecret(`${identity}/account/0/0/0`, accountChunk);\n\t\t} catch {}\n\t}\n}\n\n/**\n * Remove the mnemonic.\n * @param vaultConnector The vault connector.\n * @param identity The working identity.\n * @returns Nothing.\n */\nasync function mnemonicRemove(vaultConnector: IVaultConnector, identity: string): Promise<void> {\n\ttry {\n\t\tawait vaultConnector.removeSecret(`${identity}/mnemonic`);\n\t} catch {}\n\n\ttry {\n\t\tawait vaultConnector.removeSecret(`${identity}/account/0/0/0`);\n\t} catch {}\n}\n\n/**\n * Generate an identity.\n * @param engineCore The engine core for the node.\n * @param controller The controller for the identity.\n * @param providedIdentity The existing identity if there is one.\n * @returns The addresses for the wallet.\n */\nasync function identityGenerate(\n\tengineCore: IEngineCore,\n\tcontroller: string,\n\tprovidedIdentity?: string\n): Promise<string> {\n\tCLIDisplay.section(\n\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.processingIdentity\")\n\t);\n\n\tconst defaultIdentityConnectorType = engineCore.getRegisteredInstanceType(\"identityConnector\");\n\tconst identityConnector = IdentityConnectorFactory.get(defaultIdentityConnectorType);\n\n\tlet identityDocument;\n\n\ttry {\n\t\tif (Is.stringValue(providedIdentity)) {\n\t\t\tCLIDisplay.task(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.resolvingIdentity\")\n\t\t\t);\n\t\t\tconst defaultIdentityResolverConnectorType = engineCore.getRegisteredInstanceType(\n\t\t\t\t\"identityResolverConnector\"\n\t\t\t);\n\n\t\t\tconst identityResolverConnector = IdentityResolverConnectorFactory.get(\n\t\t\t\tdefaultIdentityResolverConnectorType\n\t\t\t);\n\t\t\tidentityDocument = await identityResolverConnector.resolveDocument(providedIdentity);\n\t\t\tif (Is.objectValue(identityDocument)) {\n\t\t\t\tCLIDisplay.task(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.existingIdentity\")\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\tif (Is.empty(identityDocument)) {\n\t\tCLIDisplay.task(I18n.formatMessage(\"node.cli.commands.identity-create.labels.noIdentityFound\"));\n\n\t\tCLIDisplay.task(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.creatingIdentity\")\n\t\t);\n\n\t\tCLIDisplay.spinnerStart();\n\t\tidentityDocument = await identityConnector.createDocument(controller);\n\t\tCLIDisplay.spinnerStop();\n\n\t\tCLIDisplay.task(I18n.formatMessage(\"node.cli.commands.identity-create.labels.createdIdentity\"));\n\t}\n\n\treturn identityDocument.id;\n}\n\n/**\n * Bootstrap the wallet for the node.\n * @param engineCore The engine core for the node.\n * @param identity The identity to create the wallet for.\n * @param walletAddressIndex The index of the wallet address to use.\n * @returns The addresses for the wallet.\n */\nasync function generateWallet(\n\tengineCore: IEngineCore,\n\tidentity: string,\n\twalletAddressIndex: number\n): Promise<string> {\n\tCLIDisplay.section(I18n.formatMessage(\"node.cli.commands.identity-create.labels.fundingWallet\"));\n\tCLIDisplay.value(\n\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.addressIndex\"),\n\t\twalletAddressIndex.toString()\n\t);\n\n\tconst defaultWalletConnectorType = engineCore.getRegisteredInstanceType(\"walletConnector\");\n\n\tconst walletConnector = WalletConnectorFactory.get(defaultWalletConnectorType);\n\tconst addresses = await walletConnector.getAddresses(identity, 0, walletAddressIndex, 5);\n\n\tif (defaultWalletConnectorType.startsWith(WalletConnectorType.Iota)) {\n\t\tCLIDisplay.task(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.addingTokens\", {\n\t\t\t\taddress: addresses[0]\n\t\t\t})\n\t\t);\n\t\tCLIDisplay.break();\n\n\t\tCLIDisplay.spinnerStart();\n\n\t\t// Add some funds to the wallet from the faucet\n\t\tawait walletConnector.ensureBalance(identity, addresses[0], 1000000000n);\n\n\t\tCLIDisplay.spinnerStop();\n\t}\n\n\treturn addresses[0];\n}\n\n/**\n * Bootstrap the identity for the node.\n * @param engineCore The engine core for the node.\n * @param identity The identity of the node.\n * @param address The address for the wallet.\n */\nasync function walletFinalise(\n\tengineCore: IEngineCore,\n\tidentity: string,\n\taddress?: string\n): Promise<void> {\n\tif (Is.stringValue(address)) {\n\t\tconst defaultWalletConnectorType = engineCore.getRegisteredInstanceType(\"walletConnector\");\n\n\t\t// If we are using entity storage for wallet the identity associated with the\n\t\t// address will be wrong, so fix it\n\t\tif (defaultWalletConnectorType.startsWith(WalletConnectorType.EntityStorage)) {\n\t\t\tconst walletAddress =\n\t\t\t\tEntityStorageConnectorFactory.get<IEntityStorageConnector<WalletAddress>>(\n\t\t\t\t\tnameofKebabCase<WalletAddress>()\n\t\t\t\t);\n\t\t\tconst addr = await walletAddress.get(address);\n\t\t\tif (!Is.empty(addr)) {\n\t\t\t\taddr.identity = identity;\n\t\t\t\tawait walletAddress.set(addr);\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"identityCreate.js","sourceRoot":"","sources":["../../../src/commands/identityCreate.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2026 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { CLIDisplay, CLIUtils } from \"@twin.org/cli-core\";\nimport { Coerce, GeneralError, I18n, Is, RandomHelper, StringHelper } from \"@twin.org/core\";\nimport { Bip39 } from \"@twin.org/crypto\";\nimport type { IEngineCore } from \"@twin.org/engine-models\";\nimport { IdentityConnectorType, WalletConnectorType } from \"@twin.org/engine-types\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport {\n\tDid,\n\tIdentityConnectorFactory,\n\tIdentityResolverConnectorFactory\n} from \"@twin.org/identity-models\";\nimport { nameofKebabCase } from \"@twin.org/nameof\";\nimport { type IVaultConnector, VaultConnectorFactory } from \"@twin.org/vault-models\";\nimport type { WalletAddress } from \"@twin.org/wallet-connector-entity-storage\";\nimport { WalletConnectorFactory } from \"@twin.org/wallet-models\";\nimport type { ICliCommandDefinition } from \"../models/ICliCommandDefinition.js\";\nimport type { INodeEngineConfig } from \"../models/INodeEngineConfig.js\";\nimport type { INodeEngineState } from \"../models/INodeEngineState.js\";\nimport type { INodeEnvironmentVariables } from \"../models/INodeEnvironmentVariables.js\";\n\nconst COMMAND_NAME = \"identity-create\";\n\n/**\n * Get the command definition parameters.\n * @param commandDefinitions The registered command definitions.\n */\nexport function getCommandDefinitionIdentityCreate(commandDefinitions: {\n\t[id: string]: ICliCommandDefinition;\n}): void {\n\tcommandDefinitions[COMMAND_NAME] = {\n\t\tcommand: COMMAND_NAME,\n\t\tdescription: I18n.formatMessage(\"node.cli.commands.identity-create.description\"),\n\t\texample: I18n.formatMessage(\"node.cli.commands.identity-create.example\"),\n\t\trequiresNodeIdentity: false,\n\t\trequiresTenantId: false,\n\t\tparams: [\n\t\t\t{\n\t\t\t\tkey: \"env-prefix\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.env-prefix.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"mnemonic\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.mnemonic.description\"\n\t\t\t\t),\n\t\t\t\textendedType: \"24 words\",\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"identity\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.identity.description\"\n\t\t\t\t),\n\t\t\t\textendedType: \"did\",\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"controller\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.controller.description\"\n\t\t\t\t),\n\t\t\t\textendedType: \"did\",\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"fund-wallet\",\n\t\t\t\ttype: \"boolean\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.fund-wallet.description\"\n\t\t\t\t),\n\t\t\t\trequired: false,\n\t\t\t\tdefaultValue: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"load-env\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.load-env.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"output-json\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.output-json.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"output-env\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.output-env.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"output-env-prefix\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tdescription: I18n.formatMessage(\n\t\t\t\t\t\"node.cli.commands.identity-create.params.output-env-prefix.description\"\n\t\t\t\t),\n\t\t\t\trequired: false\n\t\t\t}\n\t\t],\n\t\taction: async (engineCore, envVars, params) => identityCreate(engineCore, envVars, params)\n\t};\n}\n\n/**\n * Command for creating an identity.\n * @param engineCore The engine core.\n * @param envVars The environment variables for the node.\n * @param params The parameters for the command.\n * @param params.mnemonic The mnemonic to use for the identity.\n * @param params.identity The DID of the identity to create.\n * @param params.controller The controller DID for the identity.\n * @param params.fundWallet Whether to fund the wallet associated with the identity from a faucet.\n * @param params.outputJson The output .json file to store the command output.\n * @param params.outputEnv The output .env file to store the command output.\n * @param params.outputEnvPrefix The prefix to use for variables in the output .env file.\n * @returns The identity details.\n */\nexport async function identityCreate(\n\tengineCore: IEngineCore<INodeEngineConfig, INodeEngineState>,\n\tenvVars: INodeEnvironmentVariables,\n\tparams: {\n\t\tmnemonic?: string;\n\t\tidentity?: string;\n\t\tcontroller?: string;\n\t\tfundWallet?: boolean;\n\t\toutputJson?: string;\n\t\toutputEnv?: string;\n\t\toutputEnvPrefix?: string;\n\t}\n): Promise<{ mnemonic: string; did: string; walletAddress?: string }> {\n\tlet workingIdentity = params?.identity;\n\tlet tempIdentity;\n\tif (!Is.stringValue(workingIdentity)) {\n\t\ttempIdentity = `did:temp:${RandomHelper.generateUuidV7()}`;\n\t\tworkingIdentity = tempIdentity;\n\t}\n\tlet mnemonicStored = false;\n\n\tconst defaultVaultConnectorType = engineCore.getRegisteredInstanceType(\"vaultConnector\");\n\tconst vaultConnector = VaultConnectorFactory.get(defaultVaultConnectorType);\n\n\ttry {\n\t\tconst mnemonicResult = await mnemonicCreate(vaultConnector, workingIdentity, params.mnemonic);\n\t\tmnemonicStored = mnemonicResult.stored;\n\n\t\tconst fundWallet = params.fundWallet ?? false;\n\t\tlet walletAddress;\n\t\tif (fundWallet) {\n\t\t\twalletAddress = await generateWallet(\n\t\t\t\tengineCore,\n\t\t\t\tworkingIdentity,\n\t\t\t\tCoerce.integer(envVars.identityWalletAddressIndex) ?? 0\n\t\t\t);\n\t\t}\n\n\t\tconst workingController = params?.controller ?? workingIdentity;\n\t\tworkingIdentity = await identityGenerate(engineCore, workingController, workingIdentity);\n\n\t\tif (Is.stringValue(tempIdentity)) {\n\t\t\t// If we were using a temporary identity store the mnemonic using\n\t\t\t// the final identity\n\t\t\tawait mnemonicFinalise(vaultConnector, tempIdentity, workingIdentity);\n\n\t\t\tawait walletFinalise(engineCore, workingIdentity, walletAddress);\n\t\t}\n\n\t\tCLIDisplay.break();\n\n\t\tCLIDisplay.value(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.mnemonic\"),\n\t\t\tmnemonicResult.mnemonic\n\t\t);\n\t\tCLIDisplay.value(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.did\"),\n\t\t\tworkingIdentity\n\t\t);\n\t\tif (\n\t\t\tIs.stringValue(envVars.iotaExplorerEndpoint) &&\n\t\t\tenvVars.identityConnector === IdentityConnectorType.Iota\n\t\t) {\n\t\t\tconst idParts = Did.parse(workingIdentity);\n\t\t\tif (Is.stringValue(walletAddress)) {\n\t\t\t\tCLIDisplay.value(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.walletAddress\"),\n\t\t\t\t\t`${StringHelper.trimTrailingSlashes(envVars.iotaExplorerEndpoint)}/address/${walletAddress}?network=${idParts.network ?? envVars.iotaNetwork}`\n\t\t\t\t);\n\t\t\t}\n\t\t\tCLIDisplay.value(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.explorer\"),\n\t\t\t\t`${StringHelper.trimTrailingSlashes(envVars.iotaExplorerEndpoint)}/object/${idParts.id}?network=${idParts.network ?? envVars.iotaNetwork}`\n\t\t\t);\n\t\t}\n\t\tCLIDisplay.break();\n\n\t\tconst json = { mnemonic: mnemonicResult.mnemonic, did: workingIdentity, walletAddress };\n\t\tif (Is.stringValue(params.outputJson)) {\n\t\t\tawait CLIUtils.writeJsonFile(\n\t\t\t\tparams.outputJson,\n\t\t\t\t{ mnemonic: mnemonicResult.mnemonic, did: workingIdentity, walletAddress },\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\n\t\tif (Is.stringValue(params.outputEnv)) {\n\t\t\tconst output = [\n\t\t\t\t`${params.outputEnvPrefix}MNEMONIC=\"${mnemonicResult.mnemonic}\"`,\n\t\t\t\t`${params.outputEnvPrefix}DID=\"${workingIdentity}\"`\n\t\t\t];\n\t\t\tif (Is.stringValue(walletAddress)) {\n\t\t\t\toutput.push(`${params.outputEnvPrefix}WALLET_ADDRESS=\"${walletAddress}\"`);\n\t\t\t}\n\t\t\tawait CLIUtils.writeEnvFile(params.outputEnv, output, false);\n\t\t}\n\n\t\tCLIDisplay.done();\n\n\t\treturn json;\n\t} finally {\n\t\t// Always remove temporary identity mnemonic if created\n\t\tif (Is.stringValue(tempIdentity) && mnemonicStored) {\n\t\t\tawait mnemonicRemove(vaultConnector, tempIdentity);\n\t\t}\n\t}\n}\n\n/**\n * Handle the mnemonic generation or retrieval.\n * @param vaultConnector The vault connector.\n * @param identity The working identity.\n * @param providedMnemonic The mnemonic provided by the user.\n * @returns The mnemonic and the flag to determine if the mnemonic was stored.\n */\nasync function mnemonicCreate(\n\tvaultConnector: IVaultConnector,\n\tidentity: string,\n\tprovidedMnemonic?: string\n): Promise<{\n\tstored: boolean;\n\tmnemonic: string;\n}> {\n\tif (Is.stringValue(providedMnemonic) && !Bip39.validateMnemonic(providedMnemonic)) {\n\t\tthrow new GeneralError(\"identityCreate\", \"invalidMnemonic\");\n\t}\n\tlet mnemonic = providedMnemonic;\n\tlet storeMnemonic;\n\n\tCLIDisplay.section(\n\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.processingMnemonic\")\n\t);\n\n\tconst mnemonicKey = `${identity}/mnemonic`;\n\n\ttry {\n\t\tCLIDisplay.task(I18n.formatMessage(\"node.cli.commands.identity-create.labels.readingMnemonic\"));\n\t\tconst storedMnemonic = await vaultConnector.getSecret<string>(mnemonicKey);\n\t\tif (Is.stringValue(storedMnemonic)) {\n\t\t\tCLIDisplay.task(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.existingMnemonic\")\n\t\t\t);\n\t\t\tstoreMnemonic = storedMnemonic !== mnemonic && !Is.empty(mnemonic);\n\t\t\tmnemonic = storedMnemonic;\n\t\t} else {\n\t\t\tCLIDisplay.task(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.noExistingMnemonic\")\n\t\t\t);\n\t\t\tstoreMnemonic = true;\n\t\t}\n\t} catch {\n\t\tCLIDisplay.task(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.noExistingMnemonic\")\n\t\t);\n\t\tstoreMnemonic = true;\n\t}\n\n\t// If there is no mnemonic then we need to generate one\n\tif (Is.empty(mnemonic)) {\n\t\tCLIDisplay.task(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.generatingMnemonic\")\n\t\t);\n\t\tmnemonic = Bip39.randomMnemonic();\n\t\tstoreMnemonic = true;\n\t}\n\n\t// If there is no mnemonic stored in the vault then we need to store it\n\tif (storeMnemonic) {\n\t\tCLIDisplay.task(I18n.formatMessage(\"node.cli.commands.identity-create.labels.storingMnemonic\"));\n\t\tawait vaultConnector.setSecret(mnemonicKey, mnemonic);\n\t}\n\tCLIDisplay.break();\n\n\treturn {\n\t\tstored: storeMnemonic,\n\t\tmnemonic\n\t};\n}\n\n/**\n * Finalise the mnemonic for the node identity.\n * @param vaultConnector The vault connector to use.\n * @param tempIdentity The identity of the node.\n * @param identity The final identity for the node.\n */\nasync function mnemonicFinalise(\n\tvaultConnector: IVaultConnector,\n\ttempIdentity: string,\n\tidentity: string\n): Promise<void> {\n\t// Now that we have an identity we can remove the temporary one\n\t// and store the mnemonic with the new identity\n\tif (tempIdentity !== identity) {\n\t\tconst mnemonic = await vaultConnector.getSecret(`${tempIdentity}/mnemonic`);\n\t\tawait vaultConnector.setSecret(`${identity}/mnemonic`, mnemonic);\n\n\t\ttry {\n\t\t\t// not all accounts have account entries in the vault, so wrap this in a try catch\n\t\t\tconst accountChunk = await vaultConnector.getSecret(`${tempIdentity}/account/0/0/0`);\n\t\t\tawait vaultConnector.setSecret(`${identity}/account/0/0/0`, accountChunk);\n\t\t} catch {}\n\t}\n}\n\n/**\n * Remove the mnemonic.\n * @param vaultConnector The vault connector.\n * @param identity The working identity.\n * @returns Nothing.\n */\nasync function mnemonicRemove(vaultConnector: IVaultConnector, identity: string): Promise<void> {\n\ttry {\n\t\tawait vaultConnector.removeSecret(`${identity}/mnemonic`);\n\t} catch {}\n\n\ttry {\n\t\tawait vaultConnector.removeSecret(`${identity}/account/0/0/0`);\n\t} catch {}\n}\n\n/**\n * Generate an identity.\n * @param engineCore The engine core for the node.\n * @param controller The controller for the identity.\n * @param providedIdentity The existing identity if there is one.\n * @returns The addresses for the wallet.\n */\nasync function identityGenerate(\n\tengineCore: IEngineCore,\n\tcontroller: string,\n\tprovidedIdentity?: string\n): Promise<string> {\n\tCLIDisplay.section(\n\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.processingIdentity\")\n\t);\n\n\tconst defaultIdentityConnectorType = engineCore.getRegisteredInstanceType(\"identityConnector\");\n\tconst identityConnector = IdentityConnectorFactory.get(defaultIdentityConnectorType);\n\n\tlet identityDocument;\n\n\ttry {\n\t\tif (Is.stringValue(providedIdentity)) {\n\t\t\tCLIDisplay.task(\n\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.resolvingIdentity\")\n\t\t\t);\n\t\t\tconst defaultIdentityResolverConnectorType = engineCore.getRegisteredInstanceType(\n\t\t\t\t\"identityResolverConnector\"\n\t\t\t);\n\n\t\t\tconst identityResolverConnector = IdentityResolverConnectorFactory.get(\n\t\t\t\tdefaultIdentityResolverConnectorType\n\t\t\t);\n\t\t\tidentityDocument = await identityResolverConnector.resolveDocument(providedIdentity);\n\t\t\tif (Is.objectValue(identityDocument)) {\n\t\t\t\tCLIDisplay.task(\n\t\t\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.existingIdentity\")\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t} catch {}\n\n\tif (Is.empty(identityDocument)) {\n\t\tCLIDisplay.task(I18n.formatMessage(\"node.cli.commands.identity-create.labels.noIdentityFound\"));\n\n\t\tCLIDisplay.task(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.creatingIdentity\")\n\t\t);\n\n\t\tCLIDisplay.spinnerStart();\n\t\tidentityDocument = await identityConnector.createDocument(controller);\n\t\tCLIDisplay.spinnerStop();\n\n\t\tCLIDisplay.task(I18n.formatMessage(\"node.cli.commands.identity-create.labels.createdIdentity\"));\n\t}\n\n\treturn identityDocument.id;\n}\n\n/**\n * Bootstrap the wallet for the node.\n * @param engineCore The engine core for the node.\n * @param identity The identity to create the wallet for.\n * @param walletAddressIndex The index of the wallet address to use.\n * @returns The addresses for the wallet.\n */\nasync function generateWallet(\n\tengineCore: IEngineCore,\n\tidentity: string,\n\twalletAddressIndex: number\n): Promise<string> {\n\tCLIDisplay.section(I18n.formatMessage(\"node.cli.commands.identity-create.labels.fundingWallet\"));\n\tCLIDisplay.value(\n\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.addressIndex\"),\n\t\twalletAddressIndex.toString()\n\t);\n\n\tconst defaultWalletConnectorType = engineCore.getRegisteredInstanceType(\"walletConnector\");\n\n\tconst walletConnector = WalletConnectorFactory.get(defaultWalletConnectorType);\n\tconst addresses = await walletConnector.getAddresses(identity, 0, walletAddressIndex, 5);\n\n\tif (defaultWalletConnectorType.startsWith(WalletConnectorType.Iota)) {\n\t\tCLIDisplay.task(\n\t\t\tI18n.formatMessage(\"node.cli.commands.identity-create.labels.addingTokens\", {\n\t\t\t\taddress: addresses[0]\n\t\t\t})\n\t\t);\n\t\tCLIDisplay.break();\n\n\t\tCLIDisplay.spinnerStart();\n\n\t\t// Add some funds to the wallet from the faucet\n\t\tawait walletConnector.ensureBalance(identity, addresses[0], 1000000000n);\n\n\t\tCLIDisplay.spinnerStop();\n\t}\n\n\treturn addresses[0];\n}\n\n/**\n * Bootstrap the identity for the node.\n * @param engineCore The engine core for the node.\n * @param identity The identity of the node.\n * @param address The address for the wallet.\n */\nasync function walletFinalise(\n\tengineCore: IEngineCore,\n\tidentity: string,\n\taddress?: string\n): Promise<void> {\n\tif (Is.stringValue(address)) {\n\t\tconst defaultWalletConnectorType = engineCore.getRegisteredInstanceType(\"walletConnector\");\n\n\t\t// If we are using entity storage for wallet the identity associated with the\n\t\t// address will be wrong, so fix it\n\t\tif (defaultWalletConnectorType.startsWith(WalletConnectorType.EntityStorage)) {\n\t\t\tconst walletAddress =\n\t\t\t\tEntityStorageConnectorFactory.get<IEntityStorageConnector<WalletAddress>>(\n\t\t\t\t\tnameofKebabCase<WalletAddress>()\n\t\t\t\t);\n\t\t\tconst addr = await walletAddress.get(address);\n\t\t\tif (!Is.empty(addr)) {\n\t\t\t\taddr.identity = identity;\n\t\t\t\tawait walletAddress.set(addr);\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IEngineEnvironmentVariables.js","sourceRoot":"","sources":["../../../src/models/IEngineEnvironmentVariables.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * The engine core environment variables.\n */\nexport interface IEngineEnvironmentVariables {\n\t/**\n\t * Start the engine in debug mode.\n\t */\n\tdebug?: string;\n\n\t/**\n\t * Start the engine in silent mode.\n\t */\n\tsilent?: string;\n\n\t/**\n\t * The root directory for storing items like state file.\n\t */\n\tstorageFileRoot?: string;\n\n\t/**\n\t * The name of the state file.\n\t */\n\tstateFilename?: string;\n\n\t/**\n\t * Does the node have a unique ID, defaults to true.\n\t */\n\tnodeIdentityEnabled?: string;\n\n\t/**\n\t * Is multi-tenant support enabled, defaults to false.\n\t */\n\ttenantEnabled?: string;\n\n\t/**\n\t * The type of the entity storage to create, comma separate for more than one connector.\n\t * values: file, memory, aws-dynamodb, azure-cosmosdb, gcp-firestoredb, scylladb, mysql, mongodb, postgresql\n\t */\n\tentityStorageConnectorType?: string;\n\n\t/**\n\t * The default entity storage connector to use, defaults to the first one in the list.\n\t */\n\tentityStorageConnectorDefault?: string;\n\n\t/**\n\t * A prefix for all the table in entity-storage, can be empty.\n\t */\n\tentityStorageTablePrefix?: string;\n\n\t/**\n\t * AWS DynamoDB auth mode, either credentials or pod.\n\t */\n\tawsDynamodbAuthMode?: string;\n\n\t/**\n\t * AWS Dynamo DB access key id.\n\t */\n\tawsDynamodbAccessKeyId?: string;\n\n\t/**\n\t * AWS Dynamo DB Endpoint if running local instance.\n\t */\n\tawsDynamodbEndpoint?: string;\n\n\t/**\n\t * AWS Dynamo DB region.\n\t */\n\tawsDynamodbRegion?: string;\n\n\t/**\n\t * AWS Dynamo DB secret access key.\n\t */\n\tawsDynamodbSecretAccessKey?: string;\n\n\t/**\n\t * AWS Dynamo DB connection timeout.\n\t */\n\tawsDynamodbConnectionTimeoutMs?: string;\n\n\t/**\n\t * Azure Cosmos DB key.\n\t */\n\tazureCosmosdbKey?: string;\n\n\t/**\n\t * Azure Cosmos DB container id.\n\t */\n\tazureCosmosdbContainerId?: string;\n\n\t/**\n\t * Azure Cosmos DB database id.\n\t */\n\tazureCosmosdbDatabaseId?: string;\n\n\t/**\n\t * Azure Cosmos DB endpoint.\n\t */\n\tazureCosmosdbEndpoint?: string;\n\n\t/**\n\t * GCP Firestore collection name.\n\t */\n\tgcpFirestoreCollectionName?: string;\n\n\t/**\n\t * GCP Firestore credentials.\n\t */\n\tgcpFirestoreCredentials?: string;\n\n\t/**\n\t * GCP Firestore database id.\n\t */\n\tgcpFirestoreDatabaseId?: string;\n\n\t/**\n\t * GCP Firestore endpoint.\n\t */\n\tgcpFirestoreApiEndpoint?: string;\n\n\t/**\n\t * GCP Firestore project id.\n\t */\n\tgcpFirestoreProjectId?: string;\n\n\t/**\n\t * ScyllaDB hosts as comma separated string.\n\t */\n\tscylladbHosts?: string;\n\n\t/**\n\t * ScyllaDB keyspace.\n\t */\n\tscylladbKeyspace?: string;\n\n\t/**\n\t * ScyllaDB local data center.\n\t */\n\tscylladbLocalDataCenter?: string;\n\n\t/**\n\t * ScyllaDB port.\n\t */\n\tscylladbPort?: string;\n\n\t/**\n\t * MySQL host.\n\t */\n\tmySqlHost?: string;\n\n\t/**\n\t * MySQL port.\n\t */\n\tmySqlPort?: number;\n\n\t/**\n\t * MySQL username.\n\t */\n\tmySqlUser?: string;\n\n\t/**\n\t * MySQL password.\n\t */\n\tmySqlPassword?: string;\n\n\t/**\n\t * MySQL Database.\n\t */\n\tmySqlDatabase?: string;\n\n\t/**\n\t * MongoDB host.\n\t */\n\tmongoDbHost?: string;\n\n\t/**\n\t * MongoDB port.\n\t */\n\tmongoDbPort?: number;\n\n\t/**\n\t * MongoDB username.\n\t */\n\tmongoDbUser?: string;\n\n\t/**\n\t * MongoDB password.\n\t */\n\tmongoDbPassword?: string;\n\n\t/**\n\t * MongoDB Database.\n\t */\n\tmongoDbDatabase?: string;\n\n\t/**\n\t * PostgreSQl host.\n\t */\n\tpostgreSqlHost?: string;\n\n\t/**\n\t * PostgreSQl port.\n\t */\n\tpostgreSqlPort?: number;\n\n\t/**\n\t * PostgreSQl username.\n\t */\n\tpostgreSqlUser?: string;\n\n\t/**\n\t * PostgreSQl password.\n\t */\n\tpostgreSqlPassword?: string;\n\n\t/**\n\t * PostgreSQl Database.\n\t */\n\tpostgreSqlDatabase?: string;\n\n\t/**\n\t * The security token for accessing IPFS API.\n\t */\n\tipfsBearerToken?: string;\n\n\t/**\n\t * The url for accessing IPFS API.\n\t */\n\tipfsApiUrl?: string;\n\n\t/**\n\t * The type of the entity storage to create, comma separate for more than one connector.\n\t * values: memory, file, ipfs, aws-s3, azure-storage, gcp-storage.\n\t */\n\tblobStorageConnectorType?: string;\n\n\t/**\n\t * The default blob storage connector to use, defaults to the first one in the list.\n\t */\n\tblobStorageConnectorDefault?: string;\n\n\t/**\n\t * Blog storage connector which has public access.\n\t */\n\tblobStorageConnectorPublic?: string;\n\n\t/**\n\t * Enable encryption for the blob storage.\n\t */\n\tblobStorageEnableEncryption?: string;\n\n\t/**\n\t * The id of the encryption key for the blob storage.\n\t */\n\tblobStorageEncryptionKeyId?: string;\n\n\t/**\n\t * A prefix for all the blobs in blob-storage, can be empty.\n\t */\n\tblobStoragePrefix?: string;\n\n\t/**\n\t * AWS S3 region.\n\t */\n\tawsS3Region?: string;\n\n\t/**\n\t * AWS S3 bucket name.\n\t */\n\tawsS3BucketName?: string;\n\n\t/**\n\t * AWS S3 auth mode, either credentials or pod, defaults to credentials.\n\t */\n\tawsS3AuthMode?: string;\n\n\t/**\n\t * AWS S3 access key id.\n\t */\n\tawsS3AccessKeyId?: string;\n\n\t/**\n\t * AWS S3 secret access key.\n\t */\n\tawsS3SecretAccessKey?: string;\n\n\t/**\n\t * AWS S3 endpoint.\n\t */\n\tawsS3Endpoint?: string;\n\n\t/**\n\t * Azure Storage account key.\n\t */\n\tazureStorageAccountKey?: string;\n\n\t/**\n\t * Azure Storage account name.\n\t */\n\tazureStorageAccountName?: string;\n\n\t/**\n\t * Azure Storage container.\n\t */\n\tazureStorageContainerName?: string;\n\n\t/**\n\t * Azure Storage endpoint.\n\t */\n\tazureStorageEndpoint?: string;\n\n\t/**\n\t * GCP Storage bucket.\n\t */\n\tgcpStorageBucketName?: string;\n\n\t/**\n\t * GCP Storage credentials.\n\t */\n\tgcpStorageCredentials?: string;\n\n\t/**\n\t * GCP Storage endpoint.\n\t */\n\tgcpStorageEndpoint?: string;\n\n\t/**\n\t * GCP Storage project id.\n\t */\n\tgcpStorageProjectId?: string;\n\n\t/**\n\t * The type of the default vault connector: entity-storage, hashicorp.\n\t */\n\tvaultConnector?: string;\n\n\t/**\n\t * Prefix to prepend to entries in the vault.\n\t */\n\tvaultPrefix?: string;\n\n\t/**\n\t * Hashicorp Vault token.\n\t */\n\thashicorpVaultToken?: string;\n\n\t/**\n\t * Hashicorp Vault endpoint.\n\t */\n\thashicorpVaultEndpoint?: string;\n\n\t/**\n\t * The type of logging task connector, can be a comma separated list: console, entity-storage.\n\t */\n\tloggingConnector?: string;\n\n\t/**\n\t * The type of event bus connector: local.\n\t */\n\teventBusConnector?: string;\n\n\t/**\n\t * The type of event bus component: service.\n\t */\n\teventBusComponent?: string;\n\n\t/**\n\t * Are the messaging components enabled, defaults to false.\n\t */\n\tmessagingEnabled?: string;\n\n\t/**\n\t * AWS SES region.\n\t */\n\tawsSesRegion?: string;\n\n\t/**\n\t * AWS SES auth mode, either credentials or pod, defaults to credentials.\n\t */\n\tawsSesAuthMode?: string;\n\n\t/**\n\t * AWS SES secret access key.\n\t */\n\tawsSesSecretAccessKey?: string;\n\n\t/**\n\t * AWS SES access key id.\n\t */\n\tawsSesAccessKeyId?: string;\n\n\t/**\n\t * AWS SES endpoint.\n\t */\n\tawsSesEndpoint?: string;\n\n\t/**\n\t * The applications for the push notifications reference a separate json with @json: prefix.\n\t */\n\tawsMessagingPushNotificationApplications?: string;\n\n\t/**\n\t * The type of messaging email connector: entity-storage, aws.\n\t */\n\tmessagingEmailConnector?: string;\n\n\t/**\n\t * The type of messaging sms connector: entity-storage, aws.\n\t */\n\tmessagingSmsConnector?: string;\n\n\t/**\n\t * The type of messaging push notification connector: entity-storage, aws.\n\t */\n\tmessagingPushNotificationConnector?: string;\n\n\t/**\n\t * The type of telemetry connector: entity-storage.\n\t */\n\ttelemetryConnector?: string;\n\n\t/**\n\t * The name of the Open Telemetry meter to use, only required if using open-telemetry as telemetry connector, defaults to twin-node.\n\t */\n\topenTelemetryMeterName?: string;\n\n\t/**\n\t * The version of the Open Telemetry metrics specification to use, only required if using open-telemetry as telemetry connector, defaults to 1.0.0.\n\t */\n\topenTelemetryMeterVersion?: string;\n\n\t/**\n\t * The type of Open Telemetry metric reader to use, only required if using open-telemetry as telemetry connector, values: prometheus.\n\t */\n\topenTelemetryReader?: string;\n\n\t/**\n\t * The port to use for the Open Telemetry Prometheus metrics server, only required if using open-telemetry as telemetry connector and prometheus as reader, defaults to 9464.\n\t */\n\topenTelemetryPrometheusPort?: string;\n\n\t/**\n\t * Polling interval in seconds for the telemetry metrics collector. Defaults to 60.\n\t */\n\ttelemetryMetricsCollectorIntervalSeconds?: string;\n\n\t/**\n\t * The type of telemetry metrics producers, can be a comma separated list: system, process.\n\t */\n\ttelemetryMetricsProducers?: string;\n\n\t/**\n\t * Maximum number of values retained per telemetry metric (count-based history cap). Defaults to 1440.\n\t */\n\ttelemetryMetricsProducerMaxHistory?: string;\n\n\t/**\n\t * The type of faucet connector: entity-storage, iota.\n\t */\n\tfaucetConnector?: string;\n\n\t/**\n\t * The type of wallet connector: entity-storage, iota.\n\t */\n\twalletConnector?: string;\n\n\t/**\n\t * The type of NFT connector: entity-storage, iota.\n\t */\n\tnftConnector?: string;\n\n\t/**\n\t * The type of notarization connector: entity-storage, iota.\n\t */\n\tnotarizationConnector?: string;\n\n\t/**\n\t * The type of identity connector: entity-storage, iota.\n\t */\n\tidentityConnector?: string;\n\n\t/**\n\t * The index of the wallet address to use, defaults to 0.\n\t */\n\tidentityWalletAddressIndex?: string;\n\n\t/**\n\t * The type of identity resolver connector: entity-storage, iota.\n\t */\n\tidentityResolverConnector?: string;\n\n\t/**\n\t * The type of verifiable storage connector: entity-storage, iota.\n\t */\n\tverifiableStorageConnector?: string;\n\n\t/**\n\t * IOTA Faucet Endpoint.\n\t */\n\tiotaFaucetEndpoint?: string;\n\n\t/**\n\t * IOTA Node Endpoint.\n\t */\n\tiotaNodeEndpoint?: string;\n\n\t/**\n\t * IOTA network.\n\t */\n\tiotaNetwork?: string;\n\n\t/**\n\t * IOTA coin type.\n\t */\n\tiotaCoinType?: string;\n\n\t/**\n\t * IOTA Explorer Endpoint.\n\t */\n\tiotaExplorerEndpoint?: string;\n\n\t/**\n\t * IOTA Gas Station Endpoint.\n\t */\n\tiotaGasStationEndpoint?: string;\n\n\t/**\n\t * IOTA Gas Station Authentication Token.\n\t */\n\tiotaGasStationAuthToken?: string;\n\n\t/**\n\t * Universal Resolver Endpoint.\n\t */\n\tuniversalResolverEndpoint?: string;\n\n\t/**\n\t * The type of identity profile connector: entity-storage.\n\t */\n\tidentityProfileConnector?: string;\n\n\t/**\n\t * The identity verification method id to use with immutable proofs.\n\t */\n\timmutableProofVerificationMethodId?: string;\n\n\t/**\n\t * The type of attestation connector: entity-storage, iota.\n\t */\n\tattestationConnector?: string;\n\n\t/**\n\t * The identity verification method id to use with attestation.\n\t */\n\tattestationVerificationMethodId?: string;\n\n\t/**\n\t * Is the data processing enabled, defaults to false.\n\t */\n\tdataProcessingEnabled?: string;\n\n\t/**\n\t * The type of the default data converters, can be a comma separated list: json, xml.\n\t */\n\tdataConverterConnectors?: string;\n\n\t/**\n\t * The type of the default data extractor, can be a comma separated list: json-path.\n\t */\n\tdataExtractorConnectors?: string;\n\n\t/**\n\t * Is the auditable item graph enabled, defaults to false.\n\t */\n\tauditableItemGraphEnabled?: string;\n\n\t/**\n\t * Is the auditable item stream enabled, defaults to false.\n\t */\n\tauditableItemStreamEnabled?: string;\n\n\t/**\n\t * Is the document management enabled, defaults to false.\n\t */\n\tdocumentManagementEnabled?: string;\n\n\t/**\n\t * Is the synchronised storage enabled, defaults to false.\n\t */\n\tsynchronisedStorageEnabled?: string;\n\n\t/**\n\t * Url which points to the api for a trusted synchronised storage node, not required if this is a trusted node.\n\t */\n\tsynchronisedStorageTrustedUrl?: string;\n\n\t/**\n\t * The key for the smart contract which contains the verifiable storage pointer store for synchronised storage.\n\t * This only required if using a custom verifiable storage item, otherwise it will default to the network name.\n\t */\n\tsynchronisedStorageVerifiableStorageKeyId?: string;\n\n\t/**\n\t * The key from the vault which is used to encrypt the synchronised storage blobs.\n\t * Only required for trusted nodes, as regular nodes will request from the trusted nodes.\n\t * Defaults to synchronised-storage-blob-encryption\n\t */\n\tsynchronisedStorageBlobStorageEncryptionKeyId?: string;\n\n\t/**\n\t * The key used for blob encryption, should be ChaCha20Poly1305 encoded as base64.\n\t * Only required for trusted nodes, as regular nodes will not write encrypted data.\n\t */\n\tsynchronisedStorageBlobStorageKey?: string;\n\n\t/**\n\t * How often to check for entity updates in minutes.\n\t * @default 5\n\t */\n\tsynchronisedStorageEntityUpdateIntervalMinutes?: string;\n\n\t/**\n\t * Interval to perform consolidation of changesets, only used if this is a trusted node.\n\t * @default 60\n\t */\n\tsynchronisedStorageConsolidationIntervalMinutes?: string;\n\n\t/**\n\t * The number of entities to process in a single consolidation batch, only used if this is a trusted node.\n\t * @default 1000\n\t */\n\tsynchronisedStorageConsolidationBatchSize?: string;\n\n\t/**\n\t * The maximum number of consolidations to keep in storage, only used if this is a trusted node.\n\t * @default 5\n\t */\n\tsynchronisedStorageMaxConsolidations?: string;\n\n\t/**\n\t * Federated catalog filters, command separated list of filters to add.\n\t */\n\tfederatedCatalogueFilters?: string;\n\n\t/**\n\t * The trust generators to add to the factory, comma separated list.\n\t */\n\ttrustGenerators?: string;\n\n\t/**\n\t * The trust verifiers to add to the factory, comma separated list.\n\t */\n\ttrustVerifiers?: string;\n\n\t/**\n\t * The verification method to use for trust identities.\n\t * Defaults to trust-assertion.\n\t */\n\ttrustVerificationMethodId?: string;\n\n\t/**\n\t * The trust time to live for generating JWTs.\n\t * Defaults to undefined for never expiring.\n\t */\n\ttrustJwtTtlSeconds?: string;\n\n\t/**\n\t * Path under which the rights management service is mounted (single source\n\t * of truth). The same value drives:\n\t * - the server route mount (via engine config)\n\t * - the PNP service's callback URL builder (`buildCallbackUrl`)\n\t * - the PNP rest-client's pathPrefix (consumer side)\n\t * Defaults to `rights-management`. Set when deploying behind a reverse proxy\n\t * with path rewriting, K8s ingress with path-based routing, or any custom\n\t * mount point.\n\t */\n\trightsManagementCallbackPath?: string;\n\n\t/**\n\t * The rights management policy information sources to add to the factory.\n\t */\n\trightsManagementPolicyInformationSources?: string;\n\n\t/**\n\t * The rights management policy negotiators sources to add to the factory.\n\t */\n\trightsManagementPolicyNegotiators?: string;\n\n\t/**\n\t * The rights management policy requesters to add to the factory.\n\t */\n\trightsManagementPolicyRequesters?: string;\n\n\t/**\n\t * The rights management policy execution actions to add to the factory.\n\t */\n\trightsManagementPolicyExecutionActions?: string;\n\n\t/**\n\t * The rights management policy enforcement processors to add to the factory.\n\t */\n\trightsManagementPolicyEnforcementProcessors?: string;\n\n\t/**\n\t * The rights management policy arbiters to add to the factory.\n\t */\n\trightsManagementPolicyArbiters?: string;\n\n\t/**\n\t * The rights management policy obligation enforcers to add to the factory.\n\t */\n\trightsManagementPolicyObligationEnforcers?: string;\n\n\t/**\n\t * Is the dataspace enabled, defaults to false.\n\t */\n\tdataspaceEnabled?: string;\n\n\t/**\n\t * The length of time to retain the activity logs for in minutes, set to -1 to keep forever.\n\t * @default 10\n\t */\n\tdataspaceRetainActivityLogsFor?: string;\n\n\t/**\n\t * The interval for cleaning up the activity logs.\n\t * @default 60\n\t */\n\tdataspaceActivityLogsCleanUpInterval?: string;\n\n\t/**\n\t * The data plane path for PULL transfers (path only, not full URL).\n\t * Will be combined with public origin from hosting component.\n\t * Required if PULL transfers should be supported.\n\t * Example: \"dataspace/entities\"\n\t */\n\tdataspaceDataPlanePath?: string;\n\n\t/**\n\t * Are the health components enabled, defaults to false.\n\t */\n\thealthEnabled?: string;\n\n\t/**\n\t * The interval in seconds for performing health checks, defaults to 60.\n\t */\n\thealthIntervalSeconds?: string;\n\n\t/**\n\t * The id of the key in the vault to use for encrypting parameters in url transformer.\n\t */\n\turlTransformerEncryptionKeyId?: string;\n\n\t/**\n\t * The type of the automation action to create, comma separate for more than one connector.\n\t * values: fetch\n\t */\n\tautomationActionTypes?: string;\n\n\t/**\n\t * A comma separated list of additional node extensions to load, the initialiseExtension method will be called for each extension.\n\t */\n\textensions?: string;\n}\n"]}
1
+ {"version":3,"file":"IEngineEnvironmentVariables.js","sourceRoot":"","sources":["../../../src/models/IEngineEnvironmentVariables.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * The engine core environment variables.\n */\nexport interface IEngineEnvironmentVariables {\n\t/**\n\t * Start the engine in debug mode.\n\t */\n\tdebug?: string;\n\n\t/**\n\t * Start the engine in silent mode.\n\t */\n\tsilent?: string;\n\n\t/**\n\t * The root directory for storing items like state file.\n\t */\n\tstorageFileRoot?: string;\n\n\t/**\n\t * The name of the state file.\n\t */\n\tstateFilename?: string;\n\n\t/**\n\t * Does the node have a unique ID, defaults to true.\n\t */\n\tnodeIdentityEnabled?: string;\n\n\t/**\n\t * Is multi-tenant support enabled, defaults to false.\n\t */\n\ttenantEnabled?: string;\n\n\t/**\n\t * The type of the entity storage to create, comma separate for more than one connector.\n\t * values: file, memory, aws-dynamodb, azure-cosmosdb, gcp-firestoredb, scylladb, mysql, mongodb, postgresql\n\t */\n\tentityStorageConnectorType?: string;\n\n\t/**\n\t * The default entity storage connector to use, defaults to the first one in the list.\n\t */\n\tentityStorageConnectorDefault?: string;\n\n\t/**\n\t * A prefix for all the table in entity-storage, can be empty.\n\t */\n\tentityStorageTablePrefix?: string;\n\n\t/**\n\t * AWS DynamoDB auth mode, either credentials or pod.\n\t */\n\tawsDynamodbAuthMode?: string;\n\n\t/**\n\t * AWS Dynamo DB access key id.\n\t */\n\tawsDynamodbAccessKeyId?: string;\n\n\t/**\n\t * AWS Dynamo DB Endpoint if running local instance.\n\t */\n\tawsDynamodbEndpoint?: string;\n\n\t/**\n\t * AWS Dynamo DB region.\n\t */\n\tawsDynamodbRegion?: string;\n\n\t/**\n\t * AWS Dynamo DB secret access key.\n\t */\n\tawsDynamodbSecretAccessKey?: string;\n\n\t/**\n\t * AWS Dynamo DB connection timeout.\n\t */\n\tawsDynamodbConnectionTimeoutMs?: string;\n\n\t/**\n\t * Azure Cosmos DB key.\n\t */\n\tazureCosmosdbKey?: string;\n\n\t/**\n\t * Azure Cosmos DB container id.\n\t */\n\tazureCosmosdbContainerId?: string;\n\n\t/**\n\t * Azure Cosmos DB database id.\n\t */\n\tazureCosmosdbDatabaseId?: string;\n\n\t/**\n\t * Azure Cosmos DB endpoint.\n\t */\n\tazureCosmosdbEndpoint?: string;\n\n\t/**\n\t * GCP Firestore collection name.\n\t */\n\tgcpFirestoreCollectionName?: string;\n\n\t/**\n\t * GCP Firestore credentials.\n\t */\n\tgcpFirestoreCredentials?: string;\n\n\t/**\n\t * GCP Firestore database id.\n\t */\n\tgcpFirestoreDatabaseId?: string;\n\n\t/**\n\t * GCP Firestore endpoint.\n\t */\n\tgcpFirestoreApiEndpoint?: string;\n\n\t/**\n\t * GCP Firestore project id.\n\t */\n\tgcpFirestoreProjectId?: string;\n\n\t/**\n\t * ScyllaDB hosts as comma separated string.\n\t */\n\tscylladbHosts?: string;\n\n\t/**\n\t * ScyllaDB keyspace.\n\t */\n\tscylladbKeyspace?: string;\n\n\t/**\n\t * ScyllaDB local data center.\n\t */\n\tscylladbLocalDataCenter?: string;\n\n\t/**\n\t * ScyllaDB port.\n\t */\n\tscylladbPort?: string;\n\n\t/**\n\t * MySQL host.\n\t */\n\tmySqlHost?: string;\n\n\t/**\n\t * MySQL port.\n\t */\n\tmySqlPort?: number;\n\n\t/**\n\t * MySQL username.\n\t */\n\tmySqlUser?: string;\n\n\t/**\n\t * MySQL password.\n\t */\n\tmySqlPassword?: string;\n\n\t/**\n\t * MySQL Database.\n\t */\n\tmySqlDatabase?: string;\n\n\t/**\n\t * MongoDB host.\n\t */\n\tmongoDbHost?: string;\n\n\t/**\n\t * MongoDB port.\n\t */\n\tmongoDbPort?: number;\n\n\t/**\n\t * MongoDB username.\n\t */\n\tmongoDbUser?: string;\n\n\t/**\n\t * MongoDB password.\n\t */\n\tmongoDbPassword?: string;\n\n\t/**\n\t * MongoDB Database.\n\t */\n\tmongoDbDatabase?: string;\n\n\t/**\n\t * PostgreSQl host.\n\t */\n\tpostgreSqlHost?: string;\n\n\t/**\n\t * PostgreSQl port.\n\t */\n\tpostgreSqlPort?: number;\n\n\t/**\n\t * PostgreSQl username.\n\t */\n\tpostgreSqlUser?: string;\n\n\t/**\n\t * PostgreSQl password.\n\t */\n\tpostgreSqlPassword?: string;\n\n\t/**\n\t * PostgreSQl Database.\n\t */\n\tpostgreSqlDatabase?: string;\n\n\t/**\n\t * The security token for accessing IPFS API.\n\t */\n\tipfsBearerToken?: string;\n\n\t/**\n\t * The url for accessing IPFS API.\n\t */\n\tipfsApiUrl?: string;\n\n\t/**\n\t * The type of the entity storage to create, comma separate for more than one connector.\n\t * values: memory, file, ipfs, aws-s3, azure-storage, gcp-storage.\n\t */\n\tblobStorageConnectorType?: string;\n\n\t/**\n\t * The default blob storage connector to use, defaults to the first one in the list.\n\t */\n\tblobStorageConnectorDefault?: string;\n\n\t/**\n\t * Blog storage connector which has public access.\n\t */\n\tblobStorageConnectorPublic?: string;\n\n\t/**\n\t * Enable encryption for the blob storage.\n\t */\n\tblobStorageEnableEncryption?: string;\n\n\t/**\n\t * The id of the encryption key for the blob storage.\n\t */\n\tblobStorageEncryptionKeyId?: string;\n\n\t/**\n\t * A prefix for all the blobs in blob-storage, can be empty.\n\t */\n\tblobStoragePrefix?: string;\n\n\t/**\n\t * AWS S3 region.\n\t */\n\tawsS3Region?: string;\n\n\t/**\n\t * AWS S3 bucket name.\n\t */\n\tawsS3BucketName?: string;\n\n\t/**\n\t * AWS S3 auth mode, either credentials or pod, defaults to credentials.\n\t */\n\tawsS3AuthMode?: string;\n\n\t/**\n\t * AWS S3 access key id.\n\t */\n\tawsS3AccessKeyId?: string;\n\n\t/**\n\t * AWS S3 secret access key.\n\t */\n\tawsS3SecretAccessKey?: string;\n\n\t/**\n\t * AWS S3 endpoint.\n\t */\n\tawsS3Endpoint?: string;\n\n\t/**\n\t * Azure Storage account key.\n\t */\n\tazureStorageAccountKey?: string;\n\n\t/**\n\t * Azure Storage account name.\n\t */\n\tazureStorageAccountName?: string;\n\n\t/**\n\t * Azure Storage container.\n\t */\n\tazureStorageContainerName?: string;\n\n\t/**\n\t * Azure Storage endpoint.\n\t */\n\tazureStorageEndpoint?: string;\n\n\t/**\n\t * GCP Storage bucket.\n\t */\n\tgcpStorageBucketName?: string;\n\n\t/**\n\t * GCP Storage credentials.\n\t */\n\tgcpStorageCredentials?: string;\n\n\t/**\n\t * GCP Storage endpoint.\n\t */\n\tgcpStorageEndpoint?: string;\n\n\t/**\n\t * GCP Storage project id.\n\t */\n\tgcpStorageProjectId?: string;\n\n\t/**\n\t * The type of the default vault connector: entity-storage, hashicorp.\n\t */\n\tvaultConnector?: string;\n\n\t/**\n\t * Prefix to prepend to entries in the vault.\n\t */\n\tvaultPrefix?: string;\n\n\t/**\n\t * Hashicorp Vault token.\n\t */\n\thashicorpVaultToken?: string;\n\n\t/**\n\t * Hashicorp Vault endpoint.\n\t */\n\thashicorpVaultEndpoint?: string;\n\n\t/**\n\t * The type of logging task connector, can be a comma separated list: console, entity-storage.\n\t */\n\tloggingConnector?: string;\n\n\t/**\n\t * The type of event bus connector: local.\n\t */\n\teventBusConnector?: string;\n\n\t/**\n\t * The type of event bus component: service.\n\t */\n\teventBusComponent?: string;\n\n\t/**\n\t * Are the messaging components enabled, defaults to false.\n\t */\n\tmessagingEnabled?: string;\n\n\t/**\n\t * AWS SES region.\n\t */\n\tawsSesRegion?: string;\n\n\t/**\n\t * AWS SES auth mode, either credentials or pod, defaults to credentials.\n\t */\n\tawsSesAuthMode?: string;\n\n\t/**\n\t * AWS SES secret access key.\n\t */\n\tawsSesSecretAccessKey?: string;\n\n\t/**\n\t * AWS SES access key id.\n\t */\n\tawsSesAccessKeyId?: string;\n\n\t/**\n\t * AWS SES endpoint.\n\t */\n\tawsSesEndpoint?: string;\n\n\t/**\n\t * The applications for the push notifications reference a separate json with @json: prefix.\n\t */\n\tawsMessagingPushNotificationApplications?: string;\n\n\t/**\n\t * The type of messaging email connector: entity-storage, aws.\n\t */\n\tmessagingEmailConnector?: string;\n\n\t/**\n\t * The type of messaging sms connector: entity-storage, aws.\n\t */\n\tmessagingSmsConnector?: string;\n\n\t/**\n\t * The type of messaging push notification connector: entity-storage, aws.\n\t */\n\tmessagingPushNotificationConnector?: string;\n\n\t/**\n\t * The type of telemetry connector: entity-storage.\n\t */\n\ttelemetryConnector?: string;\n\n\t/**\n\t * The name of the Open Telemetry meter to use, only required if using open-telemetry as telemetry connector, defaults to twin-node.\n\t */\n\topenTelemetryMeterName?: string;\n\n\t/**\n\t * The version of the Open Telemetry metrics specification to use, only required if using open-telemetry as telemetry connector, defaults to 1.0.0.\n\t */\n\topenTelemetryMeterVersion?: string;\n\n\t/**\n\t * The type of Open Telemetry metric reader to use, only required if using open-telemetry as telemetry connector, values: prometheus.\n\t */\n\topenTelemetryReader?: string;\n\n\t/**\n\t * The port to use for the Open Telemetry Prometheus metrics server, only required if using open-telemetry as telemetry connector and prometheus as reader, defaults to 9464.\n\t */\n\topenTelemetryPrometheusPort?: string;\n\n\t/**\n\t * Polling interval in seconds for the telemetry metrics collector. Defaults to 60.\n\t */\n\ttelemetryMetricsCollectorIntervalSeconds?: string;\n\n\t/**\n\t * The type of telemetry metrics producers, can be a comma separated list: system, process.\n\t */\n\ttelemetryMetricsProducers?: string;\n\n\t/**\n\t * Maximum number of values retained per telemetry metric (count-based history cap). Defaults to 1440.\n\t */\n\ttelemetryMetricsProducerMaxHistory?: string;\n\n\t/**\n\t * The type of faucet connector: entity-storage, iota.\n\t */\n\tfaucetConnector?: string;\n\n\t/**\n\t * The type of wallet connector: entity-storage, iota.\n\t */\n\twalletConnector?: string;\n\n\t/**\n\t * The type of NFT connector: entity-storage, iota.\n\t */\n\tnftConnector?: string;\n\n\t/**\n\t * The type of notarization connector: entity-storage, iota.\n\t */\n\tnotarizationConnector?: string;\n\n\t/**\n\t * The type of identity connector: entity-storage, iota.\n\t */\n\tidentityConnector?: string;\n\n\t/**\n\t * The index of the wallet address to use, defaults to 0.\n\t */\n\tidentityWalletAddressIndex?: string;\n\n\t/**\n\t * The type of identity resolver connector: entity-storage, iota.\n\t */\n\tidentityResolverConnector?: string;\n\n\t/**\n\t * The type of verifiable storage connector: entity-storage, iota.\n\t */\n\tverifiableStorageConnector?: string;\n\n\t/**\n\t * IOTA Faucet Endpoint.\n\t */\n\tiotaFaucetEndpoint?: string;\n\n\t/**\n\t * IOTA Node Endpoint.\n\t */\n\tiotaNodeEndpoint?: string;\n\n\t/**\n\t * IOTA network.\n\t */\n\tiotaNetwork?: string;\n\n\t/**\n\t * IOTA coin type.\n\t */\n\tiotaCoinType?: string;\n\n\t/**\n\t * IOTA Explorer Endpoint.\n\t */\n\tiotaExplorerEndpoint?: string;\n\n\t/**\n\t * IOTA Gas Station Endpoint.\n\t */\n\tiotaGasStationEndpoint?: string;\n\n\t/**\n\t * IOTA Gas Station Authentication Token.\n\t */\n\tiotaGasStationAuthToken?: string;\n\n\t/**\n\t * Universal Resolver Endpoint.\n\t */\n\tuniversalResolverEndpoint?: string;\n\n\t/**\n\t * The type of identity profile connector: entity-storage.\n\t */\n\tidentityProfileConnector?: string;\n\n\t/**\n\t * The identity verification method id to use with immutable proofs.\n\t */\n\timmutableProofVerificationMethodId?: string;\n\n\t/**\n\t * The type of attestation connector: entity-storage, iota.\n\t */\n\tattestationConnector?: string;\n\n\t/**\n\t * The identity verification method id to use with attestation.\n\t */\n\tattestationVerificationMethodId?: string;\n\n\t/**\n\t * Is the data processing enabled, defaults to false.\n\t */\n\tdataProcessingEnabled?: string;\n\n\t/**\n\t * The type of the default data converters, can be a comma separated list: json, xml.\n\t */\n\tdataConverterConnectors?: string;\n\n\t/**\n\t * The type of the default data extractor, can be a comma separated list: json-path.\n\t */\n\tdataExtractorConnectors?: string;\n\n\t/**\n\t * Is the auditable item graph enabled, defaults to false.\n\t */\n\tauditableItemGraphEnabled?: string;\n\n\t/**\n\t * Is the auditable item stream enabled, defaults to false.\n\t */\n\tauditableItemStreamEnabled?: string;\n\n\t/**\n\t * Is the document management enabled, defaults to false.\n\t */\n\tdocumentManagementEnabled?: string;\n\n\t/**\n\t * Is the synchronised storage enabled, defaults to false.\n\t */\n\tsynchronisedStorageEnabled?: string;\n\n\t/**\n\t * Url which points to the api for a trusted synchronised storage node, not required if this is a trusted node.\n\t */\n\tsynchronisedStorageTrustedUrl?: string;\n\n\t/**\n\t * The key for the smart contract which contains the verifiable storage pointer store for synchronised storage.\n\t * This only required if using a custom verifiable storage item, otherwise it will default to the network name.\n\t */\n\tsynchronisedStorageVerifiableStorageKeyId?: string;\n\n\t/**\n\t * The key from the vault which is used to encrypt the synchronised storage blobs.\n\t * Only required for trusted nodes, as regular nodes will request from the trusted nodes.\n\t * Defaults to synchronised-storage-blob-encryption\n\t */\n\tsynchronisedStorageBlobStorageEncryptionKeyId?: string;\n\n\t/**\n\t * The key used for blob encryption, should be ChaCha20Poly1305 encoded as base64.\n\t * Only required for trusted nodes, as regular nodes will not write encrypted data.\n\t */\n\tsynchronisedStorageBlobStorageKey?: string;\n\n\t/**\n\t * How often to check for entity updates in minutes.\n\t * @default 5\n\t */\n\tsynchronisedStorageEntityUpdateIntervalMinutes?: string;\n\n\t/**\n\t * Interval to perform consolidation of changesets, only used if this is a trusted node.\n\t * @default 60\n\t */\n\tsynchronisedStorageConsolidationIntervalMinutes?: string;\n\n\t/**\n\t * The number of entities to process in a single consolidation batch, only used if this is a trusted node.\n\t * @default 1000\n\t */\n\tsynchronisedStorageConsolidationBatchSize?: string;\n\n\t/**\n\t * The maximum number of consolidations to keep in storage, only used if this is a trusted node.\n\t * @default 5\n\t */\n\tsynchronisedStorageMaxConsolidations?: string;\n\n\t/**\n\t * Federated catalog filters, command separated list of filters to add.\n\t */\n\tfederatedCatalogueFilters?: string;\n\n\t/**\n\t * The trust generators to add to the factory, comma separated list.\n\t */\n\ttrustGenerators?: string;\n\n\t/**\n\t * The trust verifiers to add to the factory, comma separated list.\n\t */\n\ttrustVerifiers?: string;\n\n\t/**\n\t * The verification method to use for trust identities.\n\t * Defaults to trust-assertion.\n\t */\n\ttrustVerificationMethodId?: string;\n\n\t/**\n\t * The trust time to live for generating JWTs.\n\t * Defaults to undefined for never expiring.\n\t */\n\ttrustJwtTtlSeconds?: string;\n\n\t/**\n\t * Path under which the rights management service is mounted (single source\n\t * of truth). The same value drives:\n\t * - the server route mount (via engine config)\n\t * - the PNP service's callback URL builder (`buildCallbackUrl`)\n\t * - the PNP rest-client's pathPrefix (consumer side)\n\t * Defaults to `rights-management`. Set when deploying behind a reverse proxy\n\t * with path rewriting, K8s ingress with path-based routing, or any custom\n\t * mount point.\n\t */\n\trightsManagementCallbackPath?: string;\n\n\t/**\n\t * The rights management policy information sources to add to the factory.\n\t */\n\trightsManagementPolicyInformationSources?: string;\n\n\t/**\n\t * The rights management policy negotiators sources to add to the factory.\n\t */\n\trightsManagementPolicyNegotiators?: string;\n\n\t/**\n\t * The rights management policy requesters to add to the factory.\n\t */\n\trightsManagementPolicyRequesters?: string;\n\n\t/**\n\t * The rights management policy execution actions to add to the factory.\n\t */\n\trightsManagementPolicyExecutionActions?: string;\n\n\t/**\n\t * The rights management policy enforcement processors to add to the factory.\n\t */\n\trightsManagementPolicyEnforcementProcessors?: string;\n\n\t/**\n\t * The rights management policy arbiters to add to the factory.\n\t */\n\trightsManagementPolicyArbiters?: string;\n\n\t/**\n\t * The rights management policy obligation enforcers to add to the factory.\n\t */\n\trightsManagementPolicyObligationEnforcers?: string;\n\n\t/**\n\t * Is the dataspace enabled, defaults to false.\n\t */\n\tdataspaceEnabled?: string;\n\n\t/**\n\t * The length of time to retain the activity logs for in minutes, set to -1 to keep forever.\n\t * @default 10\n\t */\n\tdataspaceRetainActivityLogsFor?: string;\n\n\t/**\n\t * The interval for cleaning up the activity logs.\n\t * @default 60\n\t */\n\tdataspaceActivityLogsCleanUpInterval?: string;\n\n\t/**\n\t * The data plane path for PULL transfers (path only, not full URL).\n\t * Will be combined with public origin from hosting component.\n\t * Required if PULL transfers should be supported.\n\t * Example: \"dataspace/entities\"\n\t */\n\tdataspaceDataPlanePath?: string;\n\n\t/**\n\t * Are the health components enabled, defaults to false.\n\t */\n\thealthEnabled?: string;\n\n\t/**\n\t * The interval in seconds for performing health checks, defaults to 60.\n\t */\n\thealthIntervalSeconds?: string;\n\n\t/**\n\t * The interval in seconds for performing health checks at startup, defaults to 2.\n\t * This allows components that take a long time to initialize to be healthy before the first health check is performed.\n\t */\n\thealthStartupIntervalSeconds?: string;\n\n\t/**\n\t * The id of the key in the vault to use for encrypting parameters in url transformer.\n\t */\n\turlTransformerEncryptionKeyId?: string;\n\n\t/**\n\t * The type of the automation action to create, comma separate for more than one connector.\n\t * values: fetch\n\t */\n\tautomationActionTypes?: string;\n\n\t/**\n\t * A comma separated list of additional node extensions to load, the initialiseExtension method will be called for each extension.\n\t */\n\textensions?: string;\n}\n"]}
package/dist/es/node.js CHANGED
@@ -3,7 +3,7 @@
3
3
  import { execSync } from "node:child_process";
4
4
  import path from "node:path";
5
5
  import { CLIDisplay } from "@twin.org/cli-core";
6
- import { BaseError, Coerce, EnvHelper, GeneralError, Is, ObjectHelper } from "@twin.org/core";
6
+ import { Coerce, EnvHelper, GeneralError, Is } from "@twin.org/core";
7
7
  import { ModuleHelper } from "@twin.org/modules";
8
8
  import * as dotenv from "dotenv";
9
9
  import { buildEngineConfiguration } from "./builders/engineEnvBuilder.js";
@@ -24,11 +24,12 @@ let npmRootCache;
24
24
  */
25
25
  export async function run(nodeOptions, args) {
26
26
  let showErrorDetails = true;
27
+ let debugEnabled = true;
27
28
  try {
28
29
  nodeOptions ??= {};
29
30
  const serverInfo = {
30
31
  name: nodeOptions?.serverName ?? "TWIN Node",
31
- version: nodeOptions?.serverVersion ?? "0.0.3-next.39" // x-release-please-version
32
+ version: nodeOptions?.serverVersion ?? "0.0.3-next.40" // x-release-please-version
32
33
  };
33
34
  CLIDisplay.header(serverInfo.name, serverInfo.version, "đŸŒŠī¸ ");
34
35
  if (!Is.stringValue(nodeOptions?.executionDirectory)) {
@@ -98,6 +99,7 @@ export async function run(nodeOptions, args) {
98
99
  }
99
100
  }
100
101
  const { nodeEngineConfig, nodeEnvVars, availableContextIdKeys } = await buildConfiguration(finalEnvVars, nodeOptions, serverInfo);
102
+ debugEnabled = Coerce.boolean(nodeEnvVars.debug) ?? debugEnabled;
101
103
  CLIDisplay.break();
102
104
  const startResult = await start(nodeOptions, nodeEngineConfig, nodeEnvVars, cliCommand, availableContextIdKeys);
103
105
  if (!Is.empty(startResult)) {
@@ -121,11 +123,7 @@ export async function run(nodeOptions, args) {
121
123
  throw err;
122
124
  }
123
125
  if (showErrorDetails) {
124
- const baseError = BaseError.fromError(err);
125
- if (baseError.source === "node") {
126
- ObjectHelper.propertyDelete(err, "stack");
127
- }
128
- CLIDisplay.error(err);
126
+ CLIDisplay.error(err, true, { includeAdditional: true, includeStack: debugEnabled });
129
127
  }
130
128
  // eslint-disable-next-line unicorn/no-process-exit
131
129
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport type { IServerInfo } from \"@twin.org/api-models\";\nimport { CLIDisplay } from \"@twin.org/cli-core\";\nimport { BaseError, Coerce, EnvHelper, GeneralError, Is, ObjectHelper } from \"@twin.org/core\";\nimport type { Engine } from \"@twin.org/engine\";\nimport type { EngineServer } from \"@twin.org/engine-server\";\nimport type { IEngineServerConfig } from \"@twin.org/engine-server-types\";\nimport { ModuleHelper } from \"@twin.org/modules\";\nimport * as dotenv from \"dotenv\";\nimport { buildEngineConfiguration } from \"./builders/engineEnvBuilder.js\";\nimport { buildEngineServerConfiguration } from \"./builders/engineServerEnvBuilder.js\";\nimport { extensionsConfiguration } from \"./builders/extensionsBuilder.js\";\nimport { constructCliCommand, parseCommandLineArgs, registerCommands } from \"./cli.js\";\nimport { getEnvDefaults } from \"./defaults.js\";\nimport type { INodeEngineConfig } from \"./models/INodeEngineConfig.js\";\nimport type { INodeEngineState } from \"./models/INodeEngineState.js\";\nimport type { INodeEnvironmentVariables } from \"./models/INodeEnvironmentVariables.js\";\nimport type { INodeOptions } from \"./models/INodeOptions.js\";\nimport { ModuleProtocol } from \"./models/moduleProtocol.js\";\nimport { start } from \"./start.js\";\nimport {\n\tcreateModuleImportUrl,\n\tfileExists,\n\tgetExecutionDirectory,\n\tgetExtensionsCacheDir,\n\tgetScriptDirectory,\n\thandleHttpsProtocol,\n\thandleNpmProtocol,\n\tinitialiseLocales,\n\tloadJsonFile,\n\tloadTextFile,\n\tparseModuleProtocol,\n\tresolvePackageEntryPoint\n} from \"./utils.js\";\n\nconst moduleCache: { [id: string]: unknown } = {};\nlet npmRootCache: string | undefined;\n\n/**\n * Run the TWIN Node.\n * @param nodeOptions Optional configuration options for running the server.\n * @param args Optional command line arguments.\n * @returns A promise that resolves when the server is started containing a shutdown method.\n */\nexport async function run(\n\tnodeOptions?: INodeOptions,\n\targs?: string[]\n): Promise<\n\t| {\n\t\t\tengine: Engine<IEngineServerConfig, INodeEngineState>;\n\t\t\tserver: EngineServer;\n\t\t\tshutdown: () => Promise<void>;\n\t }\n\t| undefined\n> {\n\tlet showErrorDetails = true;\n\ttry {\n\t\tnodeOptions ??= {};\n\n\t\tconst serverInfo: IServerInfo = {\n\t\t\tname: nodeOptions?.serverName ?? \"TWIN Node\",\n\t\t\tversion: nodeOptions?.serverVersion ?? \"0.0.3-next.39\" // x-release-please-version\n\t\t};\n\n\t\tCLIDisplay.header(serverInfo.name, serverInfo.version, \"đŸŒŠī¸ \");\n\n\t\tif (!Is.stringValue(nodeOptions?.executionDirectory)) {\n\t\t\tnodeOptions.executionDirectory = getExecutionDirectory();\n\t\t}\n\t\tCLIDisplay.value(\"Execution Directory\", nodeOptions.executionDirectory);\n\n\t\tif (!Is.stringValue(nodeOptions?.scriptDirectory)) {\n\t\t\tnodeOptions.scriptDirectory = getScriptDirectory(args);\n\t\t}\n\t\tCLIDisplay.value(\"Script Directory\", nodeOptions.scriptDirectory);\n\n\t\tnodeOptions.localesDirectory =\n\t\t\tnodeOptions?.localesDirectory ??\n\t\t\tpath.resolve(path.join(nodeOptions.scriptDirectory, \"dist\", \"locales\"));\n\n\t\tCLIDisplay.value(\"Locales Directory\", nodeOptions.localesDirectory);\n\t\tawait initialiseLocales(nodeOptions.localesDirectory);\n\n\t\tnodeOptions.envPrefix ??= \"TWIN_\";\n\n\t\toverrideModuleImport(nodeOptions.executionDirectory ?? \"\");\n\n\t\tconst commandLineArgs = parseCommandLineArgs(args);\n\n\t\tconst hasEnvPrefix = commandLineArgs.options?.find(option => option.key === \"env-prefix\");\n\t\tif (hasEnvPrefix) {\n\t\t\tnodeOptions.envPrefix = Coerce.string(hasEnvPrefix.value) ?? nodeOptions.envPrefix;\n\t\t}\n\n\t\tCLIDisplay.value(\"Environment Variable Prefix\", nodeOptions.envPrefix);\n\n\t\t// This is the only location in the code base that should access process.env directly\n\t\t// So we can safely disable the linting rule here.\n\t\tlet finalEnvVars =\n\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\tprocess.env as {\n\t\t\t\t[id: string]: string;\n\t\t\t};\n\n\t\tif (Is.objectValue(nodeOptions?.envVars)) {\n\t\t\tfinalEnvVars = {\n\t\t\t\t...finalEnvVars,\n\t\t\t\t...nodeOptions.envVars\n\t\t\t};\n\t\t}\n\n\t\tfinalEnvVars = {\n\t\t\t...getEnvDefaults(nodeOptions.envPrefix),\n\t\t\t...finalEnvVars\n\t\t};\n\n\t\tlet cliCommand;\n\t\tif (Is.arrayValue(commandLineArgs.options)) {\n\t\t\tregisterCommands();\n\t\t\tcliCommand = constructCliCommand(finalEnvVars, commandLineArgs);\n\t\t}\n\n\t\tif (Is.object(cliCommand)) {\n\t\t\tfinalEnvVars[`${nodeOptions.envPrefix}SILENT`] ??= \"true\";\n\t\t} else {\n\t\t\tif (Is.empty(nodeOptions?.openApiSpecFile)) {\n\t\t\t\tconst specFile = path.resolve(\n\t\t\t\t\tpath.join(nodeOptions.scriptDirectory ?? \"\", \"docs\", \"open-api\", \"spec.json\")\n\t\t\t\t);\n\t\t\t\tif (await fileExists(specFile)) {\n\t\t\t\t\tnodeOptions ??= {};\n\t\t\t\t\tnodeOptions.openApiSpecFile = specFile;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.stringValue(nodeOptions.openApiSpecFile)) {\n\t\t\t\tCLIDisplay.value(\"OpenAPI Spec File\", nodeOptions.openApiSpecFile);\n\t\t\t}\n\n\t\t\tif (Is.empty(nodeOptions?.favIconFile)) {\n\t\t\t\tconst favIconFile = path.resolve(\n\t\t\t\t\tpath.join(nodeOptions.scriptDirectory ?? \"\", \"static\", \"favicon.png\")\n\t\t\t\t);\n\t\t\t\tif (await fileExists(favIconFile)) {\n\t\t\t\t\tnodeOptions ??= {};\n\t\t\t\t\tnodeOptions.favIconFile = favIconFile;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.stringValue(nodeOptions.favIconFile)) {\n\t\t\t\tCLIDisplay.value(\"Favicon File\", nodeOptions.favIconFile);\n\t\t\t}\n\t\t}\n\n\t\tconst { nodeEngineConfig, nodeEnvVars, availableContextIdKeys } = await buildConfiguration(\n\t\t\tfinalEnvVars,\n\t\t\tnodeOptions,\n\t\t\tserverInfo\n\t\t);\n\n\t\tCLIDisplay.break();\n\n\t\tconst startResult = await start(\n\t\t\tnodeOptions,\n\t\t\tnodeEngineConfig,\n\t\t\tnodeEnvVars,\n\t\t\tcliCommand,\n\t\t\tavailableContextIdKeys\n\t\t);\n\n\t\tif (!Is.empty(startResult)) {\n\t\t\tshowErrorDetails = false;\n\n\t\t\tlet isShuttingDown = false;\n\t\t\tfor (const signal of [\"SIGHUP\", \"SIGINT\", \"SIGTERM\"]) {\n\t\t\t\tprocess.on(signal, async () => {\n\t\t\t\t\tif (!isShuttingDown) {\n\t\t\t\t\t\tisShuttingDown = true;\n\t\t\t\t\t\tCLIDisplay.value(\"Terminate Signal\", signal);\n\t\t\t\t\t\tawait startResult.shutdown();\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn startResult;\n\t} catch (err) {\n\t\tif (nodeOptions?.disableProcessExitOnFailure ?? false) {\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (showErrorDetails) {\n\t\t\tconst baseError = BaseError.fromError(err);\n\t\t\tif (baseError.source === \"node\") {\n\t\t\t\tObjectHelper.propertyDelete(err, \"stack\");\n\t\t\t}\n\t\t\tCLIDisplay.error(err);\n\t\t}\n\n\t\t// eslint-disable-next-line unicorn/no-process-exit\n\t\tprocess.exit(1);\n\t}\n}\n\n/**\n * Build the configuration for the TWIN Node.\n * @param processEnv The environment variables from the process.\n * @param options The options for running the server.\n * @param serverInfo The server information.\n * @returns A promise that resolves to the engine server configuration, environment prefix, environment variables,\n * and options.\n */\nexport async function buildConfiguration(\n\tprocessEnv: {\n\t\t[id: string]: string;\n\t},\n\toptions: INodeOptions,\n\tserverInfo: IServerInfo\n): Promise<{\n\tnodeEnvVars: INodeEnvironmentVariables & { [id: string]: string | unknown };\n\tnodeEngineConfig: INodeEngineConfig;\n\tavailableContextIdKeys: { key: string; requiredHandlerFeatures: string[] }[];\n}> {\n\tconst availableContextIdKeys: { key: string; requiredHandlerFeatures: string[] }[] = [];\n\n\tlet defaultEnvOnly = false;\n\tif (Is.empty(options?.envFilenames)) {\n\t\tconst envFile = path.resolve(path.join(options.executionDirectory ?? \"\", \".env\"));\n\t\tCLIDisplay.value(\"Default Environment File\", envFile);\n\t\toptions ??= {};\n\t\toptions.envFilenames = [envFile];\n\t\tdefaultEnvOnly = true;\n\t}\n\n\tif (Is.arrayValue(options?.envFilenames)) {\n\t\tconst output = dotenv.config({\n\t\t\tpath: options?.envFilenames,\n\t\t\tquiet: true\n\t\t});\n\n\t\t// We don't want to throw an error if the default environment file is not found.\n\t\t// Only if we have custom environment files.\n\t\tif (!defaultEnvOnly && output.error) {\n\t\t\tthrow output.error;\n\t\t}\n\n\t\tif (Is.objectValue(output.parsed)) {\n\t\t\tfor (const [key, value] of Object.entries(output.parsed)) {\n\t\t\t\t// Only set environment variables that are not already set in\n\t\t\t\t// the process environment or provided via options.envVars\n\t\t\t\tprocessEnv[key] ??= value;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst envVars = EnvHelper.envToJson<{ [id: string]: string | unknown }>(\n\t\tprocessEnv,\n\t\toptions.envPrefix ?? \"\"\n\t);\n\n\t// Expand any environment variables that use the @file: syntax\n\tconst keys = Object.keys(envVars);\n\tfor (const key of keys) {\n\t\tif (\n\t\t\tIs.stringValue(envVars[key]) &&\n\t\t\t(envVars[key].startsWith(\"@text:\") || envVars[key].startsWith(\"@json:\"))\n\t\t) {\n\t\t\tconst filePath = envVars[key].slice(6).trim();\n\t\t\tconst embeddedFile = path.resolve(path.join(options.executionDirectory ?? \"\", filePath));\n\n\t\t\tif (envVars[key].startsWith(\"@text:\")) {\n\t\t\t\tCLIDisplay.value(`Expanding Environment Variable: ${key} from text file`, embeddedFile);\n\t\t\t\tenvVars[key] = await loadTextFile(embeddedFile);\n\t\t\t} else if (envVars[key].startsWith(\"@json:\")) {\n\t\t\t\tCLIDisplay.value(`Expanding Environment Variable: ${key} from JSON file`, embeddedFile);\n\t\t\t\tenvVars[key] = await loadJsonFile(embeddedFile);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Extend the environment variables with any additional custom configuration.\n\tif (Is.function(options?.extendEnvVars)) {\n\t\tCLIDisplay.task(\"Extending Environment Variables\");\n\t\tawait options.extendEnvVars(envVars);\n\t}\n\n\t// Build the engine configuration from the environment variables.\n\tconst coreConfig = await buildEngineConfiguration(envVars, availableContextIdKeys);\n\tconst engineServerConfig = await buildEngineServerConfiguration(\n\t\tenvVars,\n\t\tavailableContextIdKeys,\n\t\tcoreConfig,\n\t\tserverInfo,\n\t\toptions?.openApiSpecFile,\n\t\toptions?.favIconFile\n\t);\n\n\t// Merge any custom configuration provided in the options.\n\tif (Is.arrayValue(options?.configFilenames)) {\n\t\tfor (const configFile of options.configFilenames) {\n\t\t\tCLIDisplay.value(\"Loading Configuration File\", configFile);\n\t\t\tconst configFilePath = path.resolve(path.join(options.executionDirectory ?? \"\", configFile));\n\t\t\tconst config = await loadJsonFile(configFilePath);\n\t\t\tObject.assign(engineServerConfig, config);\n\t\t}\n\t}\n\n\tif (Is.objectValue(options?.config)) {\n\t\tCLIDisplay.task(\"Merging Custom Configuration\");\n\t\tObject.assign(engineServerConfig, options.config);\n\t}\n\n\t// Merge any custom configuration provided in the options.\n\tif (Is.function(options?.extendConfig)) {\n\t\tCLIDisplay.task(\"Extending Configuration\");\n\t\tawait options.extendConfig(envVars, engineServerConfig);\n\t}\n\n\tconst nodeEngineConfig = await extensionsConfiguration(envVars, engineServerConfig);\n\n\treturn { nodeEngineConfig, nodeEnvVars: envVars, availableContextIdKeys };\n}\n\n/**\n * Override module imports to support protocol-based loading (npm:, https:) and local files.\n * @param executionDirectory The execution directory for resolving local module paths.\n * @param envVars The environment variables containing extension configuration (optional, uses defaults if not provided).\n */\nexport function overrideModuleImport(\n\texecutionDirectory: string,\n\tenvVars?: INodeEnvironmentVariables\n): void {\n\tconst maxSizeMb = Coerce.number(envVars?.extensionsMaxSizeMb) ?? 10;\n\tconst cacheDirectory = envVars?.extensionsCacheDirectory;\n\n\tModuleHelper.overrideImport(async moduleName => {\n\t\tif (moduleCache[moduleName]) {\n\t\t\treturn {\n\t\t\t\tmodule: moduleCache[moduleName],\n\t\t\t\tuseDefault: false\n\t\t\t};\n\t\t}\n\n\t\tconst parsed = parseModuleProtocol(moduleName);\n\t\tlet resolvedPath: string | undefined;\n\n\t\tswitch (parsed.protocol) {\n\t\t\tcase ModuleProtocol.Npm: {\n\t\t\t\tconst result = await handleNpmProtocol(\n\t\t\t\t\tparsed.identifier,\n\t\t\t\t\texecutionDirectory,\n\t\t\t\t\tcacheDirectory\n\t\t\t\t);\n\t\t\t\tresolvedPath = result.resolvedPath;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ModuleProtocol.Https: {\n\t\t\t\tconst result = await handleHttpsProtocol(\n\t\t\t\t\tparsed.identifier,\n\t\t\t\t\texecutionDirectory,\n\t\t\t\t\tmaxSizeMb,\n\t\t\t\t\tcacheDirectory,\n\t\t\t\t\tenvVars?.extensionsCacheTtlHours,\n\t\t\t\t\tenvVars?.extensionsForceRefresh\n\t\t\t\t);\n\t\t\t\tresolvedPath = result.resolvedPath;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ModuleProtocol.Http: {\n\t\t\t\tthrow new GeneralError(\"node\", \"insecureProtocol\", { protocol: ModuleProtocol.Http });\n\t\t\t}\n\n\t\t\tcase ModuleProtocol.Local: {\n\t\t\t\tlet localFilename = path.resolve(moduleName);\n\n\t\t\t\tlet exists = await fileExists(localFilename);\n\t\t\t\tif (!exists) {\n\t\t\t\t\tlocalFilename = path.resolve(executionDirectory, moduleName);\n\t\t\t\t\texists = await fileExists(localFilename);\n\t\t\t\t}\n\n\t\t\t\tif (exists) {\n\t\t\t\t\tresolvedPath = localFilename;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ModuleProtocol.Default: {\n\t\t\t\ttry {\n\t\t\t\t\tconst packagePath = path.resolve(getNpmRootPath(), moduleName);\n\t\t\t\t\tconst mainFile = await resolvePackageEntryPoint(packagePath, moduleName);\n\t\t\t\t\tconst modulePath = path.resolve(packagePath, mainFile);\n\t\t\t\t\tconst exists = await fileExists(modulePath);\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\tresolvedPath = modulePath;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Continue to fallback resolution\n\t\t\t\t}\n\n\t\t\t\t// Fallback: resolve from npm protocol cache directory (installed via handleNpmProtocol)\n\t\t\t\ttry {\n\t\t\t\t\tconst cacheNpmRoot = path.resolve(\n\t\t\t\t\t\tgetExtensionsCacheDir(executionDirectory, ModuleProtocol.Npm, cacheDirectory),\n\t\t\t\t\t\t\"node_modules\"\n\t\t\t\t\t);\n\n\t\t\t\t\tconst packagePath = path.resolve(cacheNpmRoot, moduleName);\n\t\t\t\t\tconst mainFile = await resolvePackageEntryPoint(packagePath, moduleName);\n\t\t\t\t\tconst modulePath = path.resolve(packagePath, mainFile);\n\t\t\t\t\tconst exists = await fileExists(modulePath);\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\tresolvedPath = modulePath;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// No cached resolution either; fall through\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Common module loading and caching logic\n\t\tif (resolvedPath) {\n\t\t\tconst module = await import(createModuleImportUrl(resolvedPath));\n\t\t\tmoduleCache[moduleName] = module;\n\t\t\treturn {\n\t\t\t\tmodule,\n\t\t\t\tuseDefault: false\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tmodule: undefined,\n\t\t\tuseDefault: true\n\t\t};\n\t});\n}\n\n/**\n * Get the root path for npm modules by executing \"npm root\" command and cache it.\n * @returns The root path for npm modules.\n */\nfunction getNpmRootPath(): string {\n\tnpmRootCache ??= execSync(\"npm root\").toString().trim().replace(/\\\\/g, \"/\");\n\treturn npmRootCache;\n}\n"]}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport type { IServerInfo } from \"@twin.org/api-models\";\nimport { CLIDisplay } from \"@twin.org/cli-core\";\nimport { Coerce, EnvHelper, GeneralError, Is } from \"@twin.org/core\";\nimport type { Engine } from \"@twin.org/engine\";\nimport type { EngineServer } from \"@twin.org/engine-server\";\nimport type { IEngineServerConfig } from \"@twin.org/engine-server-types\";\nimport { ModuleHelper } from \"@twin.org/modules\";\nimport * as dotenv from \"dotenv\";\nimport { buildEngineConfiguration } from \"./builders/engineEnvBuilder.js\";\nimport { buildEngineServerConfiguration } from \"./builders/engineServerEnvBuilder.js\";\nimport { extensionsConfiguration } from \"./builders/extensionsBuilder.js\";\nimport { constructCliCommand, parseCommandLineArgs, registerCommands } from \"./cli.js\";\nimport { getEnvDefaults } from \"./defaults.js\";\nimport type { INodeEngineConfig } from \"./models/INodeEngineConfig.js\";\nimport type { INodeEngineState } from \"./models/INodeEngineState.js\";\nimport type { INodeEnvironmentVariables } from \"./models/INodeEnvironmentVariables.js\";\nimport type { INodeOptions } from \"./models/INodeOptions.js\";\nimport { ModuleProtocol } from \"./models/moduleProtocol.js\";\nimport { start } from \"./start.js\";\nimport {\n\tcreateModuleImportUrl,\n\tfileExists,\n\tgetExecutionDirectory,\n\tgetExtensionsCacheDir,\n\tgetScriptDirectory,\n\thandleHttpsProtocol,\n\thandleNpmProtocol,\n\tinitialiseLocales,\n\tloadJsonFile,\n\tloadTextFile,\n\tparseModuleProtocol,\n\tresolvePackageEntryPoint\n} from \"./utils.js\";\n\nconst moduleCache: { [id: string]: unknown } = {};\nlet npmRootCache: string | undefined;\n\n/**\n * Run the TWIN Node.\n * @param nodeOptions Optional configuration options for running the server.\n * @param args Optional command line arguments.\n * @returns A promise that resolves when the server is started containing a shutdown method.\n */\nexport async function run(\n\tnodeOptions?: INodeOptions,\n\targs?: string[]\n): Promise<\n\t| {\n\t\t\tengine: Engine<IEngineServerConfig, INodeEngineState>;\n\t\t\tserver: EngineServer;\n\t\t\tshutdown: () => Promise<void>;\n\t }\n\t| undefined\n> {\n\tlet showErrorDetails = true;\n\tlet debugEnabled = true;\n\ttry {\n\t\tnodeOptions ??= {};\n\n\t\tconst serverInfo: IServerInfo = {\n\t\t\tname: nodeOptions?.serverName ?? \"TWIN Node\",\n\t\t\tversion: nodeOptions?.serverVersion ?? \"0.0.3-next.40\" // x-release-please-version\n\t\t};\n\n\t\tCLIDisplay.header(serverInfo.name, serverInfo.version, \"đŸŒŠī¸ \");\n\n\t\tif (!Is.stringValue(nodeOptions?.executionDirectory)) {\n\t\t\tnodeOptions.executionDirectory = getExecutionDirectory();\n\t\t}\n\t\tCLIDisplay.value(\"Execution Directory\", nodeOptions.executionDirectory);\n\n\t\tif (!Is.stringValue(nodeOptions?.scriptDirectory)) {\n\t\t\tnodeOptions.scriptDirectory = getScriptDirectory(args);\n\t\t}\n\t\tCLIDisplay.value(\"Script Directory\", nodeOptions.scriptDirectory);\n\n\t\tnodeOptions.localesDirectory =\n\t\t\tnodeOptions?.localesDirectory ??\n\t\t\tpath.resolve(path.join(nodeOptions.scriptDirectory, \"dist\", \"locales\"));\n\n\t\tCLIDisplay.value(\"Locales Directory\", nodeOptions.localesDirectory);\n\t\tawait initialiseLocales(nodeOptions.localesDirectory);\n\n\t\tnodeOptions.envPrefix ??= \"TWIN_\";\n\n\t\toverrideModuleImport(nodeOptions.executionDirectory ?? \"\");\n\n\t\tconst commandLineArgs = parseCommandLineArgs(args);\n\n\t\tconst hasEnvPrefix = commandLineArgs.options?.find(option => option.key === \"env-prefix\");\n\t\tif (hasEnvPrefix) {\n\t\t\tnodeOptions.envPrefix = Coerce.string(hasEnvPrefix.value) ?? nodeOptions.envPrefix;\n\t\t}\n\n\t\tCLIDisplay.value(\"Environment Variable Prefix\", nodeOptions.envPrefix);\n\n\t\t// This is the only location in the code base that should access process.env directly\n\t\t// So we can safely disable the linting rule here.\n\t\tlet finalEnvVars =\n\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\tprocess.env as {\n\t\t\t\t[id: string]: string;\n\t\t\t};\n\n\t\tif (Is.objectValue(nodeOptions?.envVars)) {\n\t\t\tfinalEnvVars = {\n\t\t\t\t...finalEnvVars,\n\t\t\t\t...nodeOptions.envVars\n\t\t\t};\n\t\t}\n\n\t\tfinalEnvVars = {\n\t\t\t...getEnvDefaults(nodeOptions.envPrefix),\n\t\t\t...finalEnvVars\n\t\t};\n\n\t\tlet cliCommand;\n\t\tif (Is.arrayValue(commandLineArgs.options)) {\n\t\t\tregisterCommands();\n\t\t\tcliCommand = constructCliCommand(finalEnvVars, commandLineArgs);\n\t\t}\n\n\t\tif (Is.object(cliCommand)) {\n\t\t\tfinalEnvVars[`${nodeOptions.envPrefix}SILENT`] ??= \"true\";\n\t\t} else {\n\t\t\tif (Is.empty(nodeOptions?.openApiSpecFile)) {\n\t\t\t\tconst specFile = path.resolve(\n\t\t\t\t\tpath.join(nodeOptions.scriptDirectory ?? \"\", \"docs\", \"open-api\", \"spec.json\")\n\t\t\t\t);\n\t\t\t\tif (await fileExists(specFile)) {\n\t\t\t\t\tnodeOptions ??= {};\n\t\t\t\t\tnodeOptions.openApiSpecFile = specFile;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.stringValue(nodeOptions.openApiSpecFile)) {\n\t\t\t\tCLIDisplay.value(\"OpenAPI Spec File\", nodeOptions.openApiSpecFile);\n\t\t\t}\n\n\t\t\tif (Is.empty(nodeOptions?.favIconFile)) {\n\t\t\t\tconst favIconFile = path.resolve(\n\t\t\t\t\tpath.join(nodeOptions.scriptDirectory ?? \"\", \"static\", \"favicon.png\")\n\t\t\t\t);\n\t\t\t\tif (await fileExists(favIconFile)) {\n\t\t\t\t\tnodeOptions ??= {};\n\t\t\t\t\tnodeOptions.favIconFile = favIconFile;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.stringValue(nodeOptions.favIconFile)) {\n\t\t\t\tCLIDisplay.value(\"Favicon File\", nodeOptions.favIconFile);\n\t\t\t}\n\t\t}\n\n\t\tconst { nodeEngineConfig, nodeEnvVars, availableContextIdKeys } = await buildConfiguration(\n\t\t\tfinalEnvVars,\n\t\t\tnodeOptions,\n\t\t\tserverInfo\n\t\t);\n\n\t\tdebugEnabled = Coerce.boolean(nodeEnvVars.debug) ?? debugEnabled;\n\n\t\tCLIDisplay.break();\n\n\t\tconst startResult = await start(\n\t\t\tnodeOptions,\n\t\t\tnodeEngineConfig,\n\t\t\tnodeEnvVars,\n\t\t\tcliCommand,\n\t\t\tavailableContextIdKeys\n\t\t);\n\n\t\tif (!Is.empty(startResult)) {\n\t\t\tshowErrorDetails = false;\n\n\t\t\tlet isShuttingDown = false;\n\t\t\tfor (const signal of [\"SIGHUP\", \"SIGINT\", \"SIGTERM\"]) {\n\t\t\t\tprocess.on(signal, async () => {\n\t\t\t\t\tif (!isShuttingDown) {\n\t\t\t\t\t\tisShuttingDown = true;\n\t\t\t\t\t\tCLIDisplay.value(\"Terminate Signal\", signal);\n\t\t\t\t\t\tawait startResult.shutdown();\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn startResult;\n\t} catch (err) {\n\t\tif (nodeOptions?.disableProcessExitOnFailure ?? false) {\n\t\t\tthrow err;\n\t\t}\n\n\t\tif (showErrorDetails) {\n\t\t\tCLIDisplay.error(err, true, { includeAdditional: true, includeStack: debugEnabled });\n\t\t}\n\n\t\t// eslint-disable-next-line unicorn/no-process-exit\n\t\tprocess.exit(1);\n\t}\n}\n\n/**\n * Build the configuration for the TWIN Node.\n * @param processEnv The environment variables from the process.\n * @param options The options for running the server.\n * @param serverInfo The server information.\n * @returns A promise that resolves to the engine server configuration, environment prefix, environment variables,\n * and options.\n */\nexport async function buildConfiguration(\n\tprocessEnv: {\n\t\t[id: string]: string;\n\t},\n\toptions: INodeOptions,\n\tserverInfo: IServerInfo\n): Promise<{\n\tnodeEnvVars: INodeEnvironmentVariables & { [id: string]: string | unknown };\n\tnodeEngineConfig: INodeEngineConfig;\n\tavailableContextIdKeys: { key: string; requiredHandlerFeatures: string[] }[];\n}> {\n\tconst availableContextIdKeys: { key: string; requiredHandlerFeatures: string[] }[] = [];\n\n\tlet defaultEnvOnly = false;\n\tif (Is.empty(options?.envFilenames)) {\n\t\tconst envFile = path.resolve(path.join(options.executionDirectory ?? \"\", \".env\"));\n\t\tCLIDisplay.value(\"Default Environment File\", envFile);\n\t\toptions ??= {};\n\t\toptions.envFilenames = [envFile];\n\t\tdefaultEnvOnly = true;\n\t}\n\n\tif (Is.arrayValue(options?.envFilenames)) {\n\t\tconst output = dotenv.config({\n\t\t\tpath: options?.envFilenames,\n\t\t\tquiet: true\n\t\t});\n\n\t\t// We don't want to throw an error if the default environment file is not found.\n\t\t// Only if we have custom environment files.\n\t\tif (!defaultEnvOnly && output.error) {\n\t\t\tthrow output.error;\n\t\t}\n\n\t\tif (Is.objectValue(output.parsed)) {\n\t\t\tfor (const [key, value] of Object.entries(output.parsed)) {\n\t\t\t\t// Only set environment variables that are not already set in\n\t\t\t\t// the process environment or provided via options.envVars\n\t\t\t\tprocessEnv[key] ??= value;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst envVars = EnvHelper.envToJson<{ [id: string]: string | unknown }>(\n\t\tprocessEnv,\n\t\toptions.envPrefix ?? \"\"\n\t);\n\n\t// Expand any environment variables that use the @file: syntax\n\tconst keys = Object.keys(envVars);\n\tfor (const key of keys) {\n\t\tif (\n\t\t\tIs.stringValue(envVars[key]) &&\n\t\t\t(envVars[key].startsWith(\"@text:\") || envVars[key].startsWith(\"@json:\"))\n\t\t) {\n\t\t\tconst filePath = envVars[key].slice(6).trim();\n\t\t\tconst embeddedFile = path.resolve(path.join(options.executionDirectory ?? \"\", filePath));\n\n\t\t\tif (envVars[key].startsWith(\"@text:\")) {\n\t\t\t\tCLIDisplay.value(`Expanding Environment Variable: ${key} from text file`, embeddedFile);\n\t\t\t\tenvVars[key] = await loadTextFile(embeddedFile);\n\t\t\t} else if (envVars[key].startsWith(\"@json:\")) {\n\t\t\t\tCLIDisplay.value(`Expanding Environment Variable: ${key} from JSON file`, embeddedFile);\n\t\t\t\tenvVars[key] = await loadJsonFile(embeddedFile);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Extend the environment variables with any additional custom configuration.\n\tif (Is.function(options?.extendEnvVars)) {\n\t\tCLIDisplay.task(\"Extending Environment Variables\");\n\t\tawait options.extendEnvVars(envVars);\n\t}\n\n\t// Build the engine configuration from the environment variables.\n\tconst coreConfig = await buildEngineConfiguration(envVars, availableContextIdKeys);\n\tconst engineServerConfig = await buildEngineServerConfiguration(\n\t\tenvVars,\n\t\tavailableContextIdKeys,\n\t\tcoreConfig,\n\t\tserverInfo,\n\t\toptions?.openApiSpecFile,\n\t\toptions?.favIconFile\n\t);\n\n\t// Merge any custom configuration provided in the options.\n\tif (Is.arrayValue(options?.configFilenames)) {\n\t\tfor (const configFile of options.configFilenames) {\n\t\t\tCLIDisplay.value(\"Loading Configuration File\", configFile);\n\t\t\tconst configFilePath = path.resolve(path.join(options.executionDirectory ?? \"\", configFile));\n\t\t\tconst config = await loadJsonFile(configFilePath);\n\t\t\tObject.assign(engineServerConfig, config);\n\t\t}\n\t}\n\n\tif (Is.objectValue(options?.config)) {\n\t\tCLIDisplay.task(\"Merging Custom Configuration\");\n\t\tObject.assign(engineServerConfig, options.config);\n\t}\n\n\t// Merge any custom configuration provided in the options.\n\tif (Is.function(options?.extendConfig)) {\n\t\tCLIDisplay.task(\"Extending Configuration\");\n\t\tawait options.extendConfig(envVars, engineServerConfig);\n\t}\n\n\tconst nodeEngineConfig = await extensionsConfiguration(envVars, engineServerConfig);\n\n\treturn { nodeEngineConfig, nodeEnvVars: envVars, availableContextIdKeys };\n}\n\n/**\n * Override module imports to support protocol-based loading (npm:, https:) and local files.\n * @param executionDirectory The execution directory for resolving local module paths.\n * @param envVars The environment variables containing extension configuration (optional, uses defaults if not provided).\n */\nexport function overrideModuleImport(\n\texecutionDirectory: string,\n\tenvVars?: INodeEnvironmentVariables\n): void {\n\tconst maxSizeMb = Coerce.number(envVars?.extensionsMaxSizeMb) ?? 10;\n\tconst cacheDirectory = envVars?.extensionsCacheDirectory;\n\n\tModuleHelper.overrideImport(async moduleName => {\n\t\tif (moduleCache[moduleName]) {\n\t\t\treturn {\n\t\t\t\tmodule: moduleCache[moduleName],\n\t\t\t\tuseDefault: false\n\t\t\t};\n\t\t}\n\n\t\tconst parsed = parseModuleProtocol(moduleName);\n\t\tlet resolvedPath: string | undefined;\n\n\t\tswitch (parsed.protocol) {\n\t\t\tcase ModuleProtocol.Npm: {\n\t\t\t\tconst result = await handleNpmProtocol(\n\t\t\t\t\tparsed.identifier,\n\t\t\t\t\texecutionDirectory,\n\t\t\t\t\tcacheDirectory\n\t\t\t\t);\n\t\t\t\tresolvedPath = result.resolvedPath;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ModuleProtocol.Https: {\n\t\t\t\tconst result = await handleHttpsProtocol(\n\t\t\t\t\tparsed.identifier,\n\t\t\t\t\texecutionDirectory,\n\t\t\t\t\tmaxSizeMb,\n\t\t\t\t\tcacheDirectory,\n\t\t\t\t\tenvVars?.extensionsCacheTtlHours,\n\t\t\t\t\tenvVars?.extensionsForceRefresh\n\t\t\t\t);\n\t\t\t\tresolvedPath = result.resolvedPath;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ModuleProtocol.Http: {\n\t\t\t\tthrow new GeneralError(\"node\", \"insecureProtocol\", { protocol: ModuleProtocol.Http });\n\t\t\t}\n\n\t\t\tcase ModuleProtocol.Local: {\n\t\t\t\tlet localFilename = path.resolve(moduleName);\n\n\t\t\t\tlet exists = await fileExists(localFilename);\n\t\t\t\tif (!exists) {\n\t\t\t\t\tlocalFilename = path.resolve(executionDirectory, moduleName);\n\t\t\t\t\texists = await fileExists(localFilename);\n\t\t\t\t}\n\n\t\t\t\tif (exists) {\n\t\t\t\t\tresolvedPath = localFilename;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase ModuleProtocol.Default: {\n\t\t\t\ttry {\n\t\t\t\t\tconst packagePath = path.resolve(getNpmRootPath(), moduleName);\n\t\t\t\t\tconst mainFile = await resolvePackageEntryPoint(packagePath, moduleName);\n\t\t\t\t\tconst modulePath = path.resolve(packagePath, mainFile);\n\t\t\t\t\tconst exists = await fileExists(modulePath);\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\tresolvedPath = modulePath;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Continue to fallback resolution\n\t\t\t\t}\n\n\t\t\t\t// Fallback: resolve from npm protocol cache directory (installed via handleNpmProtocol)\n\t\t\t\ttry {\n\t\t\t\t\tconst cacheNpmRoot = path.resolve(\n\t\t\t\t\t\tgetExtensionsCacheDir(executionDirectory, ModuleProtocol.Npm, cacheDirectory),\n\t\t\t\t\t\t\"node_modules\"\n\t\t\t\t\t);\n\n\t\t\t\t\tconst packagePath = path.resolve(cacheNpmRoot, moduleName);\n\t\t\t\t\tconst mainFile = await resolvePackageEntryPoint(packagePath, moduleName);\n\t\t\t\t\tconst modulePath = path.resolve(packagePath, mainFile);\n\t\t\t\t\tconst exists = await fileExists(modulePath);\n\t\t\t\t\tif (exists) {\n\t\t\t\t\t\tresolvedPath = modulePath;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// No cached resolution either; fall through\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Common module loading and caching logic\n\t\tif (resolvedPath) {\n\t\t\tconst module = await import(createModuleImportUrl(resolvedPath));\n\t\t\tmoduleCache[moduleName] = module;\n\t\t\treturn {\n\t\t\t\tmodule,\n\t\t\t\tuseDefault: false\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tmodule: undefined,\n\t\t\tuseDefault: true\n\t\t};\n\t});\n}\n\n/**\n * Get the root path for npm modules by executing \"npm root\" command and cache it.\n * @returns The root path for npm modules.\n */\nfunction getNpmRootPath(): string {\n\tnpmRootCache ??= execSync(\"npm root\").toString().trim().replace(/\\\\/g, \"/\");\n\treturn npmRootCache;\n}\n"]}
@@ -602,6 +602,11 @@ export interface IEngineEnvironmentVariables {
602
602
  * The interval in seconds for performing health checks, defaults to 60.
603
603
  */
604
604
  healthIntervalSeconds?: string;
605
+ /**
606
+ * The interval in seconds for performing health checks at startup, defaults to 2.
607
+ * This allows components that take a long time to initialize to be healthy before the first health check is performed.
608
+ */
609
+ healthStartupIntervalSeconds?: string;
605
610
  /**
606
611
  * The id of the key in the vault to use for encrypting parameters in url transformer.
607
612
  */
package/docs/changelog.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.3-next.40](https://github.com/iotaledger/twin-node/compare/node-core-v0.0.3-next.39...node-core-v0.0.3-next.40) (2026-05-22)
4
+
5
+
6
+ ### Features
7
+
8
+ * endpoints-runner ([#153](https://github.com/iotaledger/twin-node/issues/153)) ([cca42d0](https://github.com/iotaledger/twin-node/commit/cca42d07d6655d401c909308e8b73606fef05248))
9
+
3
10
  ## [0.0.3-next.39](https://github.com/iotaledger/twin-node/compare/node-core-v0.0.3-next.38...node-core-v0.0.3-next.39) (2026-05-21)
4
11
 
5
12
 
@@ -1214,6 +1214,15 @@ The interval in seconds for performing health checks, defaults to 60.
1214
1214
 
1215
1215
  ***
1216
1216
 
1217
+ ### healthStartupIntervalSeconds? {#healthstartupintervalseconds}
1218
+
1219
+ > `optional` **healthStartupIntervalSeconds?**: `string`
1220
+
1221
+ The interval in seconds for performing health checks at startup, defaults to 2.
1222
+ This allows components that take a long time to initialize to be healthy before the first health check is performed.
1223
+
1224
+ ***
1225
+
1217
1226
  ### urlTransformerEncryptionKeyId? {#urltransformerencryptionkeyid}
1218
1227
 
1219
1228
  > `optional` **urlTransformerEncryptionKeyId?**: `string`
@@ -1794,6 +1794,19 @@ The interval in seconds for performing health checks, defaults to 60.
1794
1794
 
1795
1795
  ***
1796
1796
 
1797
+ ### healthStartupIntervalSeconds? {#healthstartupintervalseconds}
1798
+
1799
+ > `optional` **healthStartupIntervalSeconds?**: `string`
1800
+
1801
+ The interval in seconds for performing health checks at startup, defaults to 2.
1802
+ This allows components that take a long time to initialize to be healthy before the first health check is performed.
1803
+
1804
+ #### Inherited from
1805
+
1806
+ [`IEngineEnvironmentVariables`](IEngineEnvironmentVariables.md).[`healthStartupIntervalSeconds`](IEngineEnvironmentVariables.md#healthstartupintervalseconds)
1807
+
1808
+ ***
1809
+
1797
1810
  ### urlTransformerEncryptionKeyId? {#urltransformerencryptionkeyid}
1798
1811
 
1799
1812
  > `optional` **urlTransformerEncryptionKeyId?**: `string`
@@ -1790,6 +1790,19 @@ The interval in seconds for performing health checks, defaults to 60.
1790
1790
 
1791
1791
  ***
1792
1792
 
1793
+ ### healthStartupIntervalSeconds? {#healthstartupintervalseconds}
1794
+
1795
+ > `optional` **healthStartupIntervalSeconds?**: `string`
1796
+
1797
+ The interval in seconds for performing health checks at startup, defaults to 2.
1798
+ This allows components that take a long time to initialize to be healthy before the first health check is performed.
1799
+
1800
+ #### Inherited from
1801
+
1802
+ [`IEngineServerEnvironmentVariables`](IEngineServerEnvironmentVariables.md).[`healthStartupIntervalSeconds`](IEngineServerEnvironmentVariables.md#healthstartupintervalseconds)
1803
+
1804
+ ***
1805
+
1793
1806
  ### urlTransformerEncryptionKeyId? {#urltransformerencryptionkeyid}
1794
1807
 
1795
1808
  > `optional` **urlTransformerEncryptionKeyId?**: `string`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/node-core",
3
- "version": "0.0.3-next.39",
3
+ "version": "0.0.3-next.40",
4
4
  "description": "TWIN Node Core for serving APIs using the specified configuration",
5
5
  "repository": {
6
6
  "type": "git",