@twin.org/dataspace-data-plane-service 0.0.3-next.15

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 (60) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +73 -0
  3. package/dist/es/dataspaceDataPlaneRoutes.js +312 -0
  4. package/dist/es/dataspaceDataPlaneRoutes.js.map +1 -0
  5. package/dist/es/dataspaceDataPlaneService.js +1077 -0
  6. package/dist/es/dataspaceDataPlaneService.js.map +1 -0
  7. package/dist/es/dataspaceDataPlaneSocketRoutes.js +82 -0
  8. package/dist/es/dataspaceDataPlaneSocketRoutes.js.map +1 -0
  9. package/dist/es/entities/activityLogDetails.js +69 -0
  10. package/dist/es/entities/activityLogDetails.js.map +1 -0
  11. package/dist/es/entities/activityTask.js +27 -0
  12. package/dist/es/entities/activityTask.js.map +1 -0
  13. package/dist/es/index.js +13 -0
  14. package/dist/es/index.js.map +1 -0
  15. package/dist/es/models/IDataspaceDataPlaneServiceConfig.js +4 -0
  16. package/dist/es/models/IDataspaceDataPlaneServiceConfig.js.map +1 -0
  17. package/dist/es/models/IDataspaceDataPlaneServiceConstructorOptions.js +2 -0
  18. package/dist/es/models/IDataspaceDataPlaneServiceConstructorOptions.js.map +1 -0
  19. package/dist/es/restEntryPoints.js +10 -0
  20. package/dist/es/restEntryPoints.js.map +1 -0
  21. package/dist/es/schema.js +13 -0
  22. package/dist/es/schema.js.map +1 -0
  23. package/dist/es/socketEntryPoints.js +11 -0
  24. package/dist/es/socketEntryPoints.js.map +1 -0
  25. package/dist/types/dataspaceDataPlaneRoutes.d.ts +50 -0
  26. package/dist/types/dataspaceDataPlaneService.d.ts +90 -0
  27. package/dist/types/dataspaceDataPlaneSocketRoutes.d.ts +29 -0
  28. package/dist/types/entities/activityLogDetails.d.ts +33 -0
  29. package/dist/types/entities/activityTask.d.ts +14 -0
  30. package/dist/types/index.d.ts +10 -0
  31. package/dist/types/models/IDataspaceDataPlaneServiceConfig.d.ts +15 -0
  32. package/dist/types/models/IDataspaceDataPlaneServiceConstructorOptions.d.ts +55 -0
  33. package/dist/types/restEntryPoints.d.ts +2 -0
  34. package/dist/types/schema.d.ts +4 -0
  35. package/dist/types/socketEntryPoints.d.ts +2 -0
  36. package/docs/changelog.md +415 -0
  37. package/docs/examples.md +1 -0
  38. package/docs/open-api/spec.json +1658 -0
  39. package/docs/reference/classes/ActivityLogDetails.md +69 -0
  40. package/docs/reference/classes/ActivityTask.md +29 -0
  41. package/docs/reference/classes/DataspaceDataPlaneService.md +336 -0
  42. package/docs/reference/functions/activityLogEntryGet.md +31 -0
  43. package/docs/reference/functions/activityLogStatusConnected.md +17 -0
  44. package/docs/reference/functions/activityLogStatusDisconnected.md +23 -0
  45. package/docs/reference/functions/activityLogStatusUpdate.md +37 -0
  46. package/docs/reference/functions/activityStreamNotify.md +37 -0
  47. package/docs/reference/functions/generateRestRoutesDataspaceDataPlane.md +25 -0
  48. package/docs/reference/functions/generateSocketRoutesDataspaceDataPlane.md +25 -0
  49. package/docs/reference/functions/getDataAssetEntities.md +31 -0
  50. package/docs/reference/functions/initSchema.md +9 -0
  51. package/docs/reference/functions/queryDataAsset.md +31 -0
  52. package/docs/reference/index.md +32 -0
  53. package/docs/reference/interfaces/IDataspaceDataPlaneServiceConfig.md +31 -0
  54. package/docs/reference/interfaces/IDataspaceDataPlaneServiceConstructorOptions.md +132 -0
  55. package/docs/reference/variables/ACTIVITY_LOG_ROUTE.md +5 -0
  56. package/docs/reference/variables/restEntryPoints.md +3 -0
  57. package/docs/reference/variables/socketEntryPoints.md +3 -0
  58. package/docs/reference/variables/tagsDataspaceDataPlane.md +5 -0
  59. package/locales/en.json +41 -0
  60. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataspaceDataPlaneService.js","sourceRoot":"","sources":["../../src/dataspaceDataPlaneService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tTaskStatus,\n\ttype IBackgroundTask,\n\ttype IBackgroundTaskComponent,\n\ttype IScheduledTaskTime,\n\ttype ITaskSchedulerComponent\n} from \"@twin.org/background-task-models\";\nimport { ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tArrayHelper,\n\tComponentFactory,\n\tConflictError,\n\tConverter,\n\tGeneralError,\n\tGuardError,\n\tGuards,\n\tIs,\n\tNotFoundError,\n\tRandomHelper,\n\tUnprocessableError,\n\tValidation,\n\ttype IError,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { Blake2b } from \"@twin.org/crypto\";\nimport {\n\tJsonLdDataTypes,\n\tJsonLdHelper,\n\tJsonLdProcessor,\n\ttype IJsonLdContextDefinitionElement,\n\ttype IJsonLdNodeObject\n} from \"@twin.org/data-json-ld\";\nimport {\n\tActivityProcessingStatus,\n\tDataRequestType,\n\tDataspaceAppFactory,\n\ttype IActivityLogDetails,\n\ttype IActivityLogEntry,\n\ttype IActivityLogStatusNotification,\n\ttype IActivityQuery,\n\ttype IDataAssetItemListResult,\n\ttype IDataAssetQuery,\n\ttype IDataRequest,\n\ttype IDataspaceDataPlaneComponent,\n\ttype IDataspaceApp,\n\ttype IEntitySet,\n\ttype IExecutionPayload,\n\ttype IFilteringQuery,\n\ttype ITaskApp,\n\ttype ITransferContext,\n\ttype TransferProcess\n} from \"@twin.org/dataspace-models\";\nimport { EngineCoreFactory } from \"@twin.org/engine-models\";\nimport { ComparisonOperator, LogicalOperator } from \"@twin.org/entity\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport type { IPolicyEnforcementPointComponent } from \"@twin.org/rights-management-models\";\nimport {\n\tDataspaceProtocolDataTypes,\n\tDataspaceProtocolTransferProcessStateType,\n\ttype IDataspaceProtocolDataset\n} from \"@twin.org/standards-dataspace-protocol\";\nimport {\n\tSchemaOrgContexts,\n\tSchemaOrgDataTypes,\n\tSchemaOrgTypes\n} from \"@twin.org/standards-schema-org\";\nimport {\n\tActivityStreamsDataTypes,\n\ttype IActivityStreamsActivity\n} from \"@twin.org/standards-w3c-activity-streams\";\nimport type { IOdrlAgreement } from \"@twin.org/standards-w3c-odrl\";\nimport { type ITrustComponent, TrustHelper } from \"@twin.org/trust-models\";\nimport type { ActivityLogDetails } from \"./entities/activityLogDetails.js\";\nimport type { ActivityTask } from \"./entities/activityTask.js\";\nimport type { IDataspaceDataPlaneServiceConstructorOptions } from \"./models/IDataspaceDataPlaneServiceConstructorOptions.js\";\n\n/**\n * Dataspace Data Plane Service.\n */\nexport class DataspaceDataPlaneService implements IDataspaceDataPlaneComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<DataspaceDataPlaneService>();\n\n\t/**\n\t * Milliseconds per minute (60 * 1000).\n\t * @internal\n\t */\n\tprivate static readonly _MS_PER_MINUTE: number = 60 * 1000;\n\n\t/**\n\t * Minutes per day (24 * 60 = 1440).\n\t * @internal\n\t */\n\tprivate static readonly _MINUTES_PER_DAY: number = 24 * 60;\n\n\t/**\n\t * Milliseconds per day (24 hours).\n\t * @internal\n\t */\n\tprivate static readonly _MS_PER_DAY: number = 24 * 60 * 60 * 1000;\n\n\t/**\n\t * The default cleanup interval in minutes. (1 hour)\n\t * @internal\n\t */\n\tprivate static readonly _DEFAULT_CLEANUP_INTERVAL: number = 60;\n\n\t/**\n\t * The default retain interval in minutes. (10 minutes)\n\t * @internal\n\t */\n\tprivate static readonly _DEFAULT_RETAIN_INTERVAL: number = 10;\n\n\t/**\n\t * Logging service type.\n\t * @internal\n\t */\n\tprivate readonly _loggingComponentType: string;\n\n\t/**\n\t * Logging service.\n\t * @internal\n\t */\n\tprivate readonly _logging?: ILoggingComponent;\n\n\t/**\n\t * Storage service for activity logging.\n\t * @internal\n\t */\n\tprivate readonly _entityStorageActivityLogs: IEntityStorageConnector<ActivityLogDetails>;\n\n\t/**\n\t * Storage service for activity tasks.\n\t * @internal\n\t */\n\tprivate readonly _entityStorageActivityTasks: IEntityStorageConnector<ActivityTask>;\n\n\t/**\n\t * Background Task Component.\n\t * @internal\n\t */\n\tprivate readonly _backgroundTaskComponent: IBackgroundTaskComponent;\n\n\t/**\n\t * Activity Log Status callbacks.\n\t * @internal\n\t */\n\tprivate readonly _activityLogStatusCallbacks: {\n\t\t[key: string]: (notification: IActivityLogStatusNotification) => Promise<void>;\n\t};\n\n\t/**\n\t * Task retention. -1 retain forever.\n\t * @internal\n\t */\n\tprivate readonly _retainTasksFor: number;\n\n\t/**\n\t * Activity Log Entry retention. -1 retain forever.\n\t * @internal\n\t */\n\tprivate readonly _retainActivityLogsFor: number;\n\n\t/**\n\t * Clean up interval for activity logs.\n\t * @internal\n\t */\n\tprivate readonly _activityLogCleanUpInterval: number;\n\n\t/**\n\t * Whether there is an ongoing clean up process.\n\t * @internal\n\t */\n\tprivate _cleanUpProcessOngoing: boolean;\n\n\t/**\n\t * The task scheduler used to clean up activity logs.\n\t * @internal\n\t */\n\tprivate readonly _taskScheduler: ITaskSchedulerComponent;\n\n\t/**\n\t * The keys to use from the context ids to create partitions.\n\t * @internal\n\t */\n\tprivate readonly _partitionContextIds?: string[];\n\n\t/**\n\t * The trust component.\n\t * @internal\n\t */\n\tprivate readonly _trustComponent: ITrustComponent;\n\n\t/**\n\t * The policy enforcement point for ODRL policy enforcement.\n\t * @internal\n\t */\n\tprivate readonly _policyEnforcementPoint?: IPolicyEnforcementPointComponent;\n\n\t/**\n\t * Entity storage for Transfer Process entities.\n\t * Used to read transfer state from shared storage (written by Control Plane).\n\t * @internal\n\t */\n\tprivate readonly _transferProcessStorage: IEntityStorageConnector<TransferProcess>;\n\n\t/**\n\t * The list of active tenants required for task cleanup.\n\t * @internal\n\t */\n\tprivate readonly _activeTenants: string[];\n\n\t/**\n\t * Create a new instance of DataspaceDataPlane.\n\t * @param options The options for the data plane.\n\t */\n\tconstructor(options?: IDataspaceDataPlaneServiceConstructorOptions) {\n\t\tthis._loggingComponentType = options?.loggingComponentType ?? \"logging\";\n\t\tthis._logging = ComponentFactory.getIfExists<ILoggingComponent>(this._loggingComponentType);\n\n\t\tthis._entityStorageActivityLogs = EntityStorageConnectorFactory.get<\n\t\t\tIEntityStorageConnector<ActivityLogDetails>\n\t\t>(options?.activityLogEntityStorageType ?? nameofKebabCase<ActivityLogDetails>());\n\n\t\tthis._entityStorageActivityTasks = EntityStorageConnectorFactory.get<\n\t\t\tIEntityStorageConnector<ActivityTask>\n\t\t>(options?.activityTaskEntityStorageType ?? nameofKebabCase<ActivityTask>());\n\n\t\tthis._backgroundTaskComponent = ComponentFactory.get(\n\t\t\toptions?.backgroundTaskComponentType ?? \"background-task\"\n\t\t);\n\n\t\tthis._taskScheduler = ComponentFactory.get<ITaskSchedulerComponent>(\n\t\t\toptions?.taskSchedulerComponentType ?? \"task-scheduler\"\n\t\t);\n\n\t\tthis._trustComponent = ComponentFactory.get<ITrustComponent>(\n\t\t\toptions?.trustComponentType ?? \"trust\"\n\t\t);\n\n\t\tthis._policyEnforcementPoint = ComponentFactory.getIfExists<IPolicyEnforcementPointComponent>(\n\t\t\toptions?.pepComponentType ?? \"policy-enforcement-point-service\"\n\t\t);\n\n\t\t// Entity storage for Transfer Process state lookup\n\t\t// Used to read transfer state from shared storage (written by Control Plane)\n\t\tthis._transferProcessStorage = EntityStorageConnectorFactory.get<\n\t\t\tIEntityStorageConnector<TransferProcess>\n\t\t>(options?.transferProcessEntityStorageType ?? nameofKebabCase<TransferProcess>());\n\n\t\tJsonLdDataTypes.registerTypes();\n\t\tActivityStreamsDataTypes.registerTypes();\n\t\tSchemaOrgDataTypes.registerRedirects();\n\t\tDataspaceProtocolDataTypes.registerRedirects();\n\t\tDataspaceProtocolDataTypes.registerTypes();\n\n\t\tthis._activityLogStatusCallbacks = {};\n\t\tthis._activeTenants = [];\n\t\tthis._partitionContextIds = options?.partitionContextIds;\n\n\t\tthis._retainTasksFor =\n\t\t\tDataspaceDataPlaneService._DEFAULT_RETAIN_INTERVAL * DataspaceDataPlaneService._MS_PER_MINUTE;\n\t\tthis._retainActivityLogsFor =\n\t\t\tDataspaceDataPlaneService._DEFAULT_RETAIN_INTERVAL * DataspaceDataPlaneService._MS_PER_MINUTE;\n\t\tthis._activityLogCleanUpInterval = DataspaceDataPlaneService._DEFAULT_CLEANUP_INTERVAL;\n\t\tthis._cleanUpProcessOngoing = false;\n\n\t\tconst validationErrors: IValidationFailure[] = [];\n\t\tif (!Is.empty(options?.config?.retainActivityLogsFor)) {\n\t\t\tGuards.integer(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\tnameof(options.config.retainActivityLogsFor),\n\t\t\t\toptions.config.retainActivityLogsFor\n\t\t\t);\n\n\t\t\tif (options.config.retainActivityLogsFor === -1) {\n\t\t\t\tthis._retainTasksFor = -1;\n\t\t\t\tthis._retainActivityLogsFor = -1;\n\t\t\t} else {\n\t\t\t\tValidation.integer(\n\t\t\t\t\tnameof(options.config.retainActivityLogsFor),\n\t\t\t\t\toptions.config.retainActivityLogsFor,\n\t\t\t\t\tvalidationErrors,\n\t\t\t\t\tundefined,\n\t\t\t\t\t{ minValue: 1 }\n\t\t\t\t);\n\t\t\t\t// Retention of internal tasks launched\n\t\t\t\t// 5 minutes of margin with respect to the Activity Log Entry to ensure proper removal\n\t\t\t\tthis._retainTasksFor =\n\t\t\t\t\t(options.config.retainActivityLogsFor + 5) * DataspaceDataPlaneService._MS_PER_MINUTE;\n\t\t\t\tthis._retainActivityLogsFor =\n\t\t\t\t\toptions.config.retainActivityLogsFor * DataspaceDataPlaneService._MS_PER_MINUTE;\n\t\t\t}\n\t\t}\n\n\t\tif (!Is.empty(options?.config?.activityLogsCleanUpInterval)) {\n\t\t\tGuards.integer(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\tnameof(options.config.activityLogsCleanUpInterval),\n\t\t\t\toptions.config.activityLogsCleanUpInterval\n\t\t\t);\n\t\t\tValidation.integer(\n\t\t\t\tnameof(options.config.activityLogsCleanUpInterval),\n\t\t\t\toptions.config.activityLogsCleanUpInterval,\n\t\t\t\tvalidationErrors,\n\t\t\t\tundefined,\n\t\t\t\t{ minValue: 1 }\n\t\t\t);\n\t\t\tthis._activityLogCleanUpInterval = options.config.activityLogsCleanUpInterval;\n\t\t}\n\t\tValidation.asValidationError(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(options?.config),\n\t\t\tvalidationErrors\n\t\t);\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn DataspaceDataPlaneService.CLASS_NAME;\n\t}\n\n\t/**\n\t * The service needs to be started when the application is initialized.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tconst engine = EngineCoreFactory.getIfExists(\"engine\");\n\t\tif (Is.empty(engine) || engine.isClone()) {\n\t\t\tawait this._logging?.log({\n\t\t\t\tlevel: \"debug\",\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\tmessage: \"engineCloneStart\"\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Only we have a task scheduler if there is a retention different than -1\n\t\tif (this._retainActivityLogsFor !== -1) {\n\t\t\tconst taskTime: IScheduledTaskTime[] = [\n\t\t\t\t{\n\t\t\t\t\tnextTriggerTime: Date.now() + 5000,\n\t\t\t\t\t...this.calculateCleaningTaskSchedule(this._activityLogCleanUpInterval)\n\t\t\t\t}\n\t\t\t];\n\n\t\t\tawait this._taskScheduler.addTask(\"dataspace-cleanup\", taskTime, async () => {\n\t\t\t\tawait this._logging?.log({\n\t\t\t\t\tlevel: \"debug\",\n\t\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\tmessage: \"scheduledCleanUpTask\"\n\t\t\t\t});\n\n\t\t\t\tawait this.cleanupActivityLog();\n\t\t\t});\n\n\t\t\tawait this._logging?.log({\n\t\t\t\tlevel: \"debug\",\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\tmessage: \"taskSchedulerStarted\",\n\t\t\t\tdata: {\n\t\t\t\t\ttaskTime\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Notify an Activity.\n\t * @param activity The Activity notified.\n\t * @returns The Activity's Log Entry identifier.\n\t */\n\tpublic async notifyActivity(activity: IActivityStreamsActivity): Promise<string> {\n\t\tGuards.object<IActivityStreamsActivity>(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(activity),\n\t\t\tactivity\n\t\t);\n\n\t\tawait this.updateActiveTenants();\n\n\t\tawait this._logging?.log({\n\t\t\tlevel: \"debug\",\n\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\tmessage: \"newActivity\",\n\t\t\tdata: {\n\t\t\t\tactivityType: activity.type,\n\t\t\t\tgenerator: this.calculateActivityGeneratorIdentity(activity)\n\t\t\t}\n\t\t});\n\n\t\t// Validate that the Activity notified is encoded using the representation format expected\n\t\tconst validationFailures: IValidationFailure[] = [];\n\t\tawait JsonLdHelper.validate(activity, validationFailures, { failOnMissingType: true });\n\t\tValidation.asValidationError(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(activity),\n\t\t\tvalidationFailures\n\t\t);\n\n\t\t// Avoid using terms not defined in any Ld Context\n\t\tconst compactedObj = await JsonLdProcessor.compact(activity, activity[\"@context\"]);\n\n\t\t// Calculate Activity Log Entry Id\n\t\tconst canonical = await JsonLdProcessor.canonize(compactedObj as unknown as IJsonLdNodeObject);\n\t\tconst canonicalBytes = Converter.utf8ToBytes(canonical);\n\t\tconst activityLogId = Converter.bytesToHex(Blake2b.sum256(canonicalBytes));\n\t\tconst activityLogEntryId = `urn:x-activity-log:${activityLogId}`;\n\n\t\t// Check if entry already exists\n\t\tconst existingLogEntry = await this._entityStorageActivityLogs.get(activityLogEntryId);\n\t\tlet existingSuccessfulApps: string[] = [];\n\t\tlet isRetry = false;\n\n\t\tif (!Is.undefined(existingLogEntry)) {\n\t\t\t// Check if there are failed tasks that can be retried\n\t\t\tconst existingEntry = await this.getActivityLogEntry(activityLogEntryId);\n\n\t\t\t// If all tasks completed successfully, this is a duplicate\n\t\t\tif (existingEntry.status === ActivityProcessingStatus.Completed) {\n\t\t\t\tthrow new ConflictError(\n\t\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\t\"activityAlreadyNotified\",\n\t\t\t\t\tactivityLogEntryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// If still processing then reject to avoid race conditions\n\t\t\tif (\n\t\t\t\texistingEntry.status === ActivityProcessingStatus.Pending ||\n\t\t\t\texistingEntry.status === ActivityProcessingStatus.Running ||\n\t\t\t\texistingEntry.status === ActivityProcessingStatus.Registering\n\t\t\t) {\n\t\t\t\tthrow new ConflictError(\n\t\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\t\"activityStillProcessing\",\n\t\t\t\t\tactivityLogEntryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Status is Error - prepare for retry\n\t\t\texistingSuccessfulApps = await this.prepareForRetry(activityLogEntryId, existingEntry);\n\t\t\tisRetry = true;\n\t\t} else {\n\t\t\tconst logEntry: IActivityLogDetails = {\n\t\t\t\tid: activityLogEntryId,\n\t\t\t\tactivityId: Is.string(activity.id) ? activity.id : undefined,\n\t\t\t\tgenerator: this.calculateActivityGeneratorIdentity(activity),\n\t\t\t\tdateCreated: new Date().toISOString(),\n\t\t\t\tdateModified: new Date().toISOString()\n\t\t\t};\n\t\t\tawait this._entityStorageActivityLogs.set(logEntry);\n\t\t}\n\n\t\tconst activityQuerySet = await this.calculateActivityQuerySet(compactedObj);\n\n\t\tconst tasksScheduled: ITaskApp[] = [];\n\t\tfor (const query of activityQuerySet) {\n\t\t\tconst dataspaceAppIds = this.getAppForActivityQuery(query);\n\n\t\t\tfor (const dataspaceAppId of dataspaceAppIds) {\n\t\t\t\t// Only process apps that haven't already completed successfully\n\t\t\t\tif (!existingSuccessfulApps.includes(dataspaceAppId)) {\n\t\t\t\t\tconst payload: IExecutionPayload = {\n\t\t\t\t\t\tactivityLogEntryId,\n\t\t\t\t\t\tactivity: compactedObj,\n\t\t\t\t\t\texecutorApp: dataspaceAppId\n\t\t\t\t\t};\n\n\t\t\t\t\tconst taskType = Converter.bytesToHex(RandomHelper.generate(16));\n\t\t\t\t\tconst taskId = await this._backgroundTaskComponent.create<IExecutionPayload>(\n\t\t\t\t\t\ttaskType,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tretainFor: this._retainTasksFor\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tawait this._backgroundTaskComponent.registerHandler<IExecutionPayload, unknown>(\n\t\t\t\t\t\ttaskType,\n\t\t\t\t\t\t\"@twin.org/dataspace-app-runner\",\n\t\t\t\t\t\t\"appRunner\",\n\t\t\t\t\t\tasync task => {\n\t\t\t\t\t\t\tawait this.finaliseTask(task);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tinitialiseMethod: \"appRunnerStart\",\n\t\t\t\t\t\t\tshutdownMethod: \"appRunnerEnd\"\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\ttasksScheduled.push({\n\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\tdataspaceAppId\n\t\t\t\t\t});\n\n\t\t\t\t\tawait this._logging?.log({\n\t\t\t\t\t\tlevel: \"info\",\n\t\t\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\t\tmessage: \"scheduledTask\",\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\ttaskId,\n\t\t\t\t\t\t\tdataspaceAppId,\n\t\t\t\t\t\t\tisRetry\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst existingActivityTasks = isRetry\n\t\t\t? await this._entityStorageActivityTasks.get(activityLogEntryId)\n\t\t\t: undefined;\n\t\tconst existingTasksToKeep =\n\t\t\texistingActivityTasks?.associatedTasks.filter(t =>\n\t\t\t\texistingSuccessfulApps.includes(t.dataspaceAppId)\n\t\t\t) ?? [];\n\n\t\tawait this._entityStorageActivityTasks.set({\n\t\t\tactivityLogEntryId,\n\t\t\tassociatedTasks: [...existingTasksToKeep, ...tasksScheduled]\n\t\t});\n\n\t\treturn activityLogEntryId;\n\t}\n\n\t/**\n\t * Subscribes to the activity log.\n\t * @param callback The callback to be called when Activity Log is called.\n\t * @param subscriptionId The Subscription Id.\n\t * @returns The subscription Id.\n\t */\n\tpublic async subscribeToActivityLog(\n\t\tcallback: (notification: IActivityLogStatusNotification) => Promise<void>,\n\t\tsubscriptionId?: string\n\t): Promise<string> {\n\t\tGuards.function(DataspaceDataPlaneService.CLASS_NAME, nameof(callback), callback);\n\n\t\tconst theSubscriptionId = Is.stringValue(subscriptionId)\n\t\t\t? subscriptionId\n\t\t\t: Converter.bytesToHex(RandomHelper.generate(16));\n\t\tthis._activityLogStatusCallbacks[theSubscriptionId] = callback;\n\n\t\treturn theSubscriptionId;\n\t}\n\n\t/**\n\t * Subscribes to the activity log.\n\t * @param subscriptionId The Subscription Id.\n\t */\n\tpublic async unSubscribeToActivityLog(subscriptionId: string): Promise<void> {\n\t\tGuards.stringValue(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(subscriptionId),\n\t\t\tsubscriptionId\n\t\t);\n\t\tdelete this._activityLogStatusCallbacks[subscriptionId];\n\t}\n\n\t/**\n\t * Returns the activity processing details of an activity.\n\t * @param logEntryId The Id of the Activity Log Entry (a URI).\n\t * @returns the Activity Log Entry with the processing details.\n\t * @throws NotFoundError if activity log entry is not known.\n\t */\n\tpublic async getActivityLogEntry(logEntryId: string): Promise<IActivityLogEntry> {\n\t\tGuards.stringValue(DataspaceDataPlaneService.CLASS_NAME, nameof(logEntryId), logEntryId);\n\n\t\tconst result = await this._entityStorageActivityLogs.get(logEntryId);\n\t\tif (Is.undefined(result)) {\n\t\t\tthrow new NotFoundError(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\"activityLogEntryNotFound\",\n\t\t\t\tlogEntryId\n\t\t\t);\n\t\t}\n\n\t\tlet pendingTasks: IActivityLogEntry[\"pendingTasks\"];\n\t\tlet runningTasks: IActivityLogEntry[\"runningTasks\"];\n\t\tlet finalizedTasks: IActivityLogEntry[\"finalizedTasks\"];\n\t\tlet inErrorTasks: IActivityLogEntry[\"inErrorTasks\"];\n\n\t\t// For calculating the processing status. `Registering` if we cannot determine the activity tasks yet\n\t\tlet status: ActivityProcessingStatus = ActivityProcessingStatus.Registering;\n\n\t\t// Now query the associated tasks\n\t\tconst activityTasks = await this._entityStorageActivityTasks.get(logEntryId);\n\n\t\t// If activity tasks is undefined it is because the corresponding store has not been persisted yet\n\t\tif (!Is.undefined(activityTasks)) {\n\t\t\tpendingTasks = [];\n\t\t\trunningTasks = [];\n\t\t\tfinalizedTasks = [];\n\t\t\tinErrorTasks = [];\n\n\t\t\tfor (const entity of activityTasks.associatedTasks) {\n\t\t\t\tconst taskDetails = await this._backgroundTaskComponent.get<IExecutionPayload, unknown>(\n\t\t\t\t\tentity.taskId\n\t\t\t\t);\n\n\t\t\t\tif (Is.object(taskDetails)) {\n\t\t\t\t\tswitch (taskDetails.status) {\n\t\t\t\t\t\tcase TaskStatus.Success:\n\t\t\t\t\t\t\tfinalizedTasks.push({\n\t\t\t\t\t\t\t\t...entity,\n\t\t\t\t\t\t\t\tresult: JSON.stringify(taskDetails.result),\n\t\t\t\t\t\t\t\tstartDate: taskDetails?.dateCreated,\n\t\t\t\t\t\t\t\tendDate: taskDetails?.dateCompleted\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TaskStatus.Pending:\n\t\t\t\t\t\t\tpendingTasks.push(entity);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TaskStatus.Processing:\n\t\t\t\t\t\t\trunningTasks.push({ ...entity, startDate: taskDetails.dateCreated });\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TaskStatus.Failed:\n\t\t\t\t\t\t\tinErrorTasks.push({\n\t\t\t\t\t\t\t\t...entity,\n\t\t\t\t\t\t\t\terror: taskDetails.error as IError\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TaskStatus.Cancelled:\n\t\t\t\t\t\t\t// Nothing to do for cancelled tasks\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Is.arrayValue(inErrorTasks)) {\n\t\t\t\tstatus = ActivityProcessingStatus.Error;\n\t\t\t} else if (Is.arrayValue(runningTasks)) {\n\t\t\t\tstatus = ActivityProcessingStatus.Running;\n\t\t\t} else if (Is.arrayValue(pendingTasks)) {\n\t\t\t\tstatus = ActivityProcessingStatus.Pending;\n\t\t\t} else {\n\t\t\t\tstatus = ActivityProcessingStatus.Completed;\n\t\t\t}\n\t\t}\n\t\treturn { ...result, status, pendingTasks, runningTasks, finalizedTasks, inErrorTasks };\n\t}\n\n\t/**\n\t * Get Data Asset entities. Allows to retrieve entities by their type or id.\n\t * @param entitySet The set of entities to be retrieved.\n\t * @param entitySet.jsonLdContext The JSON-LD Context to be used to expand the referred entityType.\n\t * @param consumerPid The consumer Process ID from the DSP Transfer Process.\n\t * Used to resolve datasetId from the Transfer Process.\n\t * @param cursor Pagination details - cursor.\n\t * @param limit Pagination details - max number of entities.\n\t * @param trustPayload Trust payload to verify the requesters identity.\n\t * @returns The entities requested as a JSON-LD Document.\n\t */\n\tpublic async getDataAssetEntities(\n\t\tentitySet: IEntitySet & {\n\t\t\tjsonLdContext?: IJsonLdContextDefinitionElement[];\n\t\t},\n\t\tconsumerPid: string,\n\t\tcursor?: string,\n\t\tlimit?: number,\n\t\ttrustPayload?: unknown\n\t): Promise<IDataAssetItemListResult> {\n\t\tGuards.object<IEntitySet>(DataspaceDataPlaneService.CLASS_NAME, nameof(entitySet), entitySet);\n\t\tGuards.string(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(entitySet.entityType),\n\t\t\tentitySet.entityType\n\t\t);\n\t\tGuards.stringValue(DataspaceDataPlaneService.CLASS_NAME, nameof(consumerPid), consumerPid);\n\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"getDataAssetEntities\"\n\t\t);\n\n\t\tconst dataConsumerIdentity = trustInfo.identity;\n\t\tGuards.stringValue(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(dataConsumerIdentity),\n\t\t\tdataConsumerIdentity\n\t\t);\n\n\t\t// Use consumerPid to resolve datasetId via Transfer Process\n\t\t// This validates the transfer token, state, and extracts datasetId\n\t\tconst transferContext = await this.validateTransfer(consumerPid, trustPayload);\n\t\tconst resolvedDatasetId = transferContext.datasetId;\n\n\t\tconst serviceDataset = await this.getDatasetFromApps(resolvedDatasetId);\n\n\t\t// Expand entity type if LD context provided\n\t\tlet finalType: string | undefined = entitySet.entityType;\n\t\tif (!Is.undefined(entitySet.jsonLdContext)) {\n\t\t\tconst auxiliaryObj = {\n\t\t\t\t\"@context\": entitySet.jsonLdContext,\n\t\t\t\t\"@type\": entitySet.entityType\n\t\t\t};\n\t\t\tconst expanded = (await JsonLdProcessor.expand(auxiliaryObj))[0];\n\t\t\tfinalType = expanded[\"@type\"]?.[0];\n\t\t}\n\n\t\tif (Is.undefined(finalType)) {\n\t\t\tthrow new GuardError(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\"notExpandableType\",\n\t\t\t\tnameof(entitySet.entityType),\n\t\t\t\tentitySet.entityType\n\t\t\t);\n\t\t}\n\n\t\tconst datasetId = serviceDataset[\"@id\"];\n\t\tGuards.stringValue(DataspaceDataPlaneService.CLASS_NAME, nameof(datasetId), datasetId);\n\t\tconst appId = await this.getAppForDataAssetQuery({ datasetId });\n\n\t\t// getAppForDataAssetQuery already validates app exists\n\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(appId);\n\n\t\tconst handleDataRequest = app.handleDataRequest?.bind(app);\n\t\tGuards.function(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(handleDataRequest),\n\t\t\thandleDataRequest\n\t\t);\n\n\t\tconst dataRequest: IDataRequest = {\n\t\t\ttype: DataRequestType.DataAssetEntities,\n\t\t\tdataAsset: serviceDataset,\n\t\t\tentitySet: {\n\t\t\t\tentityType: finalType,\n\t\t\t\tentityId: entitySet.entityId\n\t\t\t}\n\t\t};\n\n\t\tconst { data, cursor: cursorResult } = await handleDataRequest(dataRequest, cursor, limit);\n\n\t\tlet finalData: IJsonLdNodeObject[];\n\t\tif (Is.array(data)) {\n\t\t\tfinalData = data;\n\t\t} else {\n\t\t\tfinalData = [data as IJsonLdNodeObject];\n\t\t}\n\n\t\tconst itemList = {\n\t\t\t\"@context\": SchemaOrgContexts.Context,\n\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\titemListElement: finalData\n\t\t};\n\n\t\tlet result: IDataAssetItemListResult = {\n\t\t\titemList,\n\t\t\tcursor: cursorResult\n\t\t};\n\n\t\t// Apply policy filters from Agreement\n\t\tif (transferContext?.agreement) {\n\t\t\tconst filtered = await this.applyPolicyFilters(result, transferContext.agreement);\n\t\t\tif (filtered.itemList) {\n\t\t\t\tresult = filtered;\n\t\t\t} else {\n\t\t\t\tresult.itemList[SchemaOrgTypes.ItemListElement] = [];\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Queries a data asset controlled by this Dataspace App.\n\t * @param consumerPid The consumer Process ID from the DSP Transfer Process.\n\t * Used to resolve datasetId from the Transfer Process.\n\t * @param query The filtering query.\n\t * @param cursor Pagination details - cursor.\n\t * @param limit Pagination details - max number of entities.\n\t * @param trustPayload Trust payload to verify the requesters identity.\n\t * @returns The item list and optional cursor for pagination via Link headers.\n\t */\n\tpublic async queryDataAsset(\n\t\tconsumerPid: string,\n\t\tquery: IFilteringQuery,\n\t\tcursor?: string,\n\t\tlimit?: number,\n\t\ttrustPayload?: unknown\n\t): Promise<IDataAssetItemListResult> {\n\t\tGuards.stringValue(DataspaceDataPlaneService.CLASS_NAME, nameof(consumerPid), consumerPid);\n\t\tGuards.object(DataspaceDataPlaneService.CLASS_NAME, nameof(query), query);\n\t\tGuards.string(DataspaceDataPlaneService.CLASS_NAME, nameof(query.type), query.type);\n\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"queryDataAsset\"\n\t\t);\n\n\t\tconst dataConsumerIdentity = trustInfo.identity;\n\t\tGuards.stringValue(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(dataConsumerIdentity),\n\t\t\tdataConsumerIdentity\n\t\t);\n\n\t\t// Use consumerPid to resolve datasetId via Transfer Process\n\t\t// This validates the transfer token, state, and extracts datasetId\n\t\tconst transferContext = await this.validateTransfer(consumerPid, trustPayload);\n\t\tconst resolvedDatasetId = transferContext.datasetId;\n\n\t\tconst serviceDataset = await this.getDatasetFromApps(resolvedDatasetId);\n\n\t\tconst datasetId = serviceDataset[\"@id\"];\n\t\tGuards.stringValue(DataspaceDataPlaneService.CLASS_NAME, nameof(datasetId), datasetId);\n\t\tconst appId = await this.getAppForDataAssetQuery({ datasetId });\n\n\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(appId);\n\n\t\tif (!app.supportedQueryTypes().includes(query.type)) {\n\t\t\tthrow new UnprocessableError(DataspaceDataPlaneService.CLASS_NAME, \"queryTypeNotSupported\", {\n\t\t\t\tqueryType: query.type\n\t\t\t});\n\t\t}\n\n\t\tconst dataRequest: IDataRequest = {\n\t\t\ttype: DataRequestType.QueryDataAsset,\n\t\t\tdataAsset: serviceDataset,\n\t\t\tquery\n\t\t};\n\n\t\tconst handleDataRequest = app.handleDataRequest?.bind(app);\n\t\tGuards.function(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\tnameof(handleDataRequest),\n\t\t\thandleDataRequest\n\t\t);\n\n\t\tconst { data, cursor: cursorResult } = await handleDataRequest(dataRequest, cursor, limit);\n\n\t\tlet finalData: IJsonLdNodeObject[];\n\t\tif (Is.array(data)) {\n\t\t\tfinalData = data;\n\t\t} else {\n\t\t\tfinalData = [data as IJsonLdNodeObject];\n\t\t}\n\n\t\tconst itemList = {\n\t\t\t\"@context\": SchemaOrgContexts.Context,\n\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\titemListElement: finalData\n\t\t};\n\n\t\tlet result: IDataAssetItemListResult = {\n\t\t\titemList,\n\t\t\tcursor: cursorResult\n\t\t};\n\n\t\t// Apply policy filters from Agreement if using consumerPid flow\n\t\tif (transferContext?.agreement) {\n\t\t\tconst filtered = await this.applyPolicyFilters(result, transferContext.agreement);\n\t\t\tif (filtered.itemList) {\n\t\t\t\tresult = filtered;\n\t\t\t} else {\n\t\t\t\tresult.itemList[SchemaOrgTypes.ItemListElement] = [];\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Validate transfer authorization for data requests.\n\t * Reads directly from shared TransferProcess entity storage.\n\t * @param consumerPid The consumer process ID from the transfer request.\n\t * @param trustPayload The trust payload for verification (validates signature and expiry).\n\t * @returns The transfer context containing datasetId, agreement, and other transfer details.\n\t * @throws GeneralError if transfer process storage is not configured.\n\t * @throws NotFoundError if transfer process is not found.\n\t * @throws UnauthorizedError if trust verification fails.\n\t * @throws GeneralError if transfer is not in STARTED state.\n\t */\n\tpublic async validateTransfer(\n\t\tconsumerPid: string,\n\t\ttrustPayload: unknown\n\t): Promise<ITransferContext> {\n\t\tGuards.stringValue(DataspaceDataPlaneService.CLASS_NAME, nameof(consumerPid), consumerPid);\n\n\t\t// Verify trust payload (validates JWT signature, expiry, and returns verification info)\n\t\t// The trust verifier handles all token validation including expiry\n\t\tawait TrustHelper.verifyTrust(this._trustComponent, trustPayload, \"validateTransfer\");\n\n\t\t// Direct lookup from shared entity storage by consumerPid (which is the primary key)\n\t\tconst transferProcess = await this._transferProcessStorage.get(consumerPid);\n\n\t\tif (!transferProcess) {\n\t\t\tthrow new NotFoundError(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\"transferProcessNotFound\",\n\t\t\t\tconsumerPid\n\t\t\t);\n\t\t}\n\n\t\t// Validate state: must be STARTED\n\t\tif (transferProcess.state !== DataspaceProtocolTransferProcessStateType.STARTED) {\n\t\t\tthrow new GeneralError(DataspaceDataPlaneService.CLASS_NAME, \"transferNotInStartedState\", {\n\t\t\t\tcurrentState: transferProcess.state\n\t\t\t});\n\t\t}\n\n\t\t// Validate datasetId is present\n\t\tif (!Is.stringValue(transferProcess.datasetId)) {\n\t\t\tthrow new GeneralError(DataspaceDataPlaneService.CLASS_NAME, \"transferMissingDatasetId\");\n\t\t}\n\n\t\treturn this.buildTransferContext(transferProcess);\n\t}\n\n\t// ============================================================================\n\t// PRIVATE HELPER METHODS\n\t// ============================================================================\n\n\t/**\n\t * Calculates the activity generator from the generator or actor fields.\n\t * @param activity The activity.\n\t * @returns The generator's identity.\n\t * @throws General Error if no identity is found.\n\t * @internal\n\t */\n\tprivate calculateActivityGeneratorIdentity(activity: IActivityStreamsActivity): string {\n\t\tif (Is.stringValue(activity.generator)) {\n\t\t\treturn activity.generator;\n\t\t}\n\n\t\tif (Is.object<IJsonLdNodeObject>(activity.generator) && Is.stringValue(activity.generator.id)) {\n\t\t\treturn activity.generator.id;\n\t\t}\n\n\t\tif (Is.stringValue(activity.actor)) {\n\t\t\treturn activity.actor;\n\t\t}\n\n\t\tif (Is.object<IJsonLdNodeObject>(activity.actor) && Is.stringValue(activity.actor.id)) {\n\t\t\treturn activity.actor.id;\n\t\t}\n\n\t\tthrow new GuardError(\n\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\"invalidActivityGeneratorIdentity\",\n\t\t\tnameof(activity.generator),\n\t\t\t{\n\t\t\t\tgenerator: activity.generator,\n\t\t\t\tactor: activity.actor\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Process activity task finalization.\n\t * @param proofEntity The proof entity to process.\n\t * @internal\n\t */\n\tprivate async finaliseTask(task: IBackgroundTask<IExecutionPayload, unknown>): Promise<void> {\n\t\tconst payload = task.payload;\n\n\t\tif (Is.empty(payload)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activityLogEntry = await this._entityStorageActivityLogs.get(payload.activityLogEntryId);\n\t\tif (Is.undefined(activityLogEntry)) {\n\t\t\tawait this._logging?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\tmessage: \"unknownActivityLogEntryId\",\n\t\t\t\tdata: {\n\t\t\t\t\tactivityLogEntryId: payload.activityLogEntryId\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (task.status === TaskStatus.Success || task.status === TaskStatus.Failed) {\n\t\t\tfor (const callback of Object.values(this._activityLogStatusCallbacks)) {\n\t\t\t\tawait callback({\n\t\t\t\t\tactivityLogEntryId: payload.activityLogEntryId,\n\t\t\t\t\tactivityId: Is.string(payload.activity.id) ? payload.activity.id : undefined,\n\t\t\t\t\ttaskProcessingStatus: {\n\t\t\t\t\t\tdataspaceAppId: payload.executorApp,\n\t\t\t\t\t\ttaskId: task.id,\n\t\t\t\t\t\ttaskStatus: task.status\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Now let's see if the full activity processing has completed, if so the entry must be marked for retention\n\t\t\tif (this._retainActivityLogsFor !== -1) {\n\t\t\t\tconst entry = await this.getActivityLogEntry(payload.activityLogEntryId);\n\t\t\t\tif (\n\t\t\t\t\tentry.status === ActivityProcessingStatus.Completed ||\n\t\t\t\t\tentry.status === ActivityProcessingStatus.Error\n\t\t\t\t) {\n\t\t\t\t\tconst retainUntil = Date.now() + this._retainActivityLogsFor;\n\t\t\t\t\tawait this._entityStorageActivityLogs.set({\n\t\t\t\t\t\tid: entry.id,\n\t\t\t\t\t\tactivityId: entry.activityId,\n\t\t\t\t\t\tgenerator: entry.generator,\n\t\t\t\t\t\tdateCreated: entry.dateCreated,\n\t\t\t\t\t\tdateModified: entry.dateModified,\n\t\t\t\t\t\tretainUntil,\n\t\t\t\t\t\tretryCount: entry.retryCount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Updates the list of active tenants for cleanup tasks.\n\t * @internal\n\t */\n\tprivate async updateActiveTenants(): Promise<void> {\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst tenantId = contextIds?.[ContextIdKeys.Tenant];\n\t\tif (Is.stringValue(tenantId) && !this._activeTenants.includes(tenantId)) {\n\t\t\tthis._activeTenants.push(tenantId);\n\t\t}\n\t}\n\n\t/**\n\t * Cleans up the activity log by deleting those entries that no longer shall be retained.\n\t * @internal\n\t */\n\tprivate async cleanupActivityLog(): Promise<void> {\n\t\tif (this._cleanUpProcessOngoing) {\n\t\t\tawait this._logging?.log({\n\t\t\t\tlevel: \"debug\",\n\t\t\t\tmessage: \"cleanUpOngoing\",\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis._cleanUpProcessOngoing = true;\n\n\t\tlet numRecordsDeleted = 0;\n\n\t\tif (this._partitionContextIds?.includes(ContextIdKeys.Tenant)) {\n\t\t\t// The cleanup must be done tenant by tenant\n\t\t\t// as the data behind the scenes might be partitioned\n\t\t\tfor (const tenantId of this._activeTenants) {\n\t\t\t\tconst localContextIds = (await ContextIdStore.getContextIds()) ?? {};\n\t\t\t\tlocalContextIds[ContextIdKeys.Tenant] = tenantId;\n\n\t\t\t\tawait ContextIdStore.run(localContextIds, async () => {\n\t\t\t\t\tnumRecordsDeleted += await this.cleanupActivityLogPartition();\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tnumRecordsDeleted += await this.cleanupActivityLogPartition();\n\t\t}\n\n\t\tawait this._logging?.log({\n\t\t\tlevel: \"debug\",\n\t\t\tmessage: \"activityLogCleanedUp\",\n\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\tdata: {\n\t\t\t\tnumRecordsDeleted\n\t\t\t}\n\t\t});\n\n\t\tthis._cleanUpProcessOngoing = false;\n\t}\n\n\t/**\n\t * Cleans up the activity log partition for the current context ids.\n\t * @returns The number of records deleted in this partition.\n\t * @internal\n\t */\n\tprivate async cleanupActivityLogPartition(): Promise<number> {\n\t\tlet numRecordsDeleted = 0;\n\n\t\ttry {\n\t\t\tlet cursor: string | undefined;\n\t\t\tconst now = Date.now();\n\n\t\t\tdo {\n\t\t\t\tconst result = await this._entityStorageActivityLogs.query({\n\t\t\t\t\tconditions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tproperty: \"retainUntil\",\n\t\t\t\t\t\t\tvalue: 0,\n\t\t\t\t\t\t\tcomparison: ComparisonOperator.GreaterThan\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tproperty: \"retainUntil\",\n\t\t\t\t\t\t\tvalue: now,\n\t\t\t\t\t\t\tcomparison: ComparisonOperator.LessThan\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\tlogicalOperator: LogicalOperator.And\n\t\t\t\t});\n\t\t\t\tcursor = result.cursor;\n\n\t\t\t\tfor (const entity of result.entities) {\n\t\t\t\t\tconst logEntryDetails = await this.getActivityLogEntry(entity.id as string);\n\t\t\t\t\tif (\n\t\t\t\t\t\tlogEntryDetails.status === ActivityProcessingStatus.Completed ||\n\t\t\t\t\t\tlogEntryDetails.status === ActivityProcessingStatus.Error\n\t\t\t\t\t) {\n\t\t\t\t\t\tawait this._entityStorageActivityLogs.remove(entity.id as string);\n\t\t\t\t\t\tawait this._entityStorageActivityTasks.remove(entity.id as string);\n\t\t\t\t\t\tnumRecordsDeleted++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} while (Is.stringValue(cursor));\n\t\t} catch {\n\t\t\t// If cleaning up the retained items fail we don't really care, they will get cleaned up on the next sweep.\n\t\t}\n\t\treturn numRecordsDeleted;\n\t}\n\n\t/**\n\t * Calculates the (Activity, Object, Target) query set.\n\t * @param compactedObj The compactObj representing the Activity.\n\t * @returns the (Activity, Object, Target) query set.\n\t * @internal\n\t */\n\tprivate async calculateActivityQuerySet(\n\t\tcompactedObj: IActivityStreamsActivity\n\t): Promise<IActivityQuery[]> {\n\t\tconst expanded = await JsonLdProcessor.expand({\n\t\t\t\"@context\": compactedObj[\"@context\"],\n\t\t\t\"@type\": compactedObj.type\n\t\t});\n\t\tconst expandedDoc = expanded[0];\n\t\tconst activityTypes = expandedDoc[\"@type\"];\n\t\tif (!Is.arrayValue<string[]>(activityTypes)) {\n\t\t\tthrow new GuardError(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\"invalidActivity\",\n\t\t\t\tnameof(compactedObj.type),\n\t\t\t\tcompactedObj.type\n\t\t\t);\n\t\t}\n\n\t\tconst objects = ArrayHelper.fromObjectOrArray(compactedObj?.object);\n\t\tif (Is.arrayValue(objects)) {\n\t\t\tfor (const obj of objects) {\n\t\t\t\tif (Is.object(obj) && Is.empty(obj[\"@context\"])) {\n\t\t\t\t\tobj[\"@context\"] = compactedObj[\"@context\"];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst objectExpanded = await JsonLdProcessor.expand(compactedObj.object);\n\t\tconst objectTypes = objectExpanded[0][\"@type\"];\n\t\tif (!Is.arrayValue<string[]>(objectTypes)) {\n\t\t\tthrow new GuardError(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\"invalidActivity\",\n\t\t\t\tnameof(objectTypes),\n\t\t\t\tcompactedObj\n\t\t\t);\n\t\t}\n\n\t\tlet targetTypes: string[] = [\"\"];\n\t\tif (Is.object(compactedObj.target)) {\n\t\t\tif (Is.undefined(compactedObj.target[\"@context\"])) {\n\t\t\t\tcompactedObj.target[\"@context\"] = compactedObj[\"@context\"];\n\t\t\t}\n\t\t\tconst targetExpanded = await JsonLdProcessor.expand(compactedObj.target);\n\t\t\ttargetTypes = targetExpanded[0][\"@type\"] as string[];\n\n\t\t\tif (!Is.arrayValue<string[]>(targetTypes)) {\n\t\t\t\tthrow new GuardError(\n\t\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\t\"invalidActivity\",\n\t\t\t\t\tnameof(compactedObj.target?.type),\n\t\t\t\t\tcompactedObj.target?.type\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst result: IActivityQuery[] = [];\n\n\t\tfor (const activityType of activityTypes) {\n\t\t\tfor (const objectType of objectTypes) {\n\t\t\t\tfor (const targetType of targetTypes) {\n\t\t\t\t\tconst query: IActivityQuery = {\n\t\t\t\t\t\tactivityType,\n\t\t\t\t\t\tobjectType,\n\t\t\t\t\t\ttargetType: !Is.stringValue(targetType) ? undefined : targetType\n\t\t\t\t\t};\n\n\t\t\t\t\tresult.push(query);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Calculates the cleaning task schedule.\n\t * @param minutes The period in minutes.\n\t * @returns The cleaning task schedule.\n\t * @internal\n\t */\n\tprivate calculateCleaningTaskSchedule(minutes: number): IScheduledTaskTime {\n\t\tlet minutesRemain = minutes;\n\n\t\tconst days = Math.floor(minutesRemain / DataspaceDataPlaneService._MINUTES_PER_DAY);\n\t\tminutesRemain %= DataspaceDataPlaneService._MINUTES_PER_DAY;\n\n\t\tconst hours = Math.floor(minutesRemain / 60);\n\t\tminutesRemain %= 60;\n\n\t\treturn { intervalDays: days, intervalHours: hours, intervalMinutes: minutesRemain };\n\t}\n\n\t/**\n\t * Returns an App for a (Activity, Object, Target).\n\t * @param activityQuery The (Activity, Object, Target) query specified using a FQN.\n\t * @returns The Dataspace Data Plane Apps or empty list if nothing is registered.\n\t * @internal\n\t */\n\tprivate getAppForActivityQuery(activityQuery: IActivityQuery): string[] {\n\t\tconst matchingElements: string[] = [];\n\t\tconst appNames = DataspaceAppFactory.names();\n\n\t\tfor (const appId of appNames) {\n\t\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(appId);\n\t\t\tconst appQueries = app.activitiesHandled();\n\n\t\t\tfor (const appQuery of appQueries) {\n\t\t\t\tif (\n\t\t\t\t\tappQuery.objectType === activityQuery.objectType &&\n\t\t\t\t\t(Is.undefined(appQuery.activityType) ||\n\t\t\t\t\t\tappQuery.activityType === activityQuery.activityType) &&\n\t\t\t\t\t(Is.undefined(appQuery.targetType) || appQuery.targetType === activityQuery.targetType)\n\t\t\t\t) {\n\t\t\t\t\tmatchingElements.push(appId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn matchingElements;\n\t}\n\n\t/**\n\t * Get a dataset from registered apps by its ID.\n\t * @param datasetId The dataset identifier (@id)\n\t * @returns The dataset\n\t * @throws NotFoundError if no app handles this dataset\n\t * @internal\n\t */\n\tprivate async getDatasetFromApps(datasetId: string): Promise<IDataspaceProtocolDataset> {\n\t\tGuards.stringValue(DataspaceDataPlaneService.CLASS_NAME, nameof(datasetId), datasetId);\n\t\tconst appNames = DataspaceAppFactory.names();\n\n\t\tfor (const appId of appNames) {\n\t\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(appId);\n\t\t\tconst datasets = await app.datasetsHandled();\n\t\t\tconst dataset = datasets.find(d => d[\"@id\"] === datasetId);\n\t\t\tif (dataset) {\n\t\t\t\treturn dataset;\n\t\t\t}\n\t\t}\n\n\t\tthrow new NotFoundError(DataspaceDataPlaneService.CLASS_NAME, \"noAppRegistered\", datasetId, {\n\t\t\tdatasetId\n\t\t});\n\t}\n\n\t/**\n\t * Returns an App for a Data Asset query (datasetId, ...).\n\t * @param dataAssetQuery The data asset query.\n\t * @returns The Dataspace Data Plane App ID.\n\t * @internal\n\t */\n\tprivate async getAppForDataAssetQuery(dataAssetQuery: IDataAssetQuery): Promise<string> {\n\t\tconst matchingElements: string[] = [];\n\t\tconst appNames = DataspaceAppFactory.names();\n\n\t\tfor (const appId of appNames) {\n\t\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(appId);\n\t\t\tconst datasets = await app.datasetsHandled();\n\n\t\t\tfor (const dataset of datasets) {\n\t\t\t\tif (dataset[\"@id\"] === dataAssetQuery.datasetId) {\n\t\t\t\t\tmatchingElements.push(appId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (matchingElements.length > 1) {\n\t\t\tconst error = new ConflictError(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\"tooManyAppsRegistered\",\n\t\t\t\tdataAssetQuery.datasetId,\n\t\t\t\tmatchingElements,\n\t\t\t\t{\n\t\t\t\t\tdatasetId: dataAssetQuery.datasetId\n\t\t\t\t}\n\t\t\t);\n\t\t\tawait this._logging?.log({\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: \"tooManyAppsRegistered\",\n\t\t\t\terror,\n\t\t\t\tdata: {\n\t\t\t\t\tdatasetId: dataAssetQuery.datasetId\n\t\t\t\t}\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (!Is.arrayValue(matchingElements)) {\n\t\t\tconst error = new NotFoundError(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\"noAppRegistered\",\n\t\t\t\tdataAssetQuery.datasetId,\n\t\t\t\t{\n\t\t\t\t\tdatasetId: dataAssetQuery.datasetId\n\t\t\t\t}\n\t\t\t);\n\t\t\tawait this._logging?.log({\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: \"noAppRegistered\",\n\t\t\t\terror,\n\t\t\t\tdata: {\n\t\t\t\t\tdatasetId: dataAssetQuery.datasetId\n\t\t\t\t}\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn matchingElements[0];\n\t}\n\n\t/**\n\t * Prepare an activity for retry by updating metadata and returning apps to skip.\n\t * @param activityLogEntryId The activity log entry ID.\n\t * @param existingEntry The existing activity log entry with error status.\n\t * @returns Array of app IDs that already succeeded and should be skipped.\n\t * @internal\n\t */\n\tprivate async prepareForRetry(\n\t\tactivityLogEntryId: string,\n\t\texistingEntry: IActivityLogEntry\n\t): Promise<string[]> {\n\t\tconst appsToRetry = existingEntry.inErrorTasks?.map(t => t.dataspaceAppId) ?? [];\n\n\t\tif (!Is.arrayValue(appsToRetry)) {\n\t\t\tthrow new NotFoundError(\n\t\t\t\tDataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\"noFailedTasksToRetry\",\n\t\t\t\tactivityLogEntryId\n\t\t\t);\n\t\t}\n\n\t\tconst successfulApps = existingEntry.finalizedTasks?.map(t => t.dataspaceAppId) ?? [];\n\n\t\tawait this._logging?.log({\n\t\t\tlevel: \"debug\",\n\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\tmessage: \"replacingFailedTasks\",\n\t\t\tdata: {\n\t\t\t\tactivityLogEntryId,\n\t\t\t\tappsToRetry,\n\t\t\t\tsuccessfulApps\n\t\t\t}\n\t\t});\n\n\t\tconst logEntry = await this._entityStorageActivityLogs.get(activityLogEntryId);\n\t\tif (logEntry) {\n\t\t\tlogEntry.dateModified = new Date().toISOString();\n\t\t\t// Extend retention to allow retry to complete\n\t\t\tif (this._retainActivityLogsFor !== -1) {\n\t\t\t\tlogEntry.retainUntil = Date.now() + this._retainActivityLogsFor;\n\t\t\t}\n\t\t\t// Monitoring purposes\n\t\t\tlogEntry.retryCount = (logEntry.retryCount ?? 0) + 1;\n\t\t\tawait this._entityStorageActivityLogs.set(logEntry);\n\t\t}\n\n\t\treturn successfulApps;\n\t}\n\n\t/**\n\t * Build transfer context from a TransferProcessEntity.\n\t * @param transferProcess The transfer process entity.\n\t * @returns The transfer context for use by data access methods.\n\t * @internal\n\t */\n\tprivate buildTransferContext(transferProcess: TransferProcess): ITransferContext {\n\t\t// Build the IOdrlAgreement from stored data\n\t\t// The entity stores agreementId and policies separately\n\t\t//\n\t\t// NOTE: Currently policies are cached in the TransferProcessEntity at transfer start time.\n\t\t// Eventually, this should fetch fresh policies from Rights Management (PAP) using:\n\t\t// const freshAgreement = await this._policyAdministrationPoint.get(transferProcess.agreementId);\n\t\t// This would ensure policies are always up-to-date and support dynamic policy updates.\n\t\tconst agreement: IOdrlAgreement = {\n\t\t\t\"@context\": \"http://www.w3.org/ns/odrl.jsonld\",\n\t\t\t\"@type\": \"Agreement\",\n\t\t\tuid: transferProcess.agreementId,\n\t\t\ttarget: transferProcess.datasetId,\n\t\t\t// Provider is the assigner, consumer is the assignee\n\t\t\tassigner: transferProcess.providerIdentity ?? \"\",\n\t\t\tassignee: transferProcess.consumerIdentity ?? \"\"\n\t\t};\n\n\t\t// Extract policies from the stored Agreement\n\t\t// Extract permission, prohibition, and obligation\n\t\tif (Is.arrayValue(transferProcess.policies)) {\n\t\t\tconst storedAgreement = transferProcess.policies[0] as IOdrlAgreement | undefined;\n\t\t\tif (storedAgreement) {\n\t\t\t\tagreement.permission = storedAgreement.permission;\n\t\t\t\tagreement.prohibition = storedAgreement.prohibition;\n\t\t\t\tagreement.obligation = storedAgreement.obligation;\n\t\t\t}\n\t\t}\n\n\t\tconst state = transferProcess.state;\n\t\tconst dataAddress = transferProcess.dataAddress;\n\n\t\treturn {\n\t\t\tconsumerPid: transferProcess.consumerPid,\n\t\t\tproviderPid: transferProcess.providerPid,\n\t\t\tagreement,\n\t\t\tdatasetId: transferProcess.datasetId,\n\t\t\tofferId: transferProcess.offerId,\n\t\t\tstate,\n\t\t\tconsumerIdentity: transferProcess.consumerIdentity,\n\t\t\tproviderIdentity: transferProcess.providerIdentity,\n\t\t\tdataAddress\n\t\t};\n\t}\n\n\t/**\n\t * Apply ODRL policy enforcement to query results.\n\t * Delegates to the Policy Enforcement Point (PEP) which coordinates\n\t * PDP, arbiters, and enforcement processors.\n\t * @param result The data asset item list result to filter.\n\t * @param agreement The ODRL Agreement containing policies.\n\t * @returns The result with policies applied.\n\t * @internal\n\t */\n\tprivate async applyPolicyFilters(\n\t\tresult: IDataAssetItemListResult,\n\t\tagreement?: IOdrlAgreement\n\t): Promise<IDataAssetItemListResult> {\n\t\tif (!agreement || !this._policyEnforcementPoint) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst processed =\n\t\t\tawait this._policyEnforcementPoint.interceptWithPolicy<IDataAssetItemListResult>(\n\t\t\t\tagreement,\n\t\t\t\tresult\n\t\t\t);\n\n\t\tif (Is.arrayValue(agreement.obligation)) {\n\t\t\tawait this.logObligations(agreement.obligation, agreement.uid);\n\t\t}\n\n\t\treturn processed;\n\t}\n\n\t/**\n\t * Log ODRL obligations for auditing purposes.\n\t * Obligations are duties that must be fulfilled as part of the agreement.\n\t * @param obligations The obligation rules from the Agreement.\n\t * @param agreementId The agreement ID for reference.\n\t * @internal\n\t */\n\tprivate async logObligations(\n\t\tobligations: IOdrlAgreement[\"obligation\"],\n\t\tagreementId: string\n\t): Promise<void> {\n\t\tif (!Is.arrayValue(obligations)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const obligation of obligations) {\n\t\t\tawait this._logging?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\tmessage: \"policyObligationTriggered\",\n\t\t\t\tdata: {\n\t\t\t\t\tagreementId,\n\t\t\t\t\taction: obligation.action,\n\t\t\t\t\ttarget: obligation.target,\n\t\t\t\t\tassignee: obligation.assignee\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
