@twin.org/node-core 0.0.2-next.9 → 0.0.3-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/README.md +1 -1
  2. package/dist/es/builders/engineEnvBuilder.js +1132 -0
  3. package/dist/es/builders/engineEnvBuilder.js.map +1 -0
  4. package/dist/es/builders/engineServerEnvBuilder.js +206 -0
  5. package/dist/es/builders/engineServerEnvBuilder.js.map +1 -0
  6. package/dist/es/builders/extensionsBuilder.js +109 -0
  7. package/dist/es/builders/extensionsBuilder.js.map +1 -0
  8. package/dist/es/cli.js +255 -0
  9. package/dist/es/cli.js.map +1 -0
  10. package/dist/es/commands/bootstrapLegacy.js +175 -0
  11. package/dist/es/commands/bootstrapLegacy.js.map +1 -0
  12. package/dist/es/commands/help.js +85 -0
  13. package/dist/es/commands/help.js.map +1 -0
  14. package/dist/es/commands/identityCreate.js +310 -0
  15. package/dist/es/commands/identityCreate.js.map +1 -0
  16. package/dist/es/commands/identityImports.js +76 -0
  17. package/dist/es/commands/identityImports.js.map +1 -0
  18. package/dist/es/commands/identityVerifiableCredentialCreate.js +140 -0
  19. package/dist/es/commands/identityVerifiableCredentialCreate.js.map +1 -0
  20. package/dist/es/commands/identityVerificationMethodCreate.js +208 -0
  21. package/dist/es/commands/identityVerificationMethodCreate.js.map +1 -0
  22. package/dist/es/commands/identityVerificationMethodImport.js +120 -0
  23. package/dist/es/commands/identityVerificationMethodImport.js.map +1 -0
  24. package/dist/es/commands/nodeSetIdentity.js +51 -0
  25. package/dist/es/commands/nodeSetIdentity.js.map +1 -0
  26. package/dist/es/commands/nodeSetTenant.js +49 -0
  27. package/dist/es/commands/nodeSetTenant.js.map +1 -0
  28. package/dist/es/commands/tenantCreate.js +120 -0
  29. package/dist/es/commands/tenantCreate.js.map +1 -0
  30. package/dist/es/commands/tenantImport.js +78 -0
  31. package/dist/es/commands/tenantImport.js.map +1 -0
  32. package/dist/es/commands/userCreate.js +197 -0
  33. package/dist/es/commands/userCreate.js.map +1 -0
  34. package/dist/es/commands/vaultKeyCreate.js +185 -0
  35. package/dist/es/commands/vaultKeyCreate.js.map +1 -0
  36. package/dist/es/commands/vaultKeyImport.js +98 -0
  37. package/dist/es/commands/vaultKeyImport.js.map +1 -0
  38. package/dist/es/defaults.js +28 -0
  39. package/dist/es/defaults.js.map +1 -0
  40. package/dist/es/index.js +27 -0
  41. package/dist/es/index.js.map +1 -0
  42. package/dist/es/models/ICacheMetadata.js +4 -0
  43. package/dist/es/models/ICacheMetadata.js.map +1 -0
  44. package/dist/es/models/ICliArgs.js +4 -0
  45. package/dist/es/models/ICliArgs.js.map +1 -0
  46. package/dist/es/models/ICliCommand.js +2 -0
  47. package/dist/es/models/ICliCommand.js.map +1 -0
  48. package/dist/es/models/ICliCommandDefinition.js +2 -0
  49. package/dist/es/models/ICliCommandDefinition.js.map +1 -0
  50. package/dist/es/models/ICliCommandDefinitionParam.js +2 -0
  51. package/dist/es/models/ICliCommandDefinitionParam.js.map +1 -0
  52. package/dist/es/models/IEngineEnvironmentVariables.js +4 -0
  53. package/dist/es/models/IEngineEnvironmentVariables.js.map +1 -0
  54. package/dist/es/models/IEngineServerEnvironmentVariables.js +2 -0
  55. package/dist/es/models/IEngineServerEnvironmentVariables.js.map +1 -0
  56. package/dist/es/models/IModuleProtocol.js +2 -0
  57. package/dist/es/models/IModuleProtocol.js.map +1 -0
  58. package/dist/es/models/INodeEngineConfig.js +2 -0
  59. package/dist/es/models/INodeEngineConfig.js.map +1 -0
  60. package/dist/es/models/INodeEngineState.js +2 -0
  61. package/dist/es/models/INodeEngineState.js.map +1 -0
  62. package/dist/es/models/INodeEnvironmentVariables.js +2 -0
  63. package/dist/es/models/INodeEnvironmentVariables.js.map +1 -0
  64. package/dist/es/models/INodeOptions.js +2 -0
  65. package/dist/es/models/INodeOptions.js.map +1 -0
  66. package/dist/es/models/IProtocolHandlerResult.js +4 -0
  67. package/dist/es/models/IProtocolHandlerResult.js.map +1 -0
  68. package/dist/es/models/cliCommandParamType.js +4 -0
  69. package/dist/es/models/cliCommandParamType.js.map +1 -0
  70. package/dist/es/models/moduleProtocol.js +29 -0
  71. package/dist/es/models/moduleProtocol.js.map +1 -0
  72. package/dist/es/models/nodeExtensionMethods.js +2 -0
  73. package/dist/es/models/nodeExtensionMethods.js.map +1 -0
  74. package/dist/es/node.js +285 -0
  75. package/dist/es/node.js.map +1 -0
  76. package/dist/es/start.js +128 -0
  77. package/dist/es/start.js.map +1 -0
  78. package/dist/es/utils.js +397 -0
  79. package/dist/es/utils.js.map +1 -0
  80. package/dist/types/builders/engineEnvBuilder.d.ts +6 -2
  81. package/dist/types/builders/engineServerEnvBuilder.d.ts +7 -3
  82. package/dist/types/builders/extensionsBuilder.d.ts +32 -0
  83. package/dist/types/cli.d.ts +66 -0
  84. package/dist/types/commands/bootstrapLegacy.d.ts +66 -0
  85. package/dist/types/commands/help.d.ts +23 -0
  86. package/dist/types/commands/identityCreate.d.ts +39 -0
  87. package/dist/types/commands/identityImports.d.ts +24 -0
  88. package/dist/types/commands/identityVerifiableCredentialCreate.d.ts +43 -0
  89. package/dist/types/commands/identityVerificationMethodCreate.d.ts +47 -0
  90. package/dist/types/commands/identityVerificationMethodImport.d.ts +31 -0
  91. package/dist/types/commands/nodeSetIdentity.d.ts +22 -0
  92. package/dist/types/commands/nodeSetTenant.d.ts +22 -0
  93. package/dist/types/commands/tenantCreate.d.ts +35 -0
  94. package/dist/types/commands/tenantImport.d.ts +24 -0
  95. package/dist/types/commands/userCreate.d.ts +46 -0
  96. package/dist/types/commands/vaultKeyCreate.d.ts +43 -0
  97. package/dist/types/commands/vaultKeyImport.d.ts +28 -0
  98. package/dist/types/defaults.d.ts +16 -0
  99. package/dist/types/index.d.ts +24 -11
  100. package/dist/types/models/ICacheMetadata.d.ts +17 -0
  101. package/dist/types/models/ICliArgs.d.ts +20 -0
  102. package/dist/types/models/ICliCommand.d.ts +17 -0
  103. package/dist/types/models/ICliCommandDefinition.d.ts +46 -0
  104. package/dist/types/models/ICliCommandDefinitionParam.d.ts +35 -0
  105. package/dist/types/models/IEngineEnvironmentVariables.d.ts +154 -37
  106. package/dist/types/models/IEngineServerEnvironmentVariables.d.ts +12 -3
  107. package/dist/types/models/IModuleProtocol.d.ts +18 -0
  108. package/dist/types/models/INodeEngineConfig.d.ts +6 -0
  109. package/dist/types/models/INodeEngineState.d.ts +14 -0
  110. package/dist/types/models/INodeEnvironmentVariables.d.ts +17 -15
  111. package/dist/types/models/INodeOptions.d.ts +14 -3
  112. package/dist/types/models/IProtocolHandlerResult.d.ts +13 -0
  113. package/dist/types/models/cliCommandParamType.d.ts +4 -0
  114. package/dist/types/models/moduleProtocol.d.ts +29 -0
  115. package/dist/types/models/nodeExtensionMethods.d.ts +27 -0
  116. package/dist/types/node.d.ts +21 -7
  117. package/dist/types/start.d.ts +25 -0
  118. package/dist/types/utils.d.ts +83 -6
  119. package/docs/changelog.md +241 -0
  120. package/docs/detailed-guide.md +129 -0
  121. package/docs/reference/functions/buildConfiguration.md +2 -2
  122. package/docs/reference/functions/buildEngineConfiguration.md +8 -2
  123. package/docs/reference/functions/buildEngineServerConfiguration.md +9 -3
  124. package/docs/reference/functions/constructCliCommand.md +27 -0
  125. package/docs/reference/functions/createModuleImportUrl.md +21 -0
  126. package/docs/reference/functions/directoryExists.md +19 -0
  127. package/docs/reference/functions/executeCommand.md +29 -0
  128. package/docs/reference/functions/extensionsConfiguration.md +25 -0
  129. package/docs/reference/functions/extensionsInitialiseEngine.md +25 -0
  130. package/docs/reference/functions/extensionsInitialiseEngineServer.md +31 -0
  131. package/docs/reference/functions/getEnvDefaults.md +19 -0
  132. package/docs/reference/functions/getExtensionsCacheDir.md +31 -0
  133. package/docs/reference/functions/getFiles.md +19 -0
  134. package/docs/reference/functions/getSubFolders.md +19 -0
  135. package/docs/reference/functions/handleHttpsProtocol.md +49 -0
  136. package/docs/reference/functions/handleNpmProtocol.md +31 -0
  137. package/docs/reference/functions/hashUrl.md +19 -0
  138. package/docs/reference/functions/initCli.md +27 -0
  139. package/docs/reference/functions/isCacheExpired.md +31 -0
  140. package/docs/reference/functions/overrideModuleImport.md +8 -2
  141. package/docs/reference/functions/parseCommandLineArgs.md +19 -0
  142. package/docs/reference/functions/parseModuleProtocol.md +19 -0
  143. package/docs/reference/functions/processEnvOptions.md +27 -0
  144. package/docs/reference/functions/registerCommands.md +9 -0
  145. package/docs/reference/functions/resolvePackageEntryPoint.md +32 -0
  146. package/docs/reference/functions/run.md +9 -3
  147. package/docs/reference/functions/shutdownExtensions.md +25 -0
  148. package/docs/reference/functions/start.md +17 -5
  149. package/docs/reference/functions/substituteEnvOptions.md +25 -0
  150. package/docs/reference/index.md +47 -10
  151. package/docs/reference/interfaces/ICacheMetadata.md +27 -0
  152. package/docs/reference/interfaces/ICliArgs.md +35 -0
  153. package/docs/reference/interfaces/ICliCommand.md +23 -0
  154. package/docs/reference/interfaces/ICliCommandDefinition.md +101 -0
  155. package/docs/reference/interfaces/ICliCommandDefinitionParam.md +65 -0
  156. package/docs/reference/interfaces/IEngineEnvironmentVariables.md +303 -60
  157. package/docs/reference/interfaces/IEngineServerEnvironmentVariables.md +1737 -5
  158. package/docs/reference/interfaces/IModuleProtocol.md +27 -0
  159. package/docs/reference/interfaces/INodeEngineConfig.md +7 -0
  160. package/docs/reference/interfaces/INodeEngineState.md +23 -0
  161. package/docs/reference/interfaces/INodeEnvironmentVariables.md +599 -198
  162. package/docs/reference/interfaces/INodeOptions.md +27 -3
  163. package/docs/reference/interfaces/IProtocolHandlerResult.md +19 -0
  164. package/docs/reference/type-aliases/CliCommandParamType.md +5 -0
  165. package/docs/reference/type-aliases/ModuleProtocol.md +5 -0
  166. package/docs/reference/type-aliases/NodeExtensionInitialiseEngineMethod.md +18 -0
  167. package/docs/reference/type-aliases/NodeExtensionInitialiseEngineServerMethod.md +24 -0
  168. package/docs/reference/type-aliases/NodeExtensionInitialiseMethod.md +23 -0
  169. package/docs/reference/type-aliases/NodeExtensionShutdownMethod.md +10 -0
  170. package/docs/reference/variables/ATTESTATION_VERIFICATION_METHOD_ID.md +3 -0
  171. package/docs/reference/variables/AUTH_SIGNING_KEY_ID.md +3 -0
  172. package/docs/reference/variables/BLOB_STORAGE_ENCRYPTION_KEY_ID.md +3 -0
  173. package/docs/reference/variables/CONTEXT_ID_HANDLER_FEATURE_DID.md +3 -0
  174. package/docs/reference/variables/CONTEXT_ID_HANDLER_FEATURE_TENANT.md +3 -0
  175. package/docs/reference/variables/IMMUTABLE_PROOF_VERIFICATION_METHOD_ID.md +3 -0
  176. package/docs/reference/variables/ModuleProtocol.md +37 -0
  177. package/docs/reference/variables/SYNCHRONISED_STORAGE_BLOB_STORAGE_ENCRYPTION_KEY_ID.md +3 -0
  178. package/docs/reference/variables/VC_AUTHENTICATION_VERIFICATION_METHOD_ID.md +3 -0
  179. package/locales/en.json +479 -28
  180. package/package.json +29 -9
  181. package/dist/cjs/index.cjs +0 -1910
  182. package/dist/esm/index.mjs +0 -1870
  183. package/dist/types/bootstrap.d.ts +0 -59
  184. package/dist/types/models/nodeFeatures.d.ts +0 -21
  185. package/dist/types/server.d.ts +0 -17
  186. package/docs/reference/functions/bootstrap.md +0 -29
  187. package/docs/reference/functions/bootstrapAuth.md +0 -35
  188. package/docs/reference/functions/bootstrapBlobEncryption.md +0 -35
  189. package/docs/reference/functions/bootstrapImmutableProofMethod.md +0 -35
  190. package/docs/reference/functions/bootstrapNodeIdentity.md +0 -35
  191. package/docs/reference/functions/bootstrapNodeUser.md +0 -35
  192. package/docs/reference/functions/bootstrapSynchronisedStorage.md +0 -35
  193. package/docs/reference/functions/getFeatures.md +0 -19
  194. package/docs/reference/type-aliases/NodeFeatures.md +0 -5
  195. package/docs/reference/variables/NodeFeatures.md +0 -25
