@twin.org/engine-types 0.0.2-next.4 → 0.0.2-next.6

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.
@@ -17,6 +17,7 @@ var entityStorageConnectorMongodb = require('@twin.org/entity-storage-connector-
17
17
  var entityStorageConnectorMysql = require('@twin.org/entity-storage-connector-mysql');
18
18
  var entityStorageConnectorPostgresql = require('@twin.org/entity-storage-connector-postgresql');
19
19
  var entityStorageConnectorScylladb = require('@twin.org/entity-storage-connector-scylladb');
20
+ var entityStorageConnectorSynchronised = require('@twin.org/entity-storage-connector-synchronised');
20
21
  var entityStorageModels = require('@twin.org/entity-storage-models');
21
22
  var entityStorageRestClient = require('@twin.org/entity-storage-rest-client');
22
23
  var entityStorageService = require('@twin.org/entity-storage-service');
@@ -74,6 +75,8 @@ var nftService = require('@twin.org/nft-service');
74
75
  var rightsManagementRestClient = require('@twin.org/rights-management-rest-client');
75
76
  var rightsManagementService = require('@twin.org/rights-management-service');
76
77
  var rightsManagementPapService = require('@twin.org/rights-management-pap-service');
78
+ var synchronisedStorageRestClient = require('@twin.org/synchronised-storage-rest-client');
79
+ var synchronisedStorageService = require('@twin.org/synchronised-storage-service');
77
80
  var backgroundTaskScheduler = require('@twin.org/background-task-scheduler');
78
81
  var telemetryConnectorEntityStorage = require('@twin.org/telemetry-connector-entity-storage');
79
82
  var telemetryModels = require('@twin.org/telemetry-models');
@@ -138,8 +141,8 @@ function initialiseAttestationConnector(engineCore, context, instanceConfig, ove
138
141
  let instanceType;
139
142
  if (type === AttestationConnectorType.Nft) {
140
143
  connector = new attestationConnectorNft.NftAttestationConnector({
141
- identityConnectorType: context.defaultTypes.identityConnector,
142
- nftConnectorType: context.defaultTypes.nftConnector,
144
+ identityConnectorType: engineCore.getRegisteredInstanceType("identityConnector"),
145
+ nftConnectorType: engineCore.getRegisteredInstanceType("nftConnector"),
143
146
  ...instanceConfig.options
144
147
  });
145
148
  instanceType = attestationConnectorNft.NftAttestationConnector.NAMESPACE;
@@ -258,7 +261,11 @@ const EntityStorageConnectorType = {
258
261
  /**
259
262
  * Postgre SQL.
260
263
  */
261
- PostgreSql: "postgresql"
264
+ PostgreSql: "postgresql",
265
+ /**
266
+ * Synchronised.
267
+ */
268
+ Synchronised: "synchronised"
262
269
  };
263
270
 
264
271
  // Copyright 2024 IOTA Stiftung.
@@ -269,6 +276,7 @@ const EntityStorageConnectorType = {
269
276
  * @param context The context for the engine.
270
277
  * @param typeCustom Override the type of connector to use instead of default configuration.
271
278
  * @param schema The schema for the entity storage.
279
+ * @returns The name of the instance type that was created.
272
280
  * @throws GeneralError if the connector type is unknown.
273
281
  */
274
282
  function initialiseEntityStorageConnector(engineCore, context, typeCustom, schema) {
@@ -389,6 +397,23 @@ function initialiseEntityStorageConnector(engineCore, context, typeCustom, schem
389
397
  }
390
398
  });
391
399
  }
400
+ else if (type === EntityStorageConnectorType.Synchronised) {
401
+ // Create the entity storage that is wrapped by the synchronised connector
402
+ // by removing the custom type it will default to the standard storage
403
+ // mechanism for entity storage
404
+ const wrappedInstanceName = initialiseEntityStorageConnector(engineCore, context, undefined, schema);
405
+ // Use the wrapped instance name as the entity storage connector type
406
+ // for the synchronised connector
407
+ entityStorageConnector = new entityStorageConnectorSynchronised.SynchronisedEntityStorageConnector({
408
+ entitySchema: schema,
409
+ ...entityStorageConfig.options,
410
+ entityStorageConnectorType: wrappedInstanceName,
411
+ eventBusComponentType: engineCore.getRegisteredInstanceType("eventBusComponent"),
412
+ config: {
413
+ ...entityStorageConfig.options.config
414
+ }
415
+ });
416
+ }
392
417
  else {
393
418
  throw new core.GeneralError("engineCore", "connectorUnknownType", {
394
419
  type,
@@ -401,6 +426,7 @@ function initialiseEntityStorageConnector(engineCore, context, typeCustom, schem
401
426
  });
402
427
  entityStorageModels.EntityStorageConnectorFactory.register(instanceName, () => entityStorageConnector);
403
428
  }
429
+ return instanceName;
404
430
  }
405
431
  /**
406
432
  * Initialise the entity storage connector.
@@ -492,8 +518,8 @@ function initialiseAuditableItemGraphComponent(engineCore, context, instanceConf
492
518
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.vertexEntityStorageType, "AuditableItemGraphVertex");
493
519
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.changesetEntityStorageType, "AuditableItemGraphChangeset");
494
520
  component = new auditableItemGraphService.AuditableItemGraphService({
495
- immutableProofComponentType: context.defaultTypes.immutableProofComponent,
496
- eventBusComponentType: context.defaultTypes.eventBusComponent,
521
+ immutableProofComponentType: engineCore.getRegisteredInstanceType("immutableProofComponent"),
522
+ eventBusComponentType: engineCore.getRegisteredInstanceTypeOptional("eventBusComponent"),
497
523
  ...instanceConfig.options
498
524
  });
499
525
  instanceType = core.StringHelper.kebabCase("AuditableItemGraphService");
@@ -555,8 +581,8 @@ function initialiseAuditableItemStreamComponent(engineCore, context, instanceCon
555
581
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.streamEntityStorageType, "AuditableItemStream");
556
582
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.streamEntryEntityStorageType, "AuditableItemStreamEntry");
557
583
  component = new auditableItemStreamService.AuditableItemStreamService({
558
- immutableProofComponentType: context.defaultTypes.immutableProofComponent,
559
- eventBusComponentType: context.defaultTypes.eventBusComponent,
584
+ immutableProofComponentType: engineCore.getRegisteredInstanceType("immutableProofComponent"),
585
+ eventBusComponentType: engineCore.getRegisteredInstanceTypeOptional("eventBusComponent"),
560
586
  ...instanceConfig.options
561
587
  });
562
588
  instanceType = core.StringHelper.kebabCase("AuditableItemStreamService");
@@ -615,7 +641,7 @@ function initialiseBackgroundTaskConnector(engineCore, context, instanceConfig,
615
641
  backgroundTaskConnectorEntityStorage.initSchema();
616
642
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.backgroundTaskEntityStorageType, "BackgroundTask");
617
643
  connector = new backgroundTaskConnectorEntityStorage.EntityStorageBackgroundTaskConnector({
618
- loggingConnectorType: context.defaultTypes.loggingConnector,
644
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
619
645
  ...instanceConfig.options
620
646
  });
621
647
  instanceType = backgroundTaskConnectorEntityStorage.EntityStorageBackgroundTaskConnector.NAMESPACE;
@@ -784,7 +810,7 @@ function initialiseBlobStorageComponent(engineCore, context, instanceConfig, ove
784
810
  blobStorageService.initSchema();
785
811
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.entryEntityStorageType, "BlobStorageEntry");
786
812
  component = new blobStorageService.BlobStorageService({
787
- vaultConnectorType: context.defaultTypes.vaultConnector,
813
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
788
814
  ...instanceConfig.options
789
815
  });
790
816
  instanceType = core.StringHelper.kebabCase("BlobStorageService");
@@ -1009,10 +1035,10 @@ function initialiseDocumentManagementComponent(engineCore, context, instanceConf
1009
1035
  let instanceType;
1010
1036
  if (type === DocumentManagementComponentType.Service) {
1011
1037
  component = new documentManagementService.DocumentManagementService({
1012
- auditableItemGraphComponentType: context.defaultTypes.auditableItemGraphComponent,
1013
- blobStorageComponentType: context.defaultTypes.blobStorageComponent,
1014
- attestationComponentType: context.defaultTypes.attestationComponent,
1015
- dataProcessingComponentType: context.defaultTypes.dataProcessingComponent,
1038
+ auditableItemGraphComponentType: engineCore.getRegisteredInstanceType("auditableItemGraphComponent"),
1039
+ blobStorageComponentType: engineCore.getRegisteredInstanceType("blobStorageComponent"),
1040
+ attestationComponentType: engineCore.getRegisteredInstanceType("attestationComponent"),
1041
+ dataProcessingComponentType: engineCore.getRegisteredInstanceType("dataProcessingComponent"),
1016
1042
  ...instanceConfig.options
1017
1043
  });
1018
1044
  instanceType = core.StringHelper.kebabCase("DocumentManagementService");
@@ -1086,7 +1112,7 @@ function initialiseEventBusConnector(engineCore, context, instanceConfig, overri
1086
1112
  let instanceType;
1087
1113
  if (type === EventBusConnectorType.Local) {
1088
1114
  connector = new eventBusConnectorLocal.LocalEventBusConnector({
1089
- loggingConnectorType: context.defaultTypes.loggingConnector,
1115
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
1090
1116
  ...instanceConfig.options
1091
1117
  });
1092
1118
  instanceType = eventBusConnectorLocal.LocalEventBusConnector.NAMESPACE;
@@ -1120,14 +1146,14 @@ function initialiseEventBusComponent(engineCore, context, instanceConfig, overri
1120
1146
  let instanceType;
1121
1147
  if (type === EventBusComponentType.Service) {
1122
1148
  component = new eventBusService.EventBusService({
1123
- eventBusConnectorType: context.defaultTypes.eventBusConnector,
1149
+ eventBusConnectorType: engineCore.getRegisteredInstanceType("eventBusConnector"),
1124
1150
  ...instanceConfig.options
1125
1151
  });
1126
1152
  instanceType = core.StringHelper.kebabCase("EventBusService");
1127
1153
  }
1128
1154
  else if (type === EventBusComponentType.SocketClient) {
1129
1155
  component = new eventBusSocketClient.EventBusSocketClient({
1130
- loggingComponentType: context.defaultTypes.loggingConnector,
1156
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
1131
1157
  ...instanceConfig.options
1132
1158
  });
1133
1159
  instanceType = core.StringHelper.kebabCase("EventBusSocketClient");
@@ -1180,7 +1206,8 @@ function initialiseFaucetConnector(engineCore, context, instanceConfig, override
1180
1206
  let connector;
1181
1207
  let instanceType;
1182
1208
  if (type === FaucetConnectorType.Iota) {
1183
- const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === context.defaultTypes.dltConfig);
1209
+ const defaultConfigType = engineCore.getRegisteredInstanceType("dltConfig");
1210
+ const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === defaultConfigType);
1184
1211
  connector = new walletConnectorIota.IotaFaucetConnector({
1185
1212
  ...instanceConfig.options,
1186
1213
  config: {
@@ -1251,8 +1278,8 @@ function initialiseFederatedCatalogueComponent(engineCore, context, instanceConf
1251
1278
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.serviceOfferingEntityStorageType, "ServiceOfferingEntry");
1252
1279
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.dataSpaceConnectorStorageType, "DataSpaceConnectorEntry");
1253
1280
  component = new federatedCatalogueService.FederatedCatalogueService({
1254
- loggingConnectorType: context.defaultTypes.loggingConnector,
1255
- identityResolverComponentType: context.defaultTypes.identityResolverComponent,
1281
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
1282
+ identityResolverComponentType: engineCore.getRegisteredInstanceType("identityResolverComponent"),
1256
1283
  ...instanceConfig.options
1257
1284
  });
1258
1285
  instanceType = core.StringHelper.kebabCase("FederatedCatalogueService");
@@ -1329,9 +1356,10 @@ function initialiseIdentityConnector(engineCore, context, instanceConfig, overri
1329
1356
  let connector;
1330
1357
  let instanceType;
1331
1358
  if (type === IdentityConnectorType.Iota) {
1332
- const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === context.defaultTypes.dltConfig);
1359
+ const defaultConfigType = engineCore.getRegisteredInstanceType("dltConfig");
1360
+ const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === defaultConfigType);
1333
1361
  connector = new identityConnectorIota.IotaIdentityConnector({
1334
- vaultConnectorType: context.defaultTypes.vaultConnector,
1362
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
1335
1363
  ...instanceConfig.options,
1336
1364
  config: {
1337
1365
  ...dltConfig?.options?.config,
@@ -1344,7 +1372,7 @@ function initialiseIdentityConnector(engineCore, context, instanceConfig, overri
1344
1372
  identityConnectorEntityStorage.initSchema({ includeProfile: false });
1345
1373
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.didDocumentEntityStorageType, "IdentityDocument");
1346
1374
  connector = new identityConnectorEntityStorage.EntityStorageIdentityConnector({
1347
- vaultConnectorType: context.defaultTypes.vaultConnector,
1375
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
1348
1376
  ...instanceConfig.options
1349
1377
  });
1350
1378
  instanceType = identityConnectorEntityStorage.EntityStorageIdentityConnector.NAMESPACE;
@@ -1482,7 +1510,7 @@ function initialiseIdentityProfileComponent(engineCore, context, instanceConfig,
1482
1510
  let instanceType;
1483
1511
  if (type === IdentityProfileComponentType.Service) {
1484
1512
  component = new identityService.IdentityProfileService({
1485
- profileEntityConnectorType: context.defaultTypes.identityProfileConnector,
1513
+ profileEntityConnectorType: engineCore.getRegisteredInstanceType("identityProfileConnector"),
1486
1514
  ...instanceConfig.options
1487
1515
  });
1488
1516
  instanceType = core.StringHelper.kebabCase("IdentityProfileService");
@@ -1563,7 +1591,8 @@ function initialiseIdentityResolverConnector(engineCore, context, instanceConfig
1563
1591
  let connector;
1564
1592
  let instanceType;
1565
1593
  if (type === IdentityResolverConnectorType.Iota) {
1566
- const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === context.defaultTypes.dltConfig);
1594
+ const defaultConfigType = engineCore.getRegisteredInstanceType("dltConfig");
1595
+ const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === defaultConfigType);
1567
1596
  connector = new identityConnectorIota.IotaIdentityResolverConnector({
1568
1597
  ...instanceConfig.options,
1569
1598
  config: {
@@ -1577,7 +1606,7 @@ function initialiseIdentityResolverConnector(engineCore, context, instanceConfig
1577
1606
  identityConnectorEntityStorage.initSchema({ includeProfile: false });
1578
1607
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.didDocumentEntityStorageType, "IdentityDocument");
1579
1608
  connector = new identityConnectorEntityStorage.EntityStorageIdentityResolverConnector({
1580
- vaultConnectorType: context.defaultTypes.vaultConnector,
1609
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
1581
1610
  ...instanceConfig.options
1582
1611
  });
1583
1612
  instanceType = identityConnectorEntityStorage.EntityStorageIdentityResolverConnector.NAMESPACE;
@@ -1616,8 +1645,9 @@ function initialiseIdentityResolverComponent(engineCore, context, instanceConfig
1616
1645
  let component;
1617
1646
  let instanceType;
1618
1647
  if (type === IdentityResolverComponentType.Service) {
1648
+ const defaultIdentityResolverType = engineCore.getRegisteredInstanceType("identityResolverConnector");
1619
1649
  component = new identityService.IdentityResolverService({
1620
- fallbackResolverConnectorType: context.defaultTypes.identityResolverConnector !== IdentityResolverConnectorType.Universal
1650
+ fallbackResolverConnectorType: defaultIdentityResolverType !== IdentityResolverConnectorType.Universal
1621
1651
  ? IdentityResolverConnectorType.Universal
1622
1652
  : undefined,
1623
1653
  ...instanceConfig.options
@@ -1679,10 +1709,10 @@ function initialiseImmutableProofComponent(engineCore, context, instanceConfig,
1679
1709
  immutableProofService.initSchema();
1680
1710
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.immutableProofEntityStorageType, "ImmutableProof");
1681
1711
  component = new immutableProofService.ImmutableProofService({
1682
- verifiableStorageType: context.defaultTypes.verifiableStorageConnector,
1683
- identityConnectorType: context.defaultTypes.identityConnector,
1684
- backgroundTaskConnectorType: context.defaultTypes.backgroundTaskConnector,
1685
- eventBusComponentType: context.defaultTypes.eventBusComponent,
1712
+ verifiableStorageType: engineCore.getRegisteredInstanceType("verifiableStorageConnector"),
1713
+ identityConnectorType: engineCore.getRegisteredInstanceType("identityConnector"),
1714
+ backgroundTaskConnectorType: engineCore.getRegisteredInstanceType("backgroundTaskConnector"),
1715
+ eventBusComponentType: engineCore.getRegisteredInstanceTypeOptional("eventBusComponent"),
1686
1716
  ...instanceConfig.options
1687
1717
  });
1688
1718
  instanceType = core.StringHelper.kebabCase("ImmutableProofService");
@@ -1805,7 +1835,7 @@ function initialiseLoggingComponent(engineCore, context, instanceConfig, overrid
1805
1835
  let instanceType;
1806
1836
  if (type === LoggingComponentType.Service) {
1807
1837
  component = new loggingService.LoggingService({
1808
- loggingConnectorType: context.defaultTypes.loggingConnector,
1838
+ loggingConnectorType: engineCore.getRegisteredInstanceType("loggingConnector"),
1809
1839
  ...instanceConfig.options
1810
1840
  });
1811
1841
  instanceType = core.StringHelper.kebabCase("LoggingService");
@@ -1912,14 +1942,14 @@ function initialiseMessagingEmailConnector(engineCore, context, instanceConfig,
1912
1942
  messagingConnectorEntityStorage.initSchema({ email: true, sms: false, pushNotification: false });
1913
1943
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.messagingEmailEntryStorageConnectorType, "EmailEntry");
1914
1944
  connector = new messagingConnectorEntityStorage.EntityStorageMessagingEmailConnector({
1915
- loggingConnectorType: context.defaultTypes.loggingConnector,
1945
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
1916
1946
  ...instanceConfig.options
1917
1947
  });
1918
1948
  instanceType = messagingConnectorEntityStorage.EntityStorageMessagingEmailConnector.NAMESPACE;
1919
1949
  }
1920
1950
  else if (type === MessagingEmailConnectorType.Aws) {
1921
1951
  connector = new messagingConnectorAws.AwsMessagingEmailConnector({
1922
- loggingConnectorType: context.defaultTypes.loggingConnector,
1952
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
1923
1953
  ...instanceConfig.options
1924
1954
  });
1925
1955
  instanceType = messagingConnectorAws.AwsMessagingEmailConnector.NAMESPACE;
@@ -1955,14 +1985,14 @@ function initialiseMessagingSmsConnector(engineCore, context, instanceConfig, ov
1955
1985
  messagingConnectorEntityStorage.initSchema({ email: false, sms: true, pushNotification: false });
1956
1986
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.messagingSmsEntryStorageConnectorType, "SmsEntry");
1957
1987
  connector = new messagingConnectorEntityStorage.EntityStorageMessagingSmsConnector({
1958
- loggingConnectorType: context.defaultTypes.loggingConnector,
1988
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
1959
1989
  ...instanceConfig.options
1960
1990
  });
1961
1991
  instanceType = messagingConnectorEntityStorage.EntityStorageMessagingSmsConnector.NAMESPACE;
1962
1992
  }
1963
1993
  else if (type === MessagingSmsConnectorType.Aws) {
1964
1994
  connector = new messagingConnectorAws.AwsMessagingSmsConnector({
1965
- loggingConnectorType: context.defaultTypes.loggingConnector,
1995
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
1966
1996
  ...instanceConfig.options
1967
1997
  });
1968
1998
  instanceType = messagingConnectorAws.AwsMessagingSmsConnector.NAMESPACE;
@@ -1999,14 +2029,14 @@ function initialiseMessagingPushNotificationConnector(engineCore, context, insta
1999
2029
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.messagingDeviceEntryStorageConnectorType, "PushNotificationDeviceEntry");
2000
2030
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.messagingMessageEntryStorageConnectorType, "PushNotificationMessageEntry");
2001
2031
  connector = new messagingConnectorEntityStorage.EntityStorageMessagingPushNotificationConnector({
2002
- loggingConnectorType: context.defaultTypes.loggingConnector,
2032
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
2003
2033
  ...instanceConfig.options
2004
2034
  });
2005
2035
  instanceType = messagingConnectorEntityStorage.EntityStorageMessagingPushNotificationConnector.NAMESPACE;
2006
2036
  }
2007
2037
  else if (type === MessagingPushNotificationConnectorType.Aws) {
2008
2038
  connector = new messagingConnectorAws.AwsMessagingPushNotificationConnector({
2009
- loggingConnectorType: context.defaultTypes.loggingConnector,
2039
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
2010
2040
  ...instanceConfig.options
2011
2041
  });
2012
2042
  instanceType = messagingConnectorAws.AwsMessagingPushNotificationConnector.NAMESPACE;
@@ -2042,9 +2072,9 @@ function initialiseMessagingComponent(engineCore, context, instanceConfig, overr
2042
2072
  messagingService.initSchema();
2043
2073
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.templateEntryStorageConnectorType, "TemplateEntry");
2044
2074
  component = new messagingService.MessagingService({
2045
- messagingEmailConnectorType: context.defaultTypes.messagingEmailConnector,
2046
- messagingSmsConnectorType: context.defaultTypes.messagingSmsConnector,
2047
- messagingPushNotificationConnectorType: context.defaultTypes.messagingNotificationConnector,
2075
+ messagingEmailConnectorType: engineCore.getRegisteredInstanceTypeOptional("messagingEmailConnector"),
2076
+ messagingSmsConnectorType: engineCore.getRegisteredInstanceTypeOptional("messagingSmsConnector"),
2077
+ messagingPushNotificationConnectorType: engineCore.getRegisteredInstanceTypeOptional("messagingNotificationConnector"),
2048
2078
  ...instanceConfig.options
2049
2079
  });
2050
2080
  instanceType = core.StringHelper.kebabCase("MessagingService");
@@ -2121,8 +2151,8 @@ function initialiseNftConnector(engineCore, context, instanceConfig, overrideIns
2121
2151
  }
2122
2152
  else if (type === NftConnectorType.Iota) {
2123
2153
  connector = new nftConnectorIota.IotaNftConnector({
2124
- vaultConnectorType: context.defaultTypes.vaultConnector,
2125
- walletConnectorType: context.defaultTypes.walletConnector,
2154
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
2155
+ walletConnectorType: engineCore.getRegisteredInstanceType("walletConnector"),
2126
2156
  ...instanceConfig.options
2127
2157
  });
2128
2158
  instanceType = nftConnectorIota.IotaNftConnector.NAMESPACE;
@@ -2217,7 +2247,7 @@ function initialiseRightsManagementComponent(engineCore, context, instanceConfig
2217
2247
  let instanceType;
2218
2248
  if (type === RightsManagementComponentType.Service) {
2219
2249
  component = new rightsManagementService.RightsManagementService({
2220
- papComponentType: context.defaultTypes.rightsManagementPapComponent,
2250
+ papComponentType: engineCore.getRegisteredInstanceType("rightsManagementPapComponent"),
2221
2251
  ...instanceConfig.options
2222
2252
  });
2223
2253
  instanceType = core.StringHelper.kebabCase("RightsManagementService");
@@ -2293,6 +2323,78 @@ function initialiseRightsManagementPapComponent(engineCore, context, instanceCon
2293
2323
  return finalInstanceType;
2294
2324
  }
2295
2325
 
2326
+ // Copyright 2024 IOTA Stiftung.
2327
+ // SPDX-License-Identifier: Apache-2.0.
2328
+ /**
2329
+ * Synchronised storage component types.
2330
+ */
2331
+ // eslint-disable-next-line @typescript-eslint/naming-convention
2332
+ const SynchronisedStorageComponentType = {
2333
+ /**
2334
+ * Service.
2335
+ */
2336
+ Service: "service",
2337
+ /**
2338
+ * REST client.
2339
+ */
2340
+ RestClient: "rest-client"
2341
+ };
2342
+
2343
+ // Copyright 2024 IOTA Stiftung.
2344
+ // SPDX-License-Identifier: Apache-2.0.
2345
+ /**
2346
+ * Initialise the synchronised storage component.
2347
+ * @param engineCore The engine core.
2348
+ * @param context The context for the engine.
2349
+ * @param instanceConfig The instance config.
2350
+ * @param overrideInstanceType The instance type to override the default.
2351
+ * @returns The name of the instance created.
2352
+ * @throws GeneralError if the component type is unknown.
2353
+ */
2354
+ function initialiseSynchronisedStorageComponent(engineCore, context, instanceConfig, overrideInstanceType) {
2355
+ engineCore.logInfo(core.I18n.formatMessage("engineCore.configuring", {
2356
+ element: `Synchronised Storage Component: ${instanceConfig.type}`
2357
+ }));
2358
+ const type = instanceConfig.type;
2359
+ let component;
2360
+ let instanceType;
2361
+ if (type === SynchronisedStorageComponentType.Service) {
2362
+ synchronisedStorageService.initSchema();
2363
+ initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.syncSnapshotStorageConnectorType, "SyncSnapshotEntry");
2364
+ component = new synchronisedStorageService.SynchronisedStorageService({
2365
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
2366
+ eventBusComponentType: engineCore.getRegisteredInstanceType("eventBusComponent"),
2367
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
2368
+ verifiableStorageConnectorType: engineCore.getRegisteredInstanceType("verifiableStorageConnector"),
2369
+ identityConnectorType: engineCore.getRegisteredInstanceType("identityConnector"),
2370
+ taskSchedulerComponentType: engineCore.getRegisteredInstanceType("taskSchedulerComponent"),
2371
+ trustedSynchronisedStorageComponentType: engineCore.getRegisteredInstanceTypeOptional("synchronisedStorageComponent", ["trusted"]),
2372
+ blobStorageConnectorType: engineCore.getRegisteredInstanceType("blobStorageConnector", [
2373
+ "public"
2374
+ ]),
2375
+ ...instanceConfig.options
2376
+ });
2377
+ instanceType = core.StringHelper.kebabCase("SynchronisedStorageService");
2378
+ }
2379
+ else if (type === SynchronisedStorageComponentType.RestClient) {
2380
+ component = new synchronisedStorageRestClient.SynchronisedStorageClient(instanceConfig.options);
2381
+ instanceType = core.StringHelper.kebabCase("SynchronisedStorageClient");
2382
+ }
2383
+ else {
2384
+ throw new core.GeneralError("engineCore", "componentUnknownType", {
2385
+ type,
2386
+ componentType: "SynchronisedStorageComponent"
2387
+ });
2388
+ }
2389
+ const finalInstanceType = overrideInstanceType ?? instanceType;
2390
+ context.componentInstances.push({
2391
+ instanceType: finalInstanceType,
2392
+ component
2393
+ });
2394
+ core.ComponentFactory.register(finalInstanceType, () => component);
2395
+ return finalInstanceType;
2396
+ }
2397
+
2296
2398
  // Copyright 2024 IOTA Stiftung.
2297
2399
  // SPDX-License-Identifier: Apache-2.0.
2298
2400
  /**
@@ -2324,7 +2426,7 @@ function initialiseTaskSchedulerComponent(engineCore, context, instanceConfig, o
2324
2426
  let instanceType;
2325
2427
  if (type === TaskSchedulerComponentType.Service) {
2326
2428
  component = new backgroundTaskScheduler.TaskSchedulerService({
2327
- loggingConnectorType: context.defaultTypes.loggingConnector,
2429
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
2328
2430
  ...instanceConfig.options
2329
2431
  });
2330
2432
  instanceType = core.StringHelper.kebabCase("TaskSchedulerService");
@@ -2397,7 +2499,7 @@ function initialiseTelemetryConnector(engineCore, context, instanceConfig, overr
2397
2499
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.telemetryMetricStorageConnectorType, "TelemetryMetric");
2398
2500
  initialiseEntityStorageConnector(engineCore, context, instanceConfig.options?.telemetryMetricValueStorageConnectorType, "TelemetryMetricValue");
2399
2501
  connector = new telemetryConnectorEntityStorage.EntityStorageTelemetryConnector({
2400
- loggingConnectorType: context.defaultTypes.loggingConnector,
2502
+ loggingComponentType: engineCore.getRegisteredInstanceType("loggingComponent"),
2401
2503
  ...instanceConfig.options
2402
2504
  });
2403
2505
  instanceType = telemetryConnectorEntityStorage.EntityStorageTelemetryConnector.NAMESPACE;
@@ -2431,7 +2533,7 @@ function initialiseTelemetryComponent(engineCore, context, instanceConfig, overr
2431
2533
  let instanceType;
2432
2534
  if (type === TelemetryComponentType.Service) {
2433
2535
  component = new telemetryService.TelemetryService({
2434
- telemetryConnectorType: context.defaultTypes.telemetryConnector,
2536
+ telemetryConnectorType: engineCore.getRegisteredInstanceType("telemetryConnector"),
2435
2537
  ...instanceConfig.options
2436
2538
  });
2437
2539
  instanceType = core.StringHelper.kebabCase("TelemetryService");
@@ -2563,9 +2665,10 @@ function initialiseVerifiableStorageConnector(engineCore, context, instanceConfi
2563
2665
  let connector;
2564
2666
  let instanceType;
2565
2667
  if (type === VerifiableStorageConnectorType.Iota) {
2566
- const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === context.defaultTypes.dltConfig);
2668
+ const defaultConfigType = engineCore.getRegisteredInstanceType("dltConfig");
2669
+ const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === defaultConfigType);
2567
2670
  connector = new verifiableStorageConnectorIota.IotaVerifiableStorageConnector({
2568
- vaultConnectorType: context.defaultTypes.vaultConnector,
2671
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
2569
2672
  ...instanceConfig.options,
2570
2673
  config: {
2571
2674
  ...dltConfig?.options?.config,
@@ -2671,10 +2774,11 @@ function initialiseWalletConnector(engineCore, context, instanceConfig, override
2671
2774
  let connector;
2672
2775
  let instanceType;
2673
2776
  if (type === WalletConnectorType.Iota) {
2674
- const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === context.defaultTypes.dltConfig);
2777
+ const defaultConfigType = engineCore.getRegisteredInstanceType("dltConfig");
2778
+ const dltConfig = context.config.types.dltConfig?.find(dlt => dlt.type === defaultConfigType);
2675
2779
  connector = new walletConnectorIota.IotaWalletConnector({
2676
- vaultConnectorType: context.defaultTypes.vaultConnector,
2677
- faucetConnectorType: context.defaultTypes.faucetConnector,
2780
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
2781
+ faucetConnectorType: engineCore.getRegisteredInstanceType("faucetConnector"),
2678
2782
  ...instanceConfig.options,
2679
2783
  config: {
2680
2784
  ...dltConfig?.options?.config,
@@ -2685,8 +2789,8 @@ function initialiseWalletConnector(engineCore, context, instanceConfig, override
2685
2789
  }
2686
2790
  else if (type === WalletConnectorType.EntityStorage) {
2687
2791
  connector = new walletConnectorEntityStorage.EntityStorageWalletConnector({
2688
- vaultConnectorType: context.defaultTypes.vaultConnector,
2689
- faucetConnectorType: context.defaultTypes.faucetConnector,
2792
+ vaultConnectorType: engineCore.getRegisteredInstanceType("vaultConnector"),
2793
+ faucetConnectorType: engineCore.getRegisteredInstanceType("faucetConnector"),
2690
2794
  ...instanceConfig.options
2691
2795
  });
2692
2796
  instanceType = walletConnectorEntityStorage.EntityStorageWalletConnector.NAMESPACE;
@@ -2778,6 +2882,7 @@ exports.NftComponentType = NftComponentType;
2778
2882
  exports.NftConnectorType = NftConnectorType;
2779
2883
  exports.RightsManagementComponentType = RightsManagementComponentType;
2780
2884
  exports.RightsManagementPapComponentType = RightsManagementPapComponentType;
2885
+ exports.SynchronisedStorageComponentType = SynchronisedStorageComponentType;
2781
2886
  exports.TaskSchedulerComponentType = TaskSchedulerComponentType;
2782
2887
  exports.TelemetryComponentType = TelemetryComponentType;
2783
2888
  exports.TelemetryConnectorType = TelemetryConnectorType;
@@ -2819,6 +2924,7 @@ exports.initialiseNftComponent = initialiseNftComponent;
2819
2924
  exports.initialiseNftConnector = initialiseNftConnector;
2820
2925
  exports.initialiseRightsManagementComponent = initialiseRightsManagementComponent;
2821
2926
  exports.initialiseRightsManagementPapComponent = initialiseRightsManagementPapComponent;
2927
+ exports.initialiseSynchronisedStorageComponent = initialiseSynchronisedStorageComponent;
2822
2928
  exports.initialiseTaskSchedulerComponent = initialiseTaskSchedulerComponent;
2823
2929
  exports.initialiseTelemetryComponent = initialiseTelemetryComponent;
2824
2930
  exports.initialiseTelemetryConnector = initialiseTelemetryConnector;