@@ -0,0 +1,82 @@
1
+ import { ComponentFactory, Guards } from "@twin.org/core";
2
+ import { ACTIVITY_LOG_ROUTE } from "./dataspaceDataPlaneRoutes.js";
3
+ /**
4
+ * The source used when communicating about these routes.
5
+ */
6
+ const ROUTES_SOURCE = "dataspaceDataPlaneSocketRoutes";
7
+ /**
8
+ * The socket routes for the Dataspace Data Plane.
9
+ * @param baseRouteName Prefix to prepend to the paths.
10
+ * @param componentName The name of the component to use in the routes stored in the ComponentFactory.
11
+ * @returns The generated routes.
12
+ */
13
+ export function generateSocketRoutesDataspaceDataPlane(baseRouteName, componentName) {
14
+ const activityLogStatusWsRoute = {
15
+ operationId: "statusQuery",
16
+ path: `${baseRouteName}/${ACTIVITY_LOG_ROUTE}/status`,
17
+ handler: async (socketRequestContext, request, emitter) => activityLogStatusUpdate(socketRequestContext, componentName, request, emitter),
18
+ connected: async (socketRequestContext) => activityLogStatusConnected(socketRequestContext),
19
+ disconnected: async (socketRequestContext) => activityLogStatusDisconnected(socketRequestContext, componentName)
20
+ };
21
+ return [activityLogStatusWsRoute];
22
+ }
23
+ /**
24
+ * Provides an status update.
25
+ * @param socketRequestContext The request context for the API.
26
+ * @param componentName The name of the component to use in the routes.
27
+ * @param request The request.
28
+ * @param emitter The emitter to send message back.
29
+ * @returns The response object with additional http response properties.
30
+ */
31
+ export async function activityLogStatusUpdate(socketRequestContext, componentName, request, emitter) {
32
+ Guards.object(ROUTES_SOURCE, "request", request);
33
+ Guards.stringValue(ROUTES_SOURCE, "request.body.operation", request.body.operation);
34
+ Guards.stringValue(ROUTES_SOURCE, "request.body.subscriptionId", request.body.subscriptionId);
35
+ const component = ComponentFactory.get(componentName);
36
+ switch (request.body.operation) {
37
+ case "subscribe":
38
+ await component.subscribeToActivityLog(async (event) => {
39
+ await emitter("publish", {
40
+ body: event
41
+ });
42
+ }, request.body.subscriptionId);
43
+ break;
44
+ case "unsubscribe":
45
+ await component.unSubscribeToActivityLog(request.body.subscriptionId);
46
+ break;
47
+ }
48
+ }
49
+ /**
50
+ * Executes when there is a disconnection.
51
+ * @param socketRequestContext Socket Request Context
52
+ * @param componentName Component name.
53
+ */
54
+ export async function activityLogStatusDisconnected(socketRequestContext, componentName) {
55
+ const logger = ComponentFactory.getIfExists(socketRequestContext.loggingComponentType);
56
+ const component = ComponentFactory.get(componentName);
57
+ await logger?.log({
58
+ source: ROUTES_SOURCE,
59
+ level: "debug",
60
+ message: "activityLogStatusDisconnected",
61
+ data: {
62
+ socketId: socketRequestContext.socketId
63
+ }
64
+ });
65
+ await component.unSubscribeToActivityLog(socketRequestContext.socketId);
66
+ }
67
+ /**
68
+ * Executes when there is a disconnection.
69
+ * @param socketRequestContext Socket Request Context
70
+ */
71
+ export async function activityLogStatusConnected(socketRequestContext) {
72
+ const logger = ComponentFactory.getIfExists(socketRequestContext.loggingComponentType);
73
+ await logger?.log({
74
+ source: ROUTES_SOURCE,
75
+ level: "debug",
76
+ message: "activityLogStatusConnected",
77
+ data: {
78
+ socketId: socketRequestContext.socketId
79
+ }
80
+ });
81
+ }
82
+ //# sourceMappingURL=dataspaceDataPlaneSocketRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataspaceDataPlaneSocketRoutes.js","sourceRoot":"","sources":["../../src/dataspaceDataPlaneSocketRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { ISocketRequestContext, ISocketRoute } from \"@twin.org/api-models\";\nimport { ComponentFactory, Guards } from \"@twin.org/core\";\nimport type {\n\tIActivityLogStatusNotificationPayload,\n\tIActivityLogStatusRequest,\n\tIDataspaceDataPlaneComponent\n} from \"@twin.org/dataspace-models\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport { ACTIVITY_LOG_ROUTE } from \"./dataspaceDataPlaneRoutes.js\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"dataspaceDataPlaneSocketRoutes\";\n\n/**\n * The socket routes for the Dataspace Data Plane.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param componentName The name of the component to use in the routes stored in the ComponentFactory.\n * @returns The generated routes.\n */\nexport function generateSocketRoutesDataspaceDataPlane(\n\tbaseRouteName: string,\n\tcomponentName: string\n): ISocketRoute[] {\n\tconst activityLogStatusWsRoute: ISocketRoute<\n\t\tIActivityLogStatusRequest,\n\t\tIActivityLogStatusNotificationPayload\n\t> = {\n\t\toperationId: \"statusQuery\",\n\t\tpath: `${baseRouteName}/${ACTIVITY_LOG_ROUTE}/status`,\n\t\thandler: async (socketRequestContext, request, emitter) =>\n\t\t\tactivityLogStatusUpdate(socketRequestContext, componentName, request, emitter),\n\t\tconnected: async socketRequestContext => activityLogStatusConnected(socketRequestContext),\n\t\tdisconnected: async socketRequestContext =>\n\t\t\tactivityLogStatusDisconnected(socketRequestContext, componentName)\n\t};\n\n\treturn [activityLogStatusWsRoute];\n}\n\n/**\n * Provides an status update.\n * @param socketRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @param emitter The emitter to send message back.\n * @returns The response object with additional http response properties.\n */\nexport async function activityLogStatusUpdate(\n\tsocketRequestContext: ISocketRequestContext,\n\tcomponentName: string,\n\trequest: IActivityLogStatusRequest,\n\temitter: (topic: string, response: IActivityLogStatusNotificationPayload) => Promise<void>\n): Promise<void> {\n\tGuards.object<IActivityLogStatusRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.body.operation), request.body.operation);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body.subscriptionId),\n\t\trequest.body.subscriptionId\n\t);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(componentName);\n\n\tswitch (request.body.operation) {\n\t\tcase \"subscribe\":\n\t\t\tawait component.subscribeToActivityLog(async event => {\n\t\t\t\tawait emitter(\"publish\", {\n\t\t\t\t\tbody: event\n\t\t\t\t});\n\t\t\t}, request.body.subscriptionId);\n\t\t\tbreak;\n\t\tcase \"unsubscribe\":\n\t\t\tawait component.unSubscribeToActivityLog(request.body.subscriptionId);\n\t\t\tbreak;\n\t}\n}\n\n/**\n * Executes when there is a disconnection.\n * @param socketRequestContext Socket Request Context\n * @param componentName Component name.\n */\nexport async function activityLogStatusDisconnected(\n\tsocketRequestContext: ISocketRequestContext,\n\tcomponentName: string\n): Promise<void> {\n\tconst logger = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\tsocketRequestContext.loggingComponentType\n\t);\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(componentName);\n\n\tawait logger?.log({\n\t\tsource: ROUTES_SOURCE,\n\t\tlevel: \"debug\",\n\t\tmessage: \"activityLogStatusDisconnected\",\n\t\tdata: {\n\t\t\tsocketId: socketRequestContext.socketId\n\t\t}\n\t});\n\n\tawait component.unSubscribeToActivityLog(socketRequestContext.socketId);\n}\n\n/**\n * Executes when there is a disconnection.\n * @param socketRequestContext Socket Request Context\n */\nexport async function activityLogStatusConnected(\n\tsocketRequestContext: ISocketRequestContext\n): Promise<void> {\n\tconst logger = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\tsocketRequestContext.loggingComponentType\n\t);\n\n\tawait logger?.log({\n\t\tsource: ROUTES_SOURCE,\n\t\tlevel: \"debug\",\n\t\tmessage: \"activityLogStatusConnected\",\n\t\tdata: {\n\t\t\tsocketId: socketRequestContext.socketId\n\t\t}\n\t});\n}\n"]}
@@ -0,0 +1,69 @@
1
+ // Copyright 2025 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ import { entity, property, SortDirection } from "@twin.org/entity";
4
+ /**
5
+ * Activity Log Details.
6
+ */
7
+ let ActivityLogDetails = class ActivityLogDetails {
8
+ /**
9
+ * The entry Id.
10
+ */
11
+ id;
12
+ /**
13
+ * The Activity Id.
14
+ */
15
+ activityId;
16
+ /**
17
+ * The generator of the Activity (different than the Actor)
18
+ */
19
+ generator;
20
+ /**
21
+ * The creation date.
22
+ */
23
+ dateCreated;
24
+ /**
25
+ * The last update date.
26
+ */
27
+ dateModified;
28
+ /**
29
+ * The timestamp of when to retain the entry until.
30
+ */
31
+ retainUntil;
32
+ /**
33
+ * Number of times this activity has been retried.
34
+ */
35
+ retryCount;
36
+ };
37
+ __decorate([
38
+ property({ type: "string", isPrimary: true }),
39
+ __metadata("design:type", String)
40
+ ], ActivityLogDetails.prototype, "id", void 0);
41
+ __decorate([
42
+ property({ type: "string", optional: true }),
43
+ __metadata("design:type", String)
44
+ ], ActivityLogDetails.prototype, "activityId", void 0);
45
+ __decorate([
46
+ property({ type: "string" }),
47
+ __metadata("design:type", String)
48
+ ], ActivityLogDetails.prototype, "generator", void 0);
49
+ __decorate([
50
+ property({ type: "string", format: "date-time", sortDirection: SortDirection.Descending }),
51
+ __metadata("design:type", String)
52
+ ], ActivityLogDetails.prototype, "dateCreated", void 0);
53
+ __decorate([
54
+ property({ type: "string", format: "date-time" }),
55
+ __metadata("design:type", String)
56
+ ], ActivityLogDetails.prototype, "dateModified", void 0);
57
+ __decorate([
58
+ property({ type: "integer", optional: true, format: "uint64" }),
59
+ __metadata("design:type", Number)
60
+ ], ActivityLogDetails.prototype, "retainUntil", void 0);
61
+ __decorate([
62
+ property({ type: "integer", optional: true, format: "uint32" }),
63
+ __metadata("design:type", Number)
64
+ ], ActivityLogDetails.prototype, "retryCount", void 0);
65
+ ActivityLogDetails = __decorate([
66
+ entity()
67
+ ], ActivityLogDetails);
68
+ export { ActivityLogDetails };
69
+ //# sourceMappingURL=activityLogDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activityLogDetails.js","sourceRoot":"","sources":["../../../src/entities/activityLogDetails.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEnE;;GAEG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC9B;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,UAAU,CAAU;IAE3B;;OAEG;IAEI,SAAS,CAAU;IAE1B;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,YAAY,CAAU;IAE7B;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,UAAU,CAAU;CAC3B,CAAA;AArCO;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;8CAC3B;AAMZ;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sDAClB;AAMpB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;qDACH;AAMnB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC;;uDAC/D;AAMrB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;;wDACrB;AAMtB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;;uDACpC;AAMrB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;;sDACrC;AAzCf,kBAAkB;IAD9B,MAAM,EAAE;GACI,kBAAkB,CA0C9B","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { entity, property, SortDirection } from \"@twin.org/entity\";\n\n/**\n * Activity Log Details.\n */\n@entity()\nexport class ActivityLogDetails {\n\t/**\n\t * The entry Id.\n\t */\n\t@property({ type: \"string\", isPrimary: true })\n\tpublic id!: string;\n\n\t/**\n\t * The Activity Id.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic activityId?: string;\n\n\t/**\n\t * The generator of the Activity (different than the Actor)\n\t */\n\t@property({ type: \"string\" })\n\tpublic generator!: string;\n\n\t/**\n\t * The creation date.\n\t */\n\t@property({ type: \"string\", format: \"date-time\", sortDirection: SortDirection.Descending })\n\tpublic dateCreated!: string;\n\n\t/**\n\t * The last update date.\n\t */\n\t@property({ type: \"string\", format: \"date-time\" })\n\tpublic dateModified!: string;\n\n\t/**\n\t * The timestamp of when to retain the entry until.\n\t */\n\t@property({ type: \"integer\", optional: true, format: \"uint64\" })\n\tpublic retainUntil?: number;\n\n\t/**\n\t * Number of times this activity has been retried.\n\t */\n\t@property({ type: \"integer\", optional: true, format: \"uint32\" })\n\tpublic retryCount?: number;\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { entity, property } from "@twin.org/entity";
2
+ /**
3
+ * Activity Task entity linking activity log entries to their background tasks.
4
+ */
5
+ let ActivityTask = class ActivityTask {
6
+ /**
7
+ * The entry Id.
8
+ */
9
+ activityLogEntryId;
10
+ /**
11
+ * The tasks.
12
+ */
13
+ associatedTasks;
14
+ };
15
+ __decorate([
16
+ property({ type: "string", isPrimary: true }),
17
+ __metadata("design:type", String)
18
+ ], ActivityTask.prototype, "activityLogEntryId", void 0);
19
+ __decorate([
20
+ property({ type: "array", format: "json" }),
21
+ __metadata("design:type", Array)
22
+ ], ActivityTask.prototype, "associatedTasks", void 0);
23
+ ActivityTask = __decorate([
24
+ entity()
25
+ ], ActivityTask);
26
+ export { ActivityTask };
27
+ //# sourceMappingURL=activityTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activityTask.js","sourceRoot":"","sources":["../../../src/entities/activityTask.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAY;IACxB;;OAEG;IAEI,kBAAkB,CAAU;IAEnC;;OAEG;IAEI,eAAe,CAAc;CACpC,CAAA;AAPO;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;wDACX;AAM5B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;qDACR;AAXxB,YAAY;IADxB,MAAM,EAAE;GACI,YAAY,CAYxB","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { ITaskApp } from \"@twin.org/dataspace-models\";\nimport { entity, property } from \"@twin.org/entity\";\n\n/**\n * Activity Task entity linking activity log entries to their background tasks.\n */\n@entity()\nexport class ActivityTask {\n\t/**\n\t * The entry Id.\n\t */\n\t@property({ type: \"string\", isPrimary: true })\n\tpublic activityLogEntryId!: string;\n\n\t/**\n\t * The tasks.\n\t */\n\t@property({ type: \"array\", format: \"json\" })\n\tpublic associatedTasks!: ITaskApp[];\n}\n"]}
@@ -0,0 +1,13 @@
1
+ // Copyright 2025 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ export * from "./dataspaceDataPlaneRoutes.js";
4
+ export * from "./dataspaceDataPlaneSocketRoutes.js";
5
+ export * from "./dataspaceDataPlaneService.js";
6
+ export * from "./entities/activityLogDetails.js";
7
+ export * from "./entities/activityTask.js";
8
+ export * from "./models/IDataspaceDataPlaneServiceConfig.js";
9
+ export * from "./models/IDataspaceDataPlaneServiceConstructorOptions.js";
10
+ export * from "./restEntryPoints.js";
11
+ export * from "./schema.js";
12
+ export * from "./socketEntryPoints.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport * from \"./dataspaceDataPlaneRoutes.js\";\nexport * from \"./dataspaceDataPlaneSocketRoutes.js\";\nexport * from \"./dataspaceDataPlaneService.js\";\nexport * from \"./entities/activityLogDetails.js\";\nexport * from \"./entities/activityTask.js\";\nexport * from \"./models/IDataspaceDataPlaneServiceConfig.js\";\nexport * from \"./models/IDataspaceDataPlaneServiceConstructorOptions.js\";\nexport * from \"./restEntryPoints.js\";\nexport * from \"./schema.js\";\nexport * from \"./socketEntryPoints.js\";\n"]}
@@ -0,0 +1,4 @@
1
+ // Copyright 2025 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ export {};
4
+ //# sourceMappingURL=IDataspaceDataPlaneServiceConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IDataspaceDataPlaneServiceConfig.js","sourceRoot":"","sources":["../../../src/models/IDataspaceDataPlaneServiceConfig.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * Dataspace Data Plane service configuration\n */\nexport interface IDataspaceDataPlaneServiceConfig {\n\t/**\n\t * The amount of time in minutes to retain activity log entries until removal, set to -1 to keep forever.\n\t * @default 10\n\t */\n\tretainActivityLogsFor?: number;\n\n\t/**\n\t * The interval in minutes in between activity log clean ups. -1 indicates no clean up shall be done.\n\t * @default 60 minutes\n\t */\n\tactivityLogsCleanUpInterval?: number;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IDataspaceDataPlaneServiceConstructorOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IDataspaceDataPlaneServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IDataspaceDataPlaneServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IDataspaceDataPlaneServiceConfig } from \"./IDataspaceDataPlaneServiceConfig.js\";\n\n/**\n * Dataspace Data Plane service options\n */\nexport interface IDataspaceDataPlaneServiceConstructorOptions {\n\t/**\n\t * Logging component type.\n\t * @default logging\n\t */\n\tloggingComponentType?: string;\n\n\t/**\n\t * Background task component.\n\t * @default background-task\n\t */\n\tbackgroundTaskComponentType?: string;\n\n\t/**\n\t * Task Scheduler Component Type.\n\t * @default task-scheduler\n\t */\n\ttaskSchedulerComponentType?: string;\n\n\t/**\n\t * The entity storage for activity log details.\n\t * @default activity-log-details\n\t */\n\tactivityLogEntityStorageType?: string;\n\n\t/**\n\t * The entity storage for the association between Activities and Tasks.\n\t * @default activity-task\n\t */\n\tactivityTaskEntityStorageType?: string;\n\n\t/**\n\t * The entity storage type for Transfer Process entities.\n\t * Used to read Transfer Process state from shared storage.\n\t * @default transfer-process\n\t */\n\ttransferProcessEntityStorageType?: string;\n\n\t/**\n\t * The keys to use from the context ids to cleanup partitions.\n\t */\n\tpartitionContextIds?: string[];\n\n\t/**\n\t * Trust component type.\n\t * @default trust\n\t */\n\ttrustComponentType?: string;\n\n\t/**\n\t * Policy enforcement point component type for ODRL policy enforcement.\n\t * @default policy-enforcement-point-service\n\t */\n\tpepComponentType?: string;\n\n\t/**\n\t * The configuration of the Dataspace Data Plane Service.\n\t */\n\tconfig?: IDataspaceDataPlaneServiceConfig;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { generateRestRoutesDataspaceDataPlane, tagsDataspaceDataPlane } from "./dataspaceDataPlaneRoutes.js";
2
+ export const restEntryPoints = [
3
+ {
4
+ name: "dataspace-data-plane",
5
+ defaultBaseRoute: "dataspace-data-plane",
6
+ tags: tagsDataspaceDataPlane,
7
+ generateRoutes: generateRestRoutesDataspaceDataPlane
8
+ }
9
+ ];
10
+ //# sourceMappingURL=restEntryPoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restEntryPoints.js","sourceRoot":"","sources":["../../src/restEntryPoints.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,oCAAoC,EACpC,sBAAsB,EACtB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,CAAC,MAAM,eAAe,GAA2B;IACtD;QACC,IAAI,EAAE,sBAAsB;QAC5B,gBAAgB,EAAE,sBAAsB;QACxC,IAAI,EAAE,sBAAsB;QAC5B,cAAc,EAAE,oCAAoC;KACpD;CACD,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IRestRouteEntryPoint } from \"@twin.org/api-models\";\nimport {\n\tgenerateRestRoutesDataspaceDataPlane,\n\ttagsDataspaceDataPlane\n} from \"./dataspaceDataPlaneRoutes.js\";\n\nexport const restEntryPoints: IRestRouteEntryPoint[] = [\n\t{\n\t\tname: \"dataspace-data-plane\",\n\t\tdefaultBaseRoute: \"dataspace-data-plane\",\n\t\ttags: tagsDataspaceDataPlane,\n\t\tgenerateRoutes: generateRestRoutesDataspaceDataPlane\n\t}\n];\n"]}
@@ -0,0 +1,13 @@
1
+ // Copyright 2025 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ import { EntitySchemaFactory, EntitySchemaHelper } from "@twin.org/entity";
4
+ import { ActivityLogDetails } from "./entities/activityLogDetails.js";
5
+ import { ActivityTask } from "./entities/activityTask.js";
6
+ /**
7
+ * Inits schemas.
8
+ */
9
+ export function initSchema() {
10
+ EntitySchemaFactory.register("ActivityLogDetails", () => EntitySchemaHelper.getSchema(ActivityLogDetails));
11
+ EntitySchemaFactory.register("ActivityTask", () => EntitySchemaHelper.getSchema(ActivityTask));
12
+ }
13
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,UAAU;IACzB,mBAAmB,CAAC,QAAQ,uBAA+B,GAAG,EAAE,CAC/D,kBAAkB,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAChD,CAAC;IAEF,mBAAmB,CAAC,QAAQ,iBAAyB,GAAG,EAAE,CACzD,kBAAkB,CAAC,SAAS,CAAC,YAAY,CAAC,CAC1C,CAAC;AACH,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { EntitySchemaFactory, EntitySchemaHelper } from \"@twin.org/entity\";\nimport { nameof } from \"@twin.org/nameof\";\nimport { ActivityLogDetails } from \"./entities/activityLogDetails.js\";\nimport { ActivityTask } from \"./entities/activityTask.js\";\n\n/**\n * Inits schemas.\n */\nexport function initSchema(): void {\n\tEntitySchemaFactory.register(nameof<ActivityLogDetails>(), () =>\n\t\tEntitySchemaHelper.getSchema(ActivityLogDetails)\n\t);\n\n\tEntitySchemaFactory.register(nameof<ActivityTask>(), () =>\n\t\tEntitySchemaHelper.getSchema(ActivityTask)\n\t);\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { tagsDataspaceDataPlane } from "./dataspaceDataPlaneRoutes.js";
2
+ import { generateSocketRoutesDataspaceDataPlane } from "./dataspaceDataPlaneSocketRoutes.js";
3
+ export const socketEntryPoints = [
4
+ {
5
+ name: "dataspace-data-plane",
6
+ defaultBaseRoute: "dataspace-data-plane",
7
+ tags: tagsDataspaceDataPlane,
8
+ generateRoutes: generateSocketRoutesDataspaceDataPlane
9
+ }
10
+ ];
11
+ //# sourceMappingURL=socketEntryPoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketEntryPoints.js","sourceRoot":"","sources":["../../src/socketEntryPoints.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,sCAAsC,EAAE,MAAM,qCAAqC,CAAC;AAE7F,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IAC1D;QACC,IAAI,EAAE,sBAAsB;QAC5B,gBAAgB,EAAE,sBAAsB;QACxC,IAAI,EAAE,sBAAsB;QAC5B,cAAc,EAAE,sCAAsC;KACtD;CACD,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { ISocketRouteEntryPoint } from \"@twin.org/api-models\";\nimport { tagsDataspaceDataPlane } from \"./dataspaceDataPlaneRoutes.js\";\nimport { generateSocketRoutesDataspaceDataPlane } from \"./dataspaceDataPlaneSocketRoutes.js\";\n\nexport const socketEntryPoints: ISocketRouteEntryPoint[] = [\n\t{\n\t\tname: \"dataspace-data-plane\",\n\t\tdefaultBaseRoute: \"dataspace-data-plane\",\n\t\ttags: tagsDataspaceDataPlane,\n\t\tgenerateRoutes: generateSocketRoutesDataspaceDataPlane\n\t}\n];\n"]}
@@ -0,0 +1,50 @@
1
+ import { type IConflictResponse, type ICreatedResponse, type IHttpRequestContext, type INotFoundResponse, type IRestRoute, type ITag, type IUnprocessableEntityResponse } from "@twin.org/api-models";
2
+ import type { IActivityLogEntryGetRequest, IActivityLogEntryGetResponse, IActivityStreamNotifyRequest, IDataAssetEntitiesResponse, IDataAssetGetEntitiesRequest, IDataAssetQueryRequest } from "@twin.org/dataspace-models";
3
+ /**
4
+ * Activity processing details route.
5
+ */
6
+ export declare const ACTIVITY_LOG_ROUTE = "activity-logs";
7
+ /**
8
+ * The tag to associate with the routes.
9
+ */
10
+ export declare const tagsDataspaceDataPlane: ITag[];
11
+ /**
12
+ * The REST routes for Dataspace Data Plane.
13
+ * @param baseRouteName Prefix to prepend to the paths.
14
+ * @param factoryServiceName The name of the service to use in the routes store in the ServiceFactory.
15
+ * @returns The generated routes.
16
+ */
17
+ export declare function generateRestRoutesDataspaceDataPlane(baseRouteName: string, factoryServiceName: string): IRestRoute[];
18
+ /**
19
+ * Notify a new Activity to the Dataspace Data Plane Activity Stream.
20
+ * @param baseRouteName The base route name.
21
+ * @param httpRequestContext The request context for the API.
22
+ * @param factoryServiceName The name of the service to use in the routes.
23
+ * @param request The request.
24
+ * @returns The response object with additional http response properties.
25
+ */
26
+ export declare function activityStreamNotify(baseRouteName: string, httpRequestContext: IHttpRequestContext, factoryServiceName: string, request: IActivityStreamNotifyRequest): Promise<ICreatedResponse>;
27
+ /**
28
+ * Get an Activity Log entry.
29
+ * @param httpRequestContext The request context for the API.
30
+ * @param factoryServiceName The name of the service to use in the routes.
31
+ * @param request The request.
32
+ * @returns The response object with additional http response properties.
33
+ */
34
+ export declare function activityLogEntryGet(httpRequestContext: IHttpRequestContext, factoryServiceName: string, request: IActivityLogEntryGetRequest): Promise<IActivityLogEntryGetResponse | INotFoundResponse>;
35
+ /**
36
+ * Handles a request to obtain the entities of a data asset.
37
+ * @param httpRequestContext The request Context.
38
+ * @param factoryServiceName The factory service name
39
+ * @param request The request.
40
+ * @returns Either the entities as JSON-LD or the corresponding error response.
41
+ */
42
+ export declare function getDataAssetEntities(httpRequestContext: IHttpRequestContext, factoryServiceName: string, request: IDataAssetGetEntitiesRequest): Promise<IDataAssetEntitiesResponse | INotFoundResponse | IConflictResponse>;
43
+ /**
44
+ * Handles a request to query a data asset.
45
+ * @param httpRequestContext The request Context.
46
+ * @param factoryServiceName The factory service name
47
+ * @param request The request.
48
+ * @returns Either the entities as JSON-LD or the corresponding error response.
49
+ */
50
+ export declare function queryDataAsset(httpRequestContext: IHttpRequestContext, factoryServiceName: string, request: IDataAssetQueryRequest): Promise<IDataAssetEntitiesResponse | INotFoundResponse | IUnprocessableEntityResponse>;