@@ -0,0 +1,1132 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ import path from "node:path";
4
+ import { Coerce, Is } from "@twin.org/core";
5
+ import { AttestationComponentType, AttestationConnectorType, AuditableItemGraphComponentType, AuditableItemStreamComponentType, AuthenticationGeneratorComponentType, BackgroundTaskComponentType, BlobStorageComponentType, BlobStorageConnectorType, ContextIdHandlerComponentType, DataProcessingComponentType, DataSpaceConnectorComponentType, DltConfigType, DocumentManagementComponentType, EngineTypeHelper, EntityStorageConnectorType, EventBusComponentType, EventBusConnectorType, FaucetConnectorType, FederatedCatalogueComponentType, IdentityComponentType, IdentityConnectorType, IdentityProfileComponentType, IdentityProfileConnectorType, IdentityResolverComponentType, IdentityResolverConnectorType, ImmutableProofComponentType, LoggingComponentType, LoggingConnectorType, MessagingAdminComponentType, MessagingComponentType, MessagingEmailConnectorType, MessagingPushNotificationConnectorType, MessagingSmsConnectorType, NftComponentType, NftConnectorType, RightsManagementDapComponentType, RightsManagementDarpComponentType, RightsManagementPapComponentType, RightsManagementPdpComponentType, RightsManagementPepComponentType, RightsManagementPipComponentType, RightsManagementPmpComponentType, RightsManagementPnapComponentType, RightsManagementPnpComponentType, RightsManagementPxpComponentType, SynchronisedStorageComponentType, TaskSchedulerComponentType, TelemetryComponentType, TelemetryConnectorType, TenantAdminComponentType, TrustComponentType, VaultConnectorType, VerifiableStorageComponentType, VerifiableStorageConnectorType, WalletConnectorType } from "@twin.org/engine-types";
6
+ import { DataAccessPointRestClient, PolicyNegotiationPointRestClient } from "@twin.org/rights-management-rest-client";
7
+ import { CONTEXT_ID_HANDLER_FEATURE_DID, CONTEXT_ID_HANDLER_FEATURE_TENANT } from "../defaults.js";
8
+ /**
9
+ * Build the engine core configuration from environment variables.
10
+ * @param envVars The environment variables.
11
+ * @param contextIdKeys The context ID keys.
12
+ * @returns The config for the core.
13
+ */
14
+ export async function buildEngineConfiguration(envVars, contextIdKeys) {
15
+ if (Is.stringValue(envVars.storageFileRoot)) {
16
+ envVars.stateFilename ??= "engine-state.json";
17
+ envVars.storageFileRoot = path.resolve(envVars.storageFileRoot);
18
+ envVars.stateFilename = path.join(envVars.storageFileRoot, envVars.stateFilename);
19
+ }
20
+ const coreConfig = {
21
+ debug: Coerce.boolean(envVars.debug) ?? false,
22
+ silent: Coerce.boolean(envVars.silent) ?? false,
23
+ types: {}
24
+ };
25
+ await configureTenant(coreConfig, envVars);
26
+ await configureContextIdHandlers(coreConfig, envVars);
27
+ await configureEntityStorage(coreConfig, envVars);
28
+ await configureBlobStorage(coreConfig, envVars);
29
+ await configureVault(coreConfig, envVars);
30
+ await configureDlt(coreConfig, envVars);
31
+ await configureLogging(coreConfig, envVars);
32
+ await configureBackgroundTask(coreConfig, envVars);
33
+ await configureTaskScheduler(coreConfig, envVars);
34
+ await configureEventBus(coreConfig, envVars);
35
+ await configureTelemetry(coreConfig, envVars);
36
+ await configureMessaging(coreConfig, envVars);
37
+ await configureFaucet(coreConfig, envVars);
38
+ await configureWallet(coreConfig, envVars);
39
+ await configureNft(coreConfig, envVars);
40
+ await configureVerifiableStorage(coreConfig, envVars);
41
+ await configureIdentity(coreConfig, envVars);
42
+ await configureIdentityResolver(coreConfig, envVars);
43
+ await configureIdentityProfile(coreConfig, envVars);
44
+ await configureAttestation(coreConfig, envVars);
45
+ await configureDataProcessing(coreConfig, envVars);
46
+ await configureAuditableItemGraph(coreConfig, envVars);
47
+ await configureAuditableItemStream(coreConfig, envVars);
48
+ await configureDocumentManagement(coreConfig, envVars);
49
+ await configureVerifiableCredentialAuthentication(coreConfig, envVars);
50
+ await configureTrust(coreConfig, envVars);
51
+ await configureRightsManagement(coreConfig, envVars);
52
+ await configureSynchronisedStorage(coreConfig, envVars);
53
+ await configureFederatedCatalogue(coreConfig, envVars);
54
+ await configureDataSpaceConnector(coreConfig, envVars);
55
+ return coreConfig;
56
+ }
57
+ /**
58
+ * Configures the entity storage.
59
+ * @param coreConfig The core config.
60
+ * @param envVars The environment variables.
61
+ */
62
+ async function configureEntityStorage(coreConfig, envVars) {
63
+ coreConfig.types ??= {};
64
+ coreConfig.types.entityStorageConnector ??= [];
65
+ const entityStorageConnectorTypes = commaSeparatedListToArray(envVars.entityStorageConnectorType);
66
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.Memory)) {
67
+ coreConfig.types.entityStorageConnector.push({
68
+ type: EntityStorageConnectorType.Memory
69
+ });
70
+ }
71
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.File)) {
72
+ coreConfig.types.entityStorageConnector.push({
73
+ type: EntityStorageConnectorType.File,
74
+ options: {
75
+ config: { directory: envVars.storageFileRoot ?? "" },
76
+ folderPrefix: envVars.entityStorageTablePrefix
77
+ }
78
+ });
79
+ }
80
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.AwsDynamoDb)) {
81
+ coreConfig.types.entityStorageConnector.push({
82
+ type: EntityStorageConnectorType.AwsDynamoDb,
83
+ options: {
84
+ config: {
85
+ region: envVars.awsDynamodbRegion ?? "",
86
+ authMode: envVars.awsDynamodbAuthMode,
87
+ accessKeyId: envVars.awsDynamodbAccessKeyId,
88
+ secretAccessKey: envVars.awsDynamodbSecretAccessKey,
89
+ endpoint: envVars.awsDynamodbEndpoint,
90
+ connectionTimeoutMs: Coerce.integer(envVars.awsDynamodbConnectionTimeoutMs)
91
+ },
92
+ tablePrefix: envVars.entityStorageTablePrefix
93
+ }
94
+ });
95
+ }
96
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.AzureCosmosDb)) {
97
+ coreConfig.types.entityStorageConnector.push({
98
+ type: EntityStorageConnectorType.AzureCosmosDb,
99
+ options: {
100
+ config: {
101
+ endpoint: envVars.azureCosmosdbEndpoint ?? "",
102
+ key: envVars.azureCosmosdbKey ?? "",
103
+ databaseId: envVars.azureCosmosdbDatabaseId ?? "",
104
+ containerId: envVars.azureCosmosdbContainerId ?? ""
105
+ },
106
+ tablePrefix: envVars.entityStorageTablePrefix
107
+ }
108
+ });
109
+ }
110
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.GcpFirestoreDb)) {
111
+ coreConfig.types.entityStorageConnector.push({
112
+ type: EntityStorageConnectorType.GcpFirestoreDb,
113
+ options: {
114
+ config: {
115
+ projectId: envVars.gcpFirestoreProjectId ?? "",
116
+ credentials: envVars.gcpFirestoreCredentials ?? "",
117
+ databaseId: envVars.gcpFirestoreDatabaseId ?? "",
118
+ collectionName: envVars.gcpFirestoreCollectionName ?? "",
119
+ endpoint: envVars.gcpFirestoreApiEndpoint ?? ""
120
+ },
121
+ tablePrefix: envVars.entityStorageTablePrefix
122
+ }
123
+ });
124
+ }
125
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.ScyllaDb)) {
126
+ coreConfig.types.entityStorageConnector.push({
127
+ type: EntityStorageConnectorType.ScyllaDb,
128
+ options: {
129
+ config: {
130
+ hosts: commaSeparatedListToArray(envVars.scylladbHosts),
131
+ localDataCenter: envVars.scylladbLocalDataCenter ?? "",
132
+ keyspace: envVars.scylladbKeyspace ?? "",
133
+ port: Coerce.integer(envVars.scylladbPort)
134
+ },
135
+ tablePrefix: envVars.entityStorageTablePrefix
136
+ }
137
+ });
138
+ }
139
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.MySqlDb)) {
140
+ coreConfig.types.entityStorageConnector.push({
141
+ type: EntityStorageConnectorType.MySqlDb,
142
+ options: {
143
+ config: {
144
+ host: envVars.mySqlHost ?? "",
145
+ port: Coerce.integer(envVars.mySqlPort),
146
+ user: envVars.mySqlUser ?? "",
147
+ password: envVars.mySqlPassword ?? "",
148
+ database: envVars.mySqlDatabase ?? ""
149
+ },
150
+ tablePrefix: envVars.entityStorageTablePrefix
151
+ }
152
+ });
153
+ }
154
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.MongoDb)) {
155
+ coreConfig.types.entityStorageConnector.push({
156
+ type: EntityStorageConnectorType.MongoDb,
157
+ options: {
158
+ config: {
159
+ host: envVars.mongoDbHost ?? "",
160
+ port: Coerce.integer(envVars.mongoDbPort),
161
+ user: envVars.mongoDbUser ?? "",
162
+ password: envVars.mongoDbPassword ?? "",
163
+ database: envVars.mongoDbDatabase ?? ""
164
+ },
165
+ tablePrefix: envVars.entityStorageTablePrefix
166
+ }
167
+ });
168
+ }
169
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.PostgreSql)) {
170
+ coreConfig.types.entityStorageConnector.push({
171
+ type: EntityStorageConnectorType.PostgreSql,
172
+ options: {
173
+ config: {
174
+ host: envVars.postgreSqlHost ?? "",
175
+ port: Coerce.integer(envVars.postgreSqlPort),
176
+ user: envVars.postgreSqlUser ?? "",
177
+ password: envVars.postgreSqlPassword ?? "",
178
+ database: envVars.postgreSqlDatabase ?? ""
179
+ },
180
+ tablePrefix: envVars.entityStorageTablePrefix
181
+ }
182
+ });
183
+ }
184
+ const defaultEntityStorageConnectorType = envVars.entityStorageConnectorDefault ?? entityStorageConnectorTypes[0];
185
+ if (entityStorageConnectorTypes.includes(EntityStorageConnectorType.Synchronised)) {
186
+ // For synchronised storage we use the default connector as the one we wrap for real DB operations
187
+ coreConfig.types.entityStorageConnector.push({
188
+ type: EntityStorageConnectorType.Synchronised,
189
+ options: {
190
+ entityStorageConnectorType: defaultEntityStorageConnectorType
191
+ }
192
+ });
193
+ }
194
+ if (Is.arrayValue(entityStorageConnectorTypes)) {
195
+ for (const config of coreConfig.types.entityStorageConnector) {
196
+ if (config.type === defaultEntityStorageConnectorType) {
197
+ config.isDefault = true;
198
+ break;
199
+ }
200
+ }
201
+ }
202
+ }
203
+ /**
204
+ * Configures the blob storage.
205
+ * @param coreConfig The core config.
206
+ * @param envVars The environment variables.
207
+ */
208
+ async function configureBlobStorage(coreConfig, envVars) {
209
+ coreConfig.types.blobStorageConnector ??= [];
210
+ const blobStorageConnectorTypes = commaSeparatedListToArray(envVars.blobStorageConnectorType);
211
+ if (blobStorageConnectorTypes.includes(BlobStorageConnectorType.Memory)) {
212
+ coreConfig.types.blobStorageConnector.push({
213
+ type: BlobStorageConnectorType.Memory
214
+ });
215
+ }
216
+ if (blobStorageConnectorTypes.includes(BlobStorageConnectorType.File)) {
217
+ coreConfig.types.blobStorageConnector.push({
218
+ type: BlobStorageConnectorType.File,
219
+ options: {
220
+ config: {
221
+ directory: Is.stringValue(envVars.storageFileRoot)
222
+ ? path.join(envVars.storageFileRoot, "blob-storage")
223
+ : ""
224
+ },
225
+ storagePrefix: envVars.blobStoragePrefix
226
+ }
227
+ });
228
+ }
229
+ if (blobStorageConnectorTypes.includes(BlobStorageConnectorType.Ipfs)) {
230
+ coreConfig.types.blobStorageConnector.push({
231
+ type: BlobStorageConnectorType.Ipfs,
232
+ options: {
233
+ config: {
234
+ apiUrl: envVars.ipfsApiUrl ?? "",
235
+ bearerToken: envVars.ipfsBearerToken
236
+ }
237
+ }
238
+ });
239
+ }
240
+ if (blobStorageConnectorTypes.includes(BlobStorageConnectorType.AwsS3)) {
241
+ coreConfig.types.blobStorageConnector.push({
242
+ type: BlobStorageConnectorType.AwsS3,
243
+ options: {
244
+ config: {
245
+ region: envVars.awsS3Region ?? "",
246
+ bucketName: envVars.awsS3BucketName ?? "",
247
+ authMode: envVars.awsS3AuthMode,
248
+ accessKeyId: envVars.awsS3AccessKeyId,
249
+ secretAccessKey: envVars.awsS3SecretAccessKey,
250
+ endpoint: envVars.awsS3Endpoint
251
+ },
252
+ storagePrefix: envVars.blobStoragePrefix
253
+ }
254
+ });
255
+ }
256
+ if (blobStorageConnectorTypes.includes(BlobStorageConnectorType.AzureStorage)) {
257
+ coreConfig.types.blobStorageConnector.push({
258
+ type: BlobStorageConnectorType.AzureStorage,
259
+ options: {
260
+ config: {
261
+ accountName: envVars.azureStorageAccountName ?? "",
262
+ accountKey: envVars.azureStorageAccountKey ?? "",
263
+ containerName: envVars.azureStorageContainerName ?? "",
264
+ endpoint: envVars.azureStorageEndpoint ?? ""
265
+ },
266
+ storagePrefix: envVars.blobStoragePrefix
267
+ }
268
+ });
269
+ }
270
+ if (blobStorageConnectorTypes.includes(BlobStorageConnectorType.GcpStorage)) {
271
+ coreConfig.types.blobStorageConnector.push({
272
+ type: BlobStorageConnectorType.GcpStorage,
273
+ options: {
274
+ config: {
275
+ projectId: envVars.gcpStorageProjectId ?? "",
276
+ credentials: envVars.gcpStorageCredentials ?? "",
277
+ bucketName: envVars.gcpStorageBucketName ?? "",
278
+ apiEndpoint: envVars.gcpFirestoreApiEndpoint
279
+ },
280
+ storagePrefix: envVars.blobStoragePrefix
281
+ }
282
+ });
283
+ }
284
+ if (Is.arrayValue(blobStorageConnectorTypes)) {
285
+ const defaultStorageConnectorType = envVars.blobStorageConnectorDefault ?? blobStorageConnectorTypes[0];
286
+ for (const config of coreConfig.types.blobStorageConnector) {
287
+ if (config.type === defaultStorageConnectorType) {
288
+ config.isDefault = true;
289
+ }
290
+ // If this blob storage connector is the one to use for public access
291
+ // then add it as a feature
292
+ if (Is.stringValue(envVars.blobStorageConnectorPublic) &&
293
+ config.type === envVars.blobStorageConnectorPublic) {
294
+ config.features ??= [];
295
+ config.features.push("public");
296
+ break;
297
+ }
298
+ }
299
+ }
300
+ if (coreConfig.types.blobStorageConnector.length > 0) {
301
+ coreConfig.types.blobStorageComponent ??= [];
302
+ coreConfig.types.blobStorageComponent.push({
303
+ type: BlobStorageComponentType.Service,
304
+ options: {
305
+ config: {
306
+ vaultKeyId: (envVars.blobStorageEnableEncryption ?? false)
307
+ ? envVars.blobStorageEncryptionKeyId
308
+ : undefined
309
+ }
310
+ }
311
+ });
312
+ }
313
+ }
314
+ /**
315
+ * Configures the logging.
316
+ * @param coreConfig The core config.
317
+ * @param envVars The environment variables.
318
+ */
319
+ async function configureLogging(coreConfig, envVars) {
320
+ coreConfig.types.loggingConnector ??= [];
321
+ const loggingConnectorTypes = commaSeparatedListToArray(envVars.loggingConnector);
322
+ let additionalConnectorCount = 0;
323
+ for (const loggingConnector of loggingConnectorTypes) {
324
+ if (loggingConnector === LoggingConnectorType.Console) {
325
+ coreConfig.types.loggingConnector.push({
326
+ type: LoggingConnectorType.Console,
327
+ options: {
328
+ config: {
329
+ translateMessages: true,
330
+ hideGroups: true
331
+ }
332
+ }
333
+ });
334
+ additionalConnectorCount++;
335
+ }
336
+ else if (loggingConnector === LoggingConnectorType.EntityStorage) {
337
+ coreConfig.types.loggingConnector.push({
338
+ type: LoggingConnectorType.EntityStorage
339
+ });
340
+ additionalConnectorCount++;
341
+ }
342
+ }
343
+ // If more than one logging connector, then we need to add a multi connector
344
+ // and set it as the default one
345
+ if (additionalConnectorCount > 1) {
346
+ coreConfig.types.loggingConnector.push({
347
+ type: LoggingConnectorType.Multi,
348
+ options: {
349
+ loggingConnectorTypes
350
+ },
351
+ isDefault: true
352
+ });
353
+ }
354
+ else if (additionalConnectorCount > 0) {
355
+ // If only one connector, then we set it as the default one
356
+ coreConfig.types.loggingConnector[coreConfig.types.loggingConnector.length - 1].isDefault =
357
+ true;
358
+ }
359
+ if (additionalConnectorCount > 0) {
360
+ coreConfig.types.loggingComponent ??= [];
361
+ // We set the isDefault flag so that other components will get this service by default
362
+ // and not the generic one from the engine core
363
+ coreConfig.types.loggingComponent.push({ type: LoggingComponentType.Service, isDefault: true });
364
+ }
365
+ }
366
+ /**
367
+ * Configures the vault.
368
+ * @param coreConfig The core config.
369
+ * @param envVars The environment variables.
370
+ */
371
+ async function configureVault(coreConfig, envVars) {
372
+ coreConfig.types.vaultConnector ??= [];
373
+ if (envVars.vaultConnector === VaultConnectorType.EntityStorage) {
374
+ coreConfig.types.vaultConnector.push({
375
+ type: VaultConnectorType.EntityStorage
376
+ });
377
+ }
378
+ else if (envVars.vaultConnector === VaultConnectorType.Hashicorp) {
379
+ coreConfig.types.vaultConnector.push({
380
+ type: VaultConnectorType.Hashicorp,
381
+ options: {
382
+ config: {
383
+ endpoint: envVars.hashicorpVaultEndpoint ?? "",
384
+ token: envVars.hashicorpVaultToken ?? ""
385
+ }
386
+ }
387
+ });
388
+ }
389
+ }
390
+ /**
391
+ * Configures the background task.
392
+ * @param coreConfig The core config.
393
+ * @param envVars The environment variables.
394
+ */
395
+ async function configureBackgroundTask(coreConfig, envVars) {
396
+ coreConfig.types.backgroundTaskComponent ??= [];
397
+ if (Coerce.boolean(envVars.backgroundTasksEnabled) ?? false) {
398
+ coreConfig.types.backgroundTaskComponent.push({
399
+ type: BackgroundTaskComponentType.Service
400
+ });
401
+ }
402
+ }
403
+ /**
404
+ * Configures the event bud.
405
+ * @param coreConfig The core config.
406
+ * @param envVars The environment variables.
407
+ */
408
+ async function configureEventBus(coreConfig, envVars) {
409
+ coreConfig.types.eventBusConnector ??= [];
410
+ if (envVars.eventBusConnector === EventBusConnectorType.Local) {
411
+ coreConfig.types.eventBusConnector.push({
412
+ type: EventBusConnectorType.Local
413
+ });
414
+ }
415
+ if (coreConfig.types.eventBusConnector.length > 0) {
416
+ coreConfig.types.eventBusComponent ??= [];
417
+ coreConfig.types.eventBusComponent.push({ type: EventBusComponentType.Service });
418
+ }
419
+ }
420
+ /**
421
+ * Configures the telemetry.
422
+ * @param coreConfig The core config.
423
+ * @param envVars The environment variables.
424
+ */
425
+ async function configureTelemetry(coreConfig, envVars) {
426
+ coreConfig.types.telemetryConnector ??= [];
427
+ if (envVars.telemetryConnector === TelemetryConnectorType.EntityStorage) {
428
+ coreConfig.types.telemetryConnector.push({
429
+ type: TelemetryConnectorType.EntityStorage
430
+ });
431
+ }
432
+ if (coreConfig.types.telemetryConnector.length > 0) {
433
+ coreConfig.types.telemetryComponent ??= [];
434
+ coreConfig.types.telemetryComponent.push({ type: TelemetryComponentType.Service });
435
+ }
436
+ }
437
+ /**
438
+ * Configures the tenant.
439
+ * @param coreConfig The core config.
440
+ * @param envVars The environment variables.
441
+ */
442
+ async function configureTenant(coreConfig, envVars) {
443
+ if (Coerce.boolean(envVars.tenantEnabled) ?? false) {
444
+ coreConfig.types.tenantAdminComponent ??= [];
445
+ coreConfig.types.tenantAdminComponent.push({
446
+ type: TenantAdminComponentType.Service
447
+ });
448
+ coreConfig.types.tenantComponent ??= [];
449
+ coreConfig.types.tenantComponent.push({ type: TenantAdminComponentType.Service });
450
+ }
451
+ }
452
+ /**
453
+ * Configures the context id handlers.
454
+ * @param coreConfig The core config.
455
+ * @param envVars The environment variables.
456
+ */
457
+ async function configureContextIdHandlers(coreConfig, envVars) {
458
+ coreConfig.types.contextIdHandlerComponent ??= [];
459
+ coreConfig.types.contextIdHandlerComponent.push({
460
+ type: ContextIdHandlerComponentType.Did,
461
+ features: [CONTEXT_ID_HANDLER_FEATURE_DID]
462
+ });
463
+ if (Coerce.boolean(envVars.tenantEnabled) ?? false) {
464
+ coreConfig.types.contextIdHandlerComponent.push({
465
+ type: ContextIdHandlerComponentType.Tenant,
466
+ features: [CONTEXT_ID_HANDLER_FEATURE_TENANT]
467
+ });
468
+ }
469
+ }
470
+ /**
471
+ * Configures the messaging.
472
+ * @param coreConfig The core config.
473
+ * @param envVars The environment variables.
474
+ */
475
+ async function configureMessaging(coreConfig, envVars) {
476
+ if (Coerce.boolean(envVars.messagingEnabled) ?? false) {
477
+ coreConfig.types.messagingEmailConnector ??= [];
478
+ coreConfig.types.messagingSmsConnector ??= [];
479
+ coreConfig.types.messagingPushNotificationConnector ??= [];
480
+ if (envVars.messagingEmailConnector === MessagingEmailConnectorType.EntityStorage) {
481
+ coreConfig.types.messagingEmailConnector.push({
482
+ type: MessagingEmailConnectorType.EntityStorage
483
+ });
484
+ }
485
+ else if (envVars.messagingEmailConnector === MessagingEmailConnectorType.Aws) {
486
+ coreConfig.types.messagingEmailConnector.push({
487
+ type: MessagingEmailConnectorType.Aws,
488
+ options: {
489
+ config: {
490
+ region: envVars.awsSesRegion ?? "",
491
+ authMode: envVars.awsSesAuthMode,
492
+ accessKeyId: envVars.awsSesAccessKeyId,
493
+ secretAccessKey: envVars.awsSesSecretAccessKey,
494
+ endpoint: envVars.awsSesEndpoint
495
+ }
496
+ }
497
+ });
498
+ }
499
+ if (envVars.messagingSmsConnector === MessagingSmsConnectorType.EntityStorage) {
500
+ coreConfig.types.messagingSmsConnector.push({
501
+ type: MessagingSmsConnectorType.EntityStorage
502
+ });
503
+ }
504
+ else if (envVars.messagingSmsConnector === MessagingSmsConnectorType.Aws) {
505
+ coreConfig.types.messagingSmsConnector.push({
506
+ type: MessagingSmsConnectorType.Aws,
507
+ options: {
508
+ config: {
509
+ region: envVars.awsSesRegion ?? "",
510
+ authMode: envVars.awsSesAuthMode,
511
+ accessKeyId: envVars.awsSesAccessKeyId,
512
+ secretAccessKey: envVars.awsSesSecretAccessKey,
513
+ endpoint: envVars.awsSesEndpoint
514
+ }
515
+ }
516
+ });
517
+ }
518
+ if (envVars.messagingPushNotificationConnector ===
519
+ MessagingPushNotificationConnectorType.EntityStorage) {
520
+ coreConfig.types.messagingPushNotificationConnector.push({
521
+ type: MessagingPushNotificationConnectorType.EntityStorage
522
+ });
523
+ }
524
+ else if (envVars.messagingPushNotificationConnector === MessagingPushNotificationConnectorType.Aws) {
525
+ coreConfig.types.messagingPushNotificationConnector.push({
526
+ type: MessagingPushNotificationConnectorType.Aws,
527
+ options: {
528
+ config: {
529
+ region: envVars.awsSesRegion ?? "",
530
+ authMode: envVars.awsSesAuthMode,
531
+ accessKeyId: envVars.awsSesAccessKeyId,
532
+ secretAccessKey: envVars.awsSesSecretAccessKey,
533
+ endpoint: envVars.awsSesEndpoint,
534
+ applicationsSettings: Is.json(envVars.awsMessagingPushNotificationApplications)
535
+ ? JSON.parse(envVars.awsMessagingPushNotificationApplications)
536
+ : []
537
+ }
538
+ }
539
+ });
540
+ }
541
+ coreConfig.types.messagingAdminComponent ??= [];
542
+ coreConfig.types.messagingAdminComponent.push({
543
+ type: MessagingAdminComponentType.Service
544
+ });
545
+ coreConfig.types.messagingComponent ??= [];
546
+ coreConfig.types.messagingComponent.push({ type: MessagingComponentType.Service });
547
+ }
548
+ }
549
+ /**
550
+ * Configures the faucet.
551
+ * @param coreConfig The core config.
552
+ * @param envVars The environment variables.
553
+ */
554
+ async function configureFaucet(coreConfig, envVars) {
555
+ coreConfig.types.faucetConnector ??= [];
556
+ if (envVars.faucetConnector === FaucetConnectorType.EntityStorage) {
557
+ coreConfig.types.faucetConnector.push({
558
+ type: FaucetConnectorType.EntityStorage
559
+ });
560
+ }
561
+ else if (envVars.faucetConnector === FaucetConnectorType.Iota) {
562
+ const dltConfig = EngineTypeHelper.getConfigOfType(coreConfig, "dltConfig", DltConfigType.Iota);
563
+ coreConfig.types.faucetConnector.push({
564
+ type: FaucetConnectorType.Iota,
565
+ options: {
566
+ config: {
567
+ endpoint: envVars.iotaFaucetEndpoint ?? "",
568
+ clientOptions: dltConfig?.options?.config?.clientOptions ?? { url: "" },
569
+ network: dltConfig?.options?.config?.network ?? ""
570
+ }
571
+ }
572
+ });
573
+ }
574
+ }
575
+ /**
576
+ * Configures the wallet.
577
+ * @param coreConfig The core config.
578
+ * @param envVars The environment variables.
579
+ */
580
+ async function configureWallet(coreConfig, envVars) {
581
+ coreConfig.types.walletConnector ??= [];
582
+ if (envVars.walletConnector === WalletConnectorType.EntityStorage) {
583
+ coreConfig.types.walletConnector.push({
584
+ type: WalletConnectorType.EntityStorage
585
+ });
586
+ }
587
+ else if (envVars.walletConnector === WalletConnectorType.Iota) {
588
+ const dltConfig = EngineTypeHelper.getConfigOfType(coreConfig, "dltConfig", DltConfigType.Iota);
589
+ coreConfig.types.walletConnector.push({
590
+ type: WalletConnectorType.Iota,
591
+ options: {
592
+ config: dltConfig?.options?.config ?? {}
593
+ }
594
+ });
595
+ }
596
+ }
597
+ /**
598
+ * Configures the NFT.
599
+ * @param coreConfig The core config.
600
+ * @param envVars The environment variables.
601
+ */
602
+ async function configureNft(coreConfig, envVars) {
603
+ coreConfig.types.nftConnector ??= [];
604
+ if (envVars.nftConnector === NftConnectorType.EntityStorage) {
605
+ coreConfig.types.nftConnector.push({
606
+ type: NftConnectorType.EntityStorage
607
+ });
608
+ }
609
+ else if (envVars.nftConnector === NftConnectorType.Iota) {
610
+ const dltConfig = EngineTypeHelper.getConfigOfType(coreConfig, "dltConfig", DltConfigType.Iota);
611
+ coreConfig.types.nftConnector.push({
612
+ type: NftConnectorType.Iota,
613
+ options: {
614
+ config: dltConfig?.options?.config ?? {}
615
+ }
616
+ });
617
+ }
618
+ if (coreConfig.types.nftConnector.length > 0) {
619
+ coreConfig.types.nftComponent ??= [];
620
+ coreConfig.types.nftComponent.push({ type: NftComponentType.Service });
621
+ }
622
+ }
623
+ /**
624
+ * Configures the verifiable storage.
625
+ * @param coreConfig The core config.
626
+ * @param envVars The environment variables.
627
+ */
628
+ async function configureVerifiableStorage(coreConfig, envVars) {
629
+ coreConfig.types.verifiableStorageConnector ??= [];
630
+ if (envVars.verifiableStorageConnector === VerifiableStorageConnectorType.EntityStorage) {
631
+ coreConfig.types.verifiableStorageConnector.push({
632
+ type: VerifiableStorageConnectorType.EntityStorage
633
+ });
634
+ }
635
+ else if (envVars.verifiableStorageConnector === VerifiableStorageConnectorType.Iota) {
636
+ const dltConfig = EngineTypeHelper.getConfigOfType(coreConfig, "dltConfig", DltConfigType.Iota);
637
+ coreConfig.types.verifiableStorageConnector.push({
638
+ type: VerifiableStorageConnectorType.Iota,
639
+ options: {
640
+ config: dltConfig?.options?.config ?? {}
641
+ }
642
+ });
643
+ }
644
+ if (coreConfig.types.verifiableStorageConnector.length > 0) {
645
+ coreConfig.types.verifiableStorageComponent ??= [];
646
+ coreConfig.types.verifiableStorageComponent.push({
647
+ type: VerifiableStorageComponentType.Service
648
+ });
649
+ coreConfig.types.immutableProofComponent ??= [];
650
+ coreConfig.types.immutableProofComponent.push({
651
+ type: ImmutableProofComponentType.Service,
652
+ options: {
653
+ config: {
654
+ verificationMethodId: envVars.immutableProofVerificationMethodId
655
+ }
656
+ }
657
+ });
658
+ }
659
+ }
660
+ /**
661
+ * Configures the identity.
662
+ * @param coreConfig The core config.
663
+ * @param envVars The environment variables.
664
+ */
665
+ async function configureIdentity(coreConfig, envVars) {
666
+ coreConfig.types.identityConnector ??= [];
667
+ if (envVars.identityConnector === IdentityConnectorType.EntityStorage) {
668
+ coreConfig.types.identityConnector.push({
669
+ type: IdentityConnectorType.EntityStorage
670
+ });
671
+ }
672
+ else if (envVars.identityConnector === IdentityConnectorType.Iota) {
673
+ const dltConfig = EngineTypeHelper.getConfigOfType(coreConfig, "dltConfig", DltConfigType.Iota);
674
+ coreConfig.types.identityConnector.push({
675
+ type: IdentityConnectorType.Iota,
676
+ options: {
677
+ config: {
678
+ ...(dltConfig?.options?.config ?? {}),
679
+ walletAddressIndex: Coerce.integer(envVars.identityWalletAddressIndex) ?? 0
680
+ }
681
+ }
682
+ });
683
+ }
684
+ if (coreConfig.types.identityConnector.length > 0) {
685
+ coreConfig.types.identityComponent ??= [];
686
+ coreConfig.types.identityComponent.push({ type: IdentityComponentType.Service });
687
+ }
688
+ }
689
+ /**
690
+ * Configures the identity resolver.
691
+ * @param coreConfig The core config.
692
+ * @param envVars The environment variables.
693
+ */
694
+ async function configureIdentityResolver(coreConfig, envVars) {
695
+ coreConfig.types.identityResolverConnector ??= [];
696
+ if (envVars.identityResolverConnector === IdentityResolverConnectorType.EntityStorage) {
697
+ coreConfig.types.identityResolverConnector.push({
698
+ type: IdentityResolverConnectorType.EntityStorage
699
+ });
700
+ }
701
+ else if (envVars.identityResolverConnector === IdentityResolverConnectorType.Iota) {
702
+ const dltConfig = EngineTypeHelper.getConfigOfType(coreConfig, "dltConfig", DltConfigType.Iota);
703
+ coreConfig.types.identityResolverConnector.push({
704
+ type: IdentityResolverConnectorType.Iota,
705
+ options: {
706
+ config: dltConfig?.options?.config ?? {}
707
+ }
708
+ });
709
+ }
710
+ else if (envVars.identityResolverConnector === IdentityResolverConnectorType.Universal) {
711
+ coreConfig.types.identityResolverConnector.push({
712
+ type: IdentityResolverConnectorType.Universal,
713
+ options: {
714
+ config: {
715
+ endpoint: envVars.universalResolverEndpoint ?? ""
716
+ }
717
+ }
718
+ });
719
+ }
720
+ if (coreConfig.types.identityResolverConnector.length > 0) {
721
+ coreConfig.types.identityResolverComponent ??= [];
722
+ coreConfig.types.identityResolverComponent.push({
723
+ type: IdentityResolverComponentType.Service
724
+ });
725
+ }
726
+ }
727
+ /**
728
+ * Configures the identity profile.
729
+ * @param coreConfig The core config.
730
+ * @param envVars The environment variables.
731
+ */
732
+ async function configureIdentityProfile(coreConfig, envVars) {
733
+ coreConfig.types.identityProfileConnector ??= [];
734
+ if (envVars.identityProfileConnector === IdentityConnectorType.EntityStorage) {
735
+ coreConfig.types.identityProfileConnector.push({
736
+ type: IdentityProfileConnectorType.EntityStorage
737
+ });
738
+ }
739
+ if (coreConfig.types.identityProfileConnector.length > 0) {
740
+ coreConfig.types.identityProfileComponent ??= [];
741
+ coreConfig.types.identityProfileComponent.push({ type: IdentityProfileComponentType.Service });
742
+ }
743
+ }
744
+ /**
745
+ * Configures the attestation.
746
+ * @param coreConfig The core config.
747
+ * @param envVars The environment variables.
748
+ */
749
+ async function configureAttestation(coreConfig, envVars) {
750
+ coreConfig.types.attestationConnector ??= [];
751
+ if (envVars.attestationConnector === AttestationConnectorType.Nft) {
752
+ coreConfig.types.attestationConnector.push({
753
+ type: AttestationConnectorType.Nft
754
+ });
755
+ }
756
+ if (coreConfig.types.attestationConnector.length > 0) {
757
+ coreConfig.types.attestationComponent ??= [];
758
+ coreConfig.types.attestationComponent.push({
759
+ type: AttestationComponentType.Service,
760
+ options: {
761
+ config: {
762
+ verificationMethodId: envVars.attestationVerificationMethodId
763
+ }
764
+ }
765
+ });
766
+ }
767
+ }
768
+ /**
769
+ * Configures the auditable item graph.
770
+ * @param coreConfig The core config.
771
+ * @param envVars The environment variables.
772
+ */
773
+ async function configureAuditableItemGraph(coreConfig, envVars) {
774
+ if (Coerce.boolean(envVars.auditableItemGraphEnabled) ?? false) {
775
+ coreConfig.types.auditableItemGraphComponent ??= [];
776
+ coreConfig.types.auditableItemGraphComponent.push({
777
+ type: AuditableItemGraphComponentType.Service
778
+ });
779
+ }
780
+ }
781
+ /**
782
+ * Configures the auditable item stream.
783
+ * @param coreConfig The core config.
784
+ * @param envVars The environment variables.
785
+ */
786
+ async function configureAuditableItemStream(coreConfig, envVars) {
787
+ if (Coerce.boolean(envVars.auditableItemStreamEnabled) ?? false) {
788
+ coreConfig.types.auditableItemStreamComponent ??= [];
789
+ coreConfig.types.auditableItemStreamComponent.push({
790
+ type: AuditableItemStreamComponentType.Service
791
+ });
792
+ }
793
+ }
794
+ /**
795
+ * Configures the data processing.
796
+ * @param coreConfig The core config.
797
+ * @param envVars The environment variables.
798
+ */
799
+ async function configureDataProcessing(coreConfig, envVars) {
800
+ if (Coerce.boolean(envVars.dataProcessingEnabled) ?? false) {
801
+ coreConfig.types.dataProcessingComponent ??= [];
802
+ coreConfig.types.dataProcessingComponent.push({ type: DataProcessingComponentType.Service });
803
+ coreConfig.types.dataConverterConnector ??= [];
804
+ const converterConnectors = commaSeparatedListToArray(envVars.dataConverterConnectors);
805
+ for (const converterConnector of converterConnectors) {
806
+ coreConfig.types.dataConverterConnector.push({
807
+ type: converterConnector
808
+ });
809
+ }
810
+ coreConfig.types.dataExtractorConnector ??= [];
811
+ const extractorConnectors = commaSeparatedListToArray(envVars.dataExtractorConnectors);
812
+ for (const extractorConnector of extractorConnectors) {
813
+ coreConfig.types.dataExtractorConnector.push({
814
+ type: extractorConnector
815
+ });
816
+ }
817
+ }
818
+ }
819
+ /**
820
+ * Configures the document management.
821
+ * @param coreConfig The core config.
822
+ * @param envVars The environment variables.
823
+ */
824
+ async function configureDocumentManagement(coreConfig, envVars) {
825
+ if (Coerce.boolean(envVars.documentManagementEnabled) ?? false) {
826
+ coreConfig.types.documentManagementComponent ??= [];
827
+ coreConfig.types.documentManagementComponent.push({
828
+ type: DocumentManagementComponentType.Service
829
+ });
830
+ }
831
+ }
832
+ /**
833
+ * Configures the verifiable credential authentication.
834
+ * @param coreConfig The core config.
835
+ * @param envVars The environment variables.
836
+ */
837
+ async function configureVerifiableCredentialAuthentication(coreConfig, envVars) {
838
+ if (Coerce.boolean(envVars.vcAuthenticationEnabled) ?? false) {
839
+ // Can only perform VC authentication if identity component is available
840
+ coreConfig.types.authenticationGeneratorComponent ??= [];
841
+ coreConfig.types.authenticationGeneratorComponent.push({
842
+ type: AuthenticationGeneratorComponentType.VerifiableCredential,
843
+ options: {
844
+ config: {
845
+ verificationMethodId: envVars.vcAuthenticationVerificationMethodId ?? ""
846
+ }
847
+ },
848
+ features: ["verifiable-credential"]
849
+ });
850
+ }
851
+ }
852
+ /**
853
+ * Configures the trust components.
854
+ * @param coreConfig The core config.
855
+ * @param envVars The environment variables.
856
+ */
857
+ async function configureTrust(coreConfig, envVars) {
858
+ if (Coerce.boolean(envVars.trustEnabled) ?? false) {
859
+ coreConfig.types.trustComponent ??= [];
860
+ coreConfig.types.trustComponent.push({
861
+ type: TrustComponentType.Service
862
+ });
863
+ coreConfig.types.trustGeneratorComponent ??= [];
864
+ const trustGeneratorTypes = commaSeparatedListToArray(envVars.trustGenerators);
865
+ for (const trustGeneratorType of trustGeneratorTypes) {
866
+ coreConfig.types.trustGeneratorComponent.push({
867
+ type: trustGeneratorType,
868
+ options: {
869
+ config: {
870
+ verificationMethodId: envVars.trustVerificationMethodId ?? ""
871
+ }
872
+ }
873
+ });
874
+ }
875
+ coreConfig.types.trustVerifierComponent ??= [];
876
+ const trustVerifierTypes = commaSeparatedListToArray(envVars.trustVerifiers);
877
+ for (const trustVerifierType of trustVerifierTypes) {
878
+ coreConfig.types.trustVerifierComponent.push({
879
+ type: trustVerifierType
880
+ });
881
+ }
882
+ }
883
+ }
884
+ /**
885
+ * Configures the rights management.
886
+ * @param coreConfig The core config.
887
+ * @param envVars The environment variables.
888
+ */
889
+ async function configureRightsManagement(coreConfig, envVars) {
890
+ if (Coerce.boolean(envVars.rightsManagementEnabled) ?? false) {
891
+ coreConfig.types.rightsManagementPapComponent ??= [];
892
+ coreConfig.types.rightsManagementPapComponent.push({
893
+ type: RightsManagementPapComponentType.Service
894
+ });
895
+ coreConfig.types.rightsManagementPmpComponent ??= [];
896
+ coreConfig.types.rightsManagementPmpComponent.push({
897
+ type: RightsManagementPmpComponentType.Service
898
+ });
899
+ coreConfig.types.rightsManagementPipComponent ??= [];
900
+ coreConfig.types.rightsManagementPipComponent.push({
901
+ type: RightsManagementPipComponentType.Service
902
+ });
903
+ coreConfig.types.rightsManagementPxpComponent ??= [];
904
+ coreConfig.types.rightsManagementPxpComponent.push({
905
+ type: RightsManagementPxpComponentType.Service
906
+ });
907
+ coreConfig.types.rightsManagementPdpComponent ??= [];
908
+ coreConfig.types.rightsManagementPdpComponent.push({
909
+ type: RightsManagementPdpComponentType.Service
910
+ });
911
+ coreConfig.types.rightsManagementPepComponent ??= [];
912
+ coreConfig.types.rightsManagementPepComponent.push({
913
+ type: RightsManagementPepComponentType.Service
914
+ });
915
+ coreConfig.types.rightsManagementPnpComponent ??= [];
916
+ coreConfig.types.rightsManagementPnpComponent.push({
917
+ type: RightsManagementPnpComponentType.Service,
918
+ options: {
919
+ config: {
920
+ baseCallbackUrl: envVars.rightsManagementBaseCallbackUrl ?? "",
921
+ negotiationComponentCreator: async (url) => new PolicyNegotiationPointRestClient({ endpoint: url })
922
+ }
923
+ }
924
+ });
925
+ coreConfig.types.rightsManagementPnapComponent ??= [];
926
+ coreConfig.types.rightsManagementPnapComponent.push({
927
+ type: RightsManagementPnapComponentType.Service
928
+ });
929
+ coreConfig.types.rightsManagementDapComponent ??= [];
930
+ coreConfig.types.rightsManagementDapComponent.push({
931
+ type: RightsManagementDapComponentType.Service
932
+ });
933
+ coreConfig.types.rightsManagementDarpComponent ??= [];
934
+ coreConfig.types.rightsManagementDarpComponent.push({
935
+ type: RightsManagementDarpComponentType.Service,
936
+ options: {
937
+ config: {
938
+ dataAccessComponentCreator: async (url) => new DataAccessPointRestClient({ endpoint: url })
939
+ }
940
+ }
941
+ });
942
+ coreConfig.types.rightsManagementDataAccessHandlerComponent ??= [];
943
+ const dataAccessHandlerTypes = commaSeparatedListToArray(envVars.rightsManagementDataAccessHandlers);
944
+ for (const dataAccessHandlerType of dataAccessHandlerTypes) {
945
+ coreConfig.types.rightsManagementDataAccessHandlerComponent.push({
946
+ type: dataAccessHandlerType
947
+ });
948
+ }
949
+ coreConfig.types.rightsManagementPolicyArbiterComponent ??= [];
950
+ const policyArbiterTypes = commaSeparatedListToArray(envVars.rightsManagementPolicyArbiters);
951
+ for (const policyArbiterType of policyArbiterTypes) {
952
+ coreConfig.types.rightsManagementPolicyArbiterComponent.push({
953
+ type: policyArbiterType
954
+ });
955
+ }
956
+ coreConfig.types.rightsManagementPolicyEnforcementProcessorComponent ??= [];
957
+ const policyEnforcementProcessTypes = commaSeparatedListToArray(envVars.rightsManagementPolicyEnforcementProcessors);
958
+ for (const policyEnforcementProcessorType of policyEnforcementProcessTypes) {
959
+ coreConfig.types.rightsManagementPolicyEnforcementProcessorComponent.push({
960
+ type: policyEnforcementProcessorType
961
+ });
962
+ }
963
+ coreConfig.types.rightsManagementPolicyExecutionActionComponent ??= [];
964
+ const policyExecutionActionTypes = commaSeparatedListToArray(envVars.rightsManagementPolicyExecutionActions);
965
+ for (const policyExecutionActionType of policyExecutionActionTypes) {
966
+ coreConfig.types.rightsManagementPolicyExecutionActionComponent.push({
967
+ type: policyExecutionActionType
968
+ });
969
+ }
970
+ coreConfig.types.rightsManagementPolicyInformationSourceComponent ??= [];
971
+ const policyInformationSourceTypes = commaSeparatedListToArray(envVars.rightsManagementPolicyInformationSources);
972
+ for (const policyInformationSourceType of policyInformationSourceTypes) {
973
+ coreConfig.types.rightsManagementPolicyInformationSourceComponent.push({
974
+ type: policyInformationSourceType
975
+ });
976
+ }
977
+ coreConfig.types.rightsManagementPolicyRequesterComponent ??= [];
978
+ const policyRequesterTypes = commaSeparatedListToArray(envVars.rightsManagementPolicyRequesters);
979
+ for (const policyRequesterType of policyRequesterTypes) {
980
+ coreConfig.types.rightsManagementPolicyRequesterComponent.push({
981
+ type: policyRequesterType
982
+ });
983
+ }
984
+ coreConfig.types.rightsManagementPolicyNegotiatorComponent ??= [];
985
+ const policyNegotiatorTypes = commaSeparatedListToArray(envVars.rightsManagementPolicyNegotiators);
986
+ for (const policyNegotiatorType of policyNegotiatorTypes) {
987
+ coreConfig.types.rightsManagementPolicyNegotiatorComponent.push({
988
+ type: policyNegotiatorType
989
+ });
990
+ }
991
+ }
992
+ }
993
+ /**
994
+ * Configures the task scheduler.
995
+ * @param coreConfig The core config.
996
+ * @param envVars The environment variables.
997
+ */
998
+ async function configureTaskScheduler(coreConfig, envVars) {
999
+ if (Coerce.boolean(envVars.taskSchedulerEnabled) ?? false) {
1000
+ coreConfig.types.taskSchedulerComponent ??= [];
1001
+ coreConfig.types.taskSchedulerComponent.push({
1002
+ type: TaskSchedulerComponentType.Service
1003
+ });
1004
+ }
1005
+ }
1006
+ /**
1007
+ * Configures the synchronised storage.
1008
+ * @param coreConfig The core config.
1009
+ * @param envVars The environment variables.
1010
+ */
1011
+ async function configureSynchronisedStorage(coreConfig, envVars) {
1012
+ if (Is.arrayValue(coreConfig.types.identityResolverComponent) &&
1013
+ (Coerce.boolean(envVars.synchronisedStorageEnabled) ?? false)) {
1014
+ // Check if the config provides a custom verifiable storage key id
1015
+ let verifiableStorageKeyId = Coerce.string(envVars.synchronisedStorageVerifiableStorageKeyId);
1016
+ if (!Is.stringValue(verifiableStorageKeyId)) {
1017
+ // No custom key so default to the network setting
1018
+ verifiableStorageKeyId = envVars.iotaNetwork;
1019
+ }
1020
+ coreConfig.types.synchronisedStorageComponent ??= [];
1021
+ coreConfig.types.synchronisedStorageComponent.push({
1022
+ type: SynchronisedStorageComponentType.Service,
1023
+ options: {
1024
+ config: {
1025
+ verifiableStorageKeyId: verifiableStorageKeyId ?? "",
1026
+ blobStorageEncryptionKeyId: envVars.synchronisedStorageBlobStorageEncryptionKeyId,
1027
+ entityUpdateIntervalMinutes: Coerce.number(envVars.synchronisedStorageEntityUpdateIntervalMinutes),
1028
+ consolidationIntervalMinutes: Coerce.number(envVars.synchronisedStorageConsolidationIntervalMinutes),
1029
+ consolidationBatchSize: Coerce.number(envVars.synchronisedStorageConsolidationBatchSize),
1030
+ maxConsolidations: Coerce.number(envVars.synchronisedStorageMaxConsolidations)
1031
+ }
1032
+ }
1033
+ });
1034
+ // If there is a trusted url set, we need to add a client
1035
+ // and give it a feature of trusted so that when the synchronised
1036
+ // storage is created it can pickup the correct component
1037
+ if (Is.stringValue(envVars.synchronisedStorageTrustedUrl)) {
1038
+ coreConfig.types.synchronisedStorageComponent.push({
1039
+ type: SynchronisedStorageComponentType.RestClient,
1040
+ options: {
1041
+ endpoint: envVars.synchronisedStorageTrustedUrl
1042
+ },
1043
+ features: ["trusted"]
1044
+ });
1045
+ }
1046
+ }
1047
+ }
1048
+ /**
1049
+ * Configures the federated catalogue.
1050
+ * @param coreConfig The core config.
1051
+ * @param envVars The environment variables.
1052
+ */
1053
+ async function configureFederatedCatalogue(coreConfig, envVars) {
1054
+ if (Coerce.boolean(envVars.federatedCatalogueEnabled) ?? false) {
1055
+ coreConfig.types.federatedCatalogueComponent ??= [];
1056
+ coreConfig.types.federatedCatalogueComponent.push({
1057
+ type: FederatedCatalogueComponentType.Service,
1058
+ options: {}
1059
+ });
1060
+ coreConfig.types.federatedCatalogueFilterComponent ??= [];
1061
+ const filters = commaSeparatedListToArray(envVars.federatedCatalogueFilters);
1062
+ for (const filter of filters) {
1063
+ coreConfig.types.federatedCatalogueFilterComponent.push({
1064
+ type: filter,
1065
+ options: {}
1066
+ });
1067
+ }
1068
+ }
1069
+ }
1070
+ /**
1071
+ * Configures the data space connector.
1072
+ * @param coreConfig The core config.
1073
+ * @param envVars The environment variables.
1074
+ */
1075
+ async function configureDataSpaceConnector(coreConfig, envVars) {
1076
+ if (Coerce.boolean(envVars.dataSpaceConnectorEnabled) ?? false) {
1077
+ coreConfig.types.dataSpaceConnectorComponent ??= [];
1078
+ coreConfig.types.dataSpaceConnectorComponent.push({
1079
+ type: DataSpaceConnectorComponentType.Service,
1080
+ options: {
1081
+ config: {
1082
+ retainActivityLogsFor: Coerce.number(envVars.dataSpaceConnectorRetainActivityLogsFor),
1083
+ activityLogsCleanUpInterval: Coerce.number(envVars.dataSpaceConnectorActivityLogsCleanUpInterval)
1084
+ }
1085
+ }
1086
+ });
1087
+ }
1088
+ }
1089
+ /**
1090
+ * Configures the DLT.
1091
+ * @param coreConfig The core config.
1092
+ * @param envVars The environment variables.
1093
+ */
1094
+ async function configureDlt(coreConfig, envVars) {
1095
+ // Create centralized DLT configuration for IOTA if essential IOTA variables are set
1096
+ if (Is.stringValue(envVars.iotaNodeEndpoint) && Is.stringValue(envVars.iotaNetwork)) {
1097
+ coreConfig.types.dltConfig ??= [];
1098
+ const gasStationConfig = Is.stringValue(envVars.iotaGasStationEndpoint) &&
1099
+ Is.stringValue(envVars.iotaGasStationAuthToken)
1100
+ ? {
1101
+ gasStationUrl: envVars.iotaGasStationEndpoint,
1102
+ gasStationAuthToken: envVars.iotaGasStationAuthToken
1103
+ }
1104
+ : undefined;
1105
+ coreConfig.types.dltConfig.push({
1106
+ type: DltConfigType.Iota,
1107
+ isDefault: true,
1108
+ options: {
1109
+ config: {
1110
+ clientOptions: {
1111
+ url: envVars.iotaNodeEndpoint ?? ""
1112
+ },
1113
+ network: envVars.iotaNetwork ?? "",
1114
+ coinType: Coerce.number(envVars.iotaCoinType),
1115
+ gasStation: gasStationConfig
1116
+ }
1117
+ }
1118
+ });
1119
+ }
1120
+ }
1121
+ /**
1122
+ * Converts a comma separated list to an array.
1123
+ * @param value The comma separated list.
1124
+ * @returns The array.
1125
+ */
1126
+ function commaSeparatedListToArray(value) {
1127
+ return (value ?? "")
1128
+ .split(",")
1129
+ .map(item => item.trim())
1130
+ .filter(item => item.length > 0);
1131
+ }
1132
+ //# sourceMappingURL=engineEnvBuilder.js.map