@twin.org/dataspace-data-plane-service 0.0.3-next.28 → 0.0.3-next.29
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.
|
@@ -1059,7 +1059,7 @@ export class DataspaceDataPlaneService {
|
|
|
1059
1059
|
startDate: new Date(now).toISOString(),
|
|
1060
1060
|
endDate: new Date(now).toISOString(),
|
|
1061
1061
|
status: Is.empty(taskError) ? ActivityTaskStatus.Success : ActivityTaskStatus.Failed,
|
|
1062
|
-
error: taskError
|
|
1062
|
+
error: taskError?.toJsonObject()
|
|
1063
1063
|
};
|
|
1064
1064
|
taskEntries.push(taskEntry);
|
|
1065
1065
|
await this.notifyTaskStatusChanged(payload.activityLogEntryId, payload.activity.id, payload.dataspaceAppId, taskEntry.taskId, taskEntry.status);
|
|
@@ -1 +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 type { ITenant, ITenantAdminComponent } from \"@twin.org/api-models\";\nimport {\n\tTaskStatus,\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\tBaseError,\n\tComponentFactory,\n\tConflictError,\n\tConverter,\n\tGeneralError,\n\tGuardError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tRandomHelper,\n\tUnprocessableError,\n\tValidation,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { Blake2b } from \"@twin.org/crypto\";\nimport { DataTypeHelper, JsonSchemaHelper } from \"@twin.org/data-core\";\nimport {\n\tJsonLdDataTypes,\n\tJsonLdHelper,\n\tJsonLdProcessor,\n\ttype IJsonLdContextDefinitionElement,\n\ttype IJsonLdNodeObject\n} from \"@twin.org/data-json-ld\";\nimport {\n\tActivityProcessingStatus,\n\tActivityTaskStatus,\n\tDataRequestType,\n\tDataspaceAppFactory,\n\tDataspaceContexts,\n\tDataspaceDataTypes,\n\tDataspaceTypes,\n\ttype IActivityLogEntry,\n\ttype IActivityLogStatusNotification,\n\ttype IActivityQuery,\n\ttype IActivityTaskEntry,\n\ttype IDataAssetItemListResult,\n\ttype IDataAssetQuery,\n\ttype IDataRequest,\n\ttype IDataspaceActivity,\n\ttype IDataspaceApp,\n\ttype IDataspaceDataPlaneComponent,\n\ttype IEntitySet,\n\ttype IExecutionPayload,\n\ttype IFilteringQuery,\n\ttype ITransferContext,\n\ttype DataspaceAppDataset,\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 IDataspaceProtocolAgreement,\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 type { IActivityStreamsActivity } from \"@twin.org/standards-w3c-activity-streams\";\nimport { OdrlContexts } from \"@twin.org/standards-w3c-odrl\";\nimport { TrustHelper, type ITrustComponent } 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 * 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 * Track task handler registrations to avoid resetting worker pools on every task.\n\t * @internal\n\t */\n\tprivate readonly _registeredTaskTypes: string[];\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 * Retry count for failed tasks.\n\t * @internal\n\t */\n\tprivate readonly _retryCount?: 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 * The tenant admin component.\n\t * @internal\n\t */\n\tprivate readonly _tenantAdmin?: ITenantAdminComponent;\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 * Entity storage for tenant-supplied Dataspace App Dataset entities.\n\t * @internal\n\t */\n\tprivate readonly _dataspaceAppDatasetStorage: IEntityStorageConnector<DataspaceAppDataset>;\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\tthis._tenantAdmin = ComponentFactory.getIfExists<ITenantAdminComponent>(\n\t\t\toptions?.tenantAdminType ?? \"tenant-admin\"\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\tthis._dataspaceAppDatasetStorage = EntityStorageConnectorFactory.get<\n\t\t\tIEntityStorageConnector<DataspaceAppDataset>\n\t\t>(options?.dataspaceAppDatasetEntityStorageType ?? nameofKebabCase<DataspaceAppDataset>());\n\n\t\tJsonLdDataTypes.registerTypes();\n\t\tDataspaceDataTypes.registerTypes();\n\t\tSchemaOrgDataTypes.registerRedirects();\n\t\tDataspaceProtocolDataTypes.registerRedirects();\n\t\tDataspaceProtocolDataTypes.registerTypes();\n\n\t\tthis._activityLogStatusCallbacks = {};\n\t\tthis._registeredTaskTypes = [];\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._retryCount = options?.config?.retryCount;\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 id or entry.\n\t */\n\tpublic async notifyActivity(\n\t\tactivity: IActivityStreamsActivity\n\t): Promise<string | IActivityLogEntry> {\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._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// We only validate that the activity conforms to Activity Streams Schema without entering into details\n\t\t// about the object, target or actor as they might be subject of custom validation rules\n\t\tconst typeId = `${DataspaceContexts.JsonSchemaNamespace}Dataspace${DataspaceTypes.Activity}`;\n\t\tconst activitySchema = await DataTypeHelper.getSchemaForType(typeId);\n\t\tif (Is.undefined(activitySchema)) {\n\t\t\tthrow new GeneralError(DataspaceDataPlaneService.CLASS_NAME, \"schemaNotFound\", {\n\t\t\t\tschemaId: typeId\n\t\t\t});\n\t\t}\n\t\tconst validationFailures = await JsonSchemaHelper.validate(activitySchema, activity);\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// Calculate Activity Log Entry Id\n\t\tconst canonical = JsonHelper.canonicalize(activity);\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\tlet logEntry = await this._entityStorageActivityLogs.get(activityLogEntryId);\n\t\tlet existingSuccessfulApps: string[] = [];\n\t\tlet isRetry = false;\n\t\tconst now = Date.now();\n\n\t\tif (!Is.undefined(logEntry)) {\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\tlogEntry = {\n\t\t\t\tid: activityLogEntryId,\n\t\t\t\tactivityId: activity.id,\n\t\t\t\tgenerator: this.calculateActivityGeneratorIdentity(activity),\n\t\t\t\tdateCreated: new Date(now).toISOString(),\n\t\t\t\tdateModified: new Date(now).toISOString()\n\t\t\t};\n\t\t\tawait this._entityStorageActivityLogs.set(logEntry);\n\t\t}\n\n\t\tconst activityQuerySet = await this.calculateActivityQuerySet(activity as IDataspaceActivity);\n\n\t\tconst taskEntries: IActivityTaskEntry[] = [];\n\t\tconst handlerApps: {\n\t\t\t[id: string]: {\n\t\t\t\tapp: IDataspaceApp;\n\t\t\t\tprocessingGroupId?: string;\n\t\t\t};\n\t\t} = {};\n\n\t\tfor (const query of activityQuerySet) {\n\t\t\tconst apps = this.getAppForActivityQuery(query);\n\t\t\tfor (const appId in apps) {\n\t\t\t\t// Only process apps that haven't already completed successfully\n\t\t\t\tif (!handlerApps[appId] && !existingSuccessfulApps.includes(appId)) {\n\t\t\t\t\thandlerApps[appId] = apps[appId];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet inlineCount = 0;\n\t\tfor (const handlerAppId in handlerApps) {\n\t\t\tif (\n\t\t\t\tawait this.processTask(\n\t\t\t\t\tactivityLogEntryId,\n\t\t\t\t\tactivity,\n\t\t\t\t\thandlerApps,\n\t\t\t\t\thandlerAppId,\n\t\t\t\t\ttaskEntries,\n\t\t\t\t\tisRetry\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tinlineCount++;\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\tconst activityTask: ActivityTask = {\n\t\t\tactivityLogEntryId,\n\t\t\tassociatedTasks: [...existingTasksToKeep, ...taskEntries]\n\t\t};\n\n\t\tawait this._entityStorageActivityTasks.set(activityTask);\n\n\t\tif (inlineCount === taskEntries.length) {\n\t\t\treturn this.finaliseActivityLogEntry(activityLogEntryId);\n\t\t}\n\n\t\treturn activityTask.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 activityLog = await this._entityStorageActivityLogs.get(logEntryId);\n\t\tif (Is.undefined(activityLog)) {\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\tconst activityTasks = await this._entityStorageActivityTasks.get(logEntryId);\n\n\t\treturn this.constructLogEntry(activityLog, activityTasks);\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 app = await this.getAppForDataAssetQuery({ datasetId });\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 app = await this.getAppForDataAssetQuery({ datasetId });\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 taskId The Id of the Activity Log Entry.\n\t * @param status The final status of the task.\n\t * @param payload The execution payload of the task, required to correlate to the Activity Log Entry and update the processing status.\n\t * @internal\n\t */\n\tprivate async finaliseBackgroundTask(\n\t\ttaskId: string,\n\t\tstatus: TaskStatus,\n\t\tpayload?: IExecutionPayload\n\t): Promise<void> {\n\t\tif (Is.empty(payload)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (status === TaskStatus.Success || status === TaskStatus.Failed) {\n\t\t\tawait this.notifyTaskStatusChanged(\n\t\t\t\tpayload.activityLogEntryId,\n\t\t\t\tpayload.activity.id,\n\t\t\t\tpayload.dataspaceAppId,\n\t\t\t\ttaskId,\n\t\t\t\tstatus\n\t\t\t);\n\n\t\t\tawait this.finaliseActivityLogEntry(payload.activityLogEntryId);\n\t\t}\n\t}\n\n\t/**\n\t * Notify registered callbacks about a task status change.\n\t * @param activityLogEntryId The Id of the Activity Log Entry.\n\t * @param activityId The Id of the Activity.\n\t * @param dataspaceAppId The Id of the Dataspace App associated with the task.\n\t * @param taskId The Id of the task.\n\t * @param taskStatus The new status of the task.\n\t * @internal\n\t */\n\tprivate async notifyTaskStatusChanged(\n\t\tactivityLogEntryId: string,\n\t\tactivityId: string | undefined,\n\t\tdataspaceAppId: string,\n\t\ttaskId: string,\n\t\ttaskStatus: TaskStatus\n\t): Promise<void> {\n\t\tfor (const callback of Object.values(this._activityLogStatusCallbacks)) {\n\t\t\tawait callback({\n\t\t\t\tactivityLogEntryId,\n\t\t\t\tactivityId,\n\t\t\t\ttaskProcessingStatus: {\n\t\t\t\t\tdataspaceAppId,\n\t\t\t\t\ttaskId,\n\t\t\t\t\ttaskStatus\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Finalizes the Activity Log Entry by checking if all associated tasks have completed and, if so, updating the entry to be retained for the configured retention period.\n\t * @param activityLogEntryId The Id of the Activity Log Entry to finalize.\n\t * @returns The Activity Log Entry with updated retention details if applicable.\n\t * @internal\n\t */\n\tprivate async finaliseActivityLogEntry(activityLogEntryId: string): Promise<IActivityLogEntry> {\n\t\tconst entry = await this.getActivityLogEntry(activityLogEntryId);\n\t\tif (\n\t\t\tthis._retainActivityLogsFor !== -1 &&\n\t\t\t(entry.status === ActivityProcessingStatus.Completed ||\n\t\t\t\tentry.status === ActivityProcessingStatus.Error)\n\t\t) {\n\t\t\tconst retainUntil = Date.now() + this._retainActivityLogsFor;\n\t\t\tconst updatedEntry: ActivityLogDetails = {\n\t\t\t\tid: entry.id,\n\t\t\t\tactivityId: entry.activityId,\n\t\t\t\tgenerator: entry.generator,\n\t\t\t\tdateCreated: entry.dateCreated,\n\t\t\t\tdateModified: entry.dateModified,\n\t\t\t\tretainUntil\n\t\t\t};\n\t\t\tawait this._entityStorageActivityLogs.set(updatedEntry);\n\t\t}\n\n\t\treturn entry;\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 by tenant as the data is partitioned\n\t\t\ttry {\n\t\t\t\tlet cursor;\n\t\t\t\tdo {\n\t\t\t\t\tconst result: { tenants: ITenant[]; cursor?: string } | undefined =\n\t\t\t\t\t\tawait this._tenantAdmin?.query(undefined, cursor);\n\t\t\t\t\tcursor = result?.cursor;\n\t\t\t\t\tif (!Is.empty(result)) {\n\t\t\t\t\t\tfor (const tenantId of result.tenants.map(t => t.id)) {\n\t\t\t\t\t\t\tconst localContextIds = (await ContextIdStore.getContextIds()) ?? {};\n\t\t\t\t\t\t\tlocalContextIds[ContextIdKeys.Tenant] = tenantId;\n\n\t\t\t\t\t\t\tawait ContextIdStore.run(localContextIds, async () => {\n\t\t\t\t\t\t\t\tnumRecordsDeleted += await this.cleanupActivityLogPartition();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} while (Is.stringValue(cursor));\n\t\t\t} catch (error) {\n\t\t\t\tawait this._logging?.log({\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tmessage: \"cleanupFailed\",\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\terror: BaseError.fromError(error)\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 (error) {\n\t\t\tawait this._logging?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: \"cleanupFailed\",\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\terror: BaseError.fromError(error)\n\t\t\t});\n\t\t}\n\t\treturn numRecordsDeleted;\n\t}\n\n\t/**\n\t * Calculates the (Activity, Object, Target) query set.\n\t * @param activity The object representing the Activity.\n\t * @returns the (Activity, Object, Target) query set.\n\t * @internal\n\t */\n\tprivate async calculateActivityQuerySet(activity: IDataspaceActivity): Promise<IActivityQuery[]> {\n\t\tconst activityTypes = await JsonLdHelper.getType(activity);\n\t\tlet objectTypes: string[] = [];\n\n\t\tconst objects = ArrayHelper.fromObjectOrArray<IJsonLdNodeObject>(activity.object);\n\t\tfor (const object of objects) {\n\t\t\tobjectTypes = objectTypes.concat(await JsonLdHelper.getType(object));\n\t\t}\n\n\t\tlet targetTypes: string[] = [\"\"];\n\t\tif (Is.object<IJsonLdNodeObject>(activity.target)) {\n\t\t\ttargetTypes = await JsonLdHelper.getType(activity.target);\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): {\n\t\t[id: string]: {\n\t\t\tapp: IDataspaceApp;\n\t\t\tprocessingGroupId?: string;\n\t\t};\n\t} {\n\t\tconst matchingElements: {\n\t\t\t[id: string]: {\n\t\t\t\tapp: IDataspaceApp;\n\t\t\t\tprocessingGroupId?: string;\n\t\t\t};\n\t\t} = {};\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[appId] = {\n\t\t\t\t\t\tapp,\n\t\t\t\t\t\tprocessingGroupId: appQuery.processingGroupId\n\t\t\t\t\t};\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 by its ID. Resolves via the tenant-supplied dataspace app\n\t * datasets stored by the Control Plane.\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\n\t\tconst fromAppDataset = await this._dataspaceAppDatasetStorage.get(datasetId);\n\t\tif (!Is.empty(fromAppDataset)) {\n\t\t\treturn {\n\t\t\t\t...fromAppDataset.dataset,\n\t\t\t\t\"@id\": datasetId\n\t\t\t} as unknown as IDataspaceProtocolDataset;\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<IDataspaceApp> {\n\t\tconst matchingElements: IDataspaceApp[] = [];\n\t\tconst matchingIds: string[] = [];\n\n\t\t// Storage primary key is the dataset's @id, so a single get() resolves it.\n\t\tconst fromAppDataset = await this._dataspaceAppDatasetStorage.get(dataAssetQuery.datasetId);\n\t\tif (!Is.empty(fromAppDataset)) {\n\t\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(fromAppDataset.appId);\n\t\t\tmatchingElements.push(app);\n\t\t\tmatchingIds.push(fromAppDataset.appId);\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\tmatchingIds,\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 =\n\t\t\texistingEntry.tasks\n\t\t\t\t?.filter(t => t.status === ActivityTaskStatus.Failed)\n\t\t\t\t.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 =\n\t\t\texistingEntry.tasks\n\t\t\t\t?.filter(t => t.status === ActivityTaskStatus.Success)\n\t\t\t\t.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\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 IDataspaceProtocolAgreement 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: IDataspaceProtocolAgreement = {\n\t\t\t\"@context\": OdrlContexts.Context,\n\t\t\t\"@type\": \"Agreement\",\n\t\t\t\"@id\": 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\n\t\t\t\t| IDataspaceProtocolAgreement\n\t\t\t\t| 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?: IDataspaceProtocolAgreement\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[\"@id\"]);\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: IDataspaceProtocolAgreement[\"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\t/**\n\t * Processes a task for an activity, by creating a background task and registering the handler.\n\t * @param activityLogEntryId The ID of the activity log entry.\n\t * @param activity The activity to be processed.\n\t * @param handlerApps The handler applications for the activity.\n\t * @param dataspaceAppId The ID of the handler application.\n\t * @param taskEntries The list of activity log entries.\n\t * @param isRetry Indicates if this is a retry of a previous task.\n\t * @returns True if the task was processed inline.\n\t * @internal\n\t */\n\tprivate async processTask(\n\t\tactivityLogEntryId: string,\n\t\tactivity: IActivityStreamsActivity,\n\t\thandlerApps: { [id: string]: { app: IDataspaceApp; processingGroupId?: string } },\n\t\tdataspaceAppId: string,\n\t\ttaskEntries: IActivityTaskEntry[],\n\t\tisRetry: boolean\n\t): Promise<boolean> {\n\t\tconst handlerApp = handlerApps[dataspaceAppId].app;\n\t\tconst processingGroupId = handlerApps[dataspaceAppId].processingGroupId;\n\n\t\tconst payload: IExecutionPayload = {\n\t\t\tactivityLogEntryId,\n\t\t\tactivity: activity as IDataspaceActivity,\n\t\t\tdataspaceAppId\n\t\t};\n\n\t\t// If there is no processing group we execute the task inline without creating a background task\n\t\tconst isInlineTask = !Is.stringValue(processingGroupId);\n\t\tif (isInlineTask) {\n\t\t\tconst handleActivity = handlerApp?.handleActivity?.bind(handlerApp);\n\t\t\tif (!Is.function(handleActivity)) {\n\t\t\t\tthrow new GeneralError(DataspaceDataPlaneService.CLASS_NAME, \"missingHandleActivity\", {\n\t\t\t\t\tdataspaceAppId\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet taskError;\n\t\t\tlet taskResult;\n\t\t\ttry {\n\t\t\t\ttaskResult = await handleActivity(activity as IDataspaceActivity);\n\t\t\t} catch (error) {\n\t\t\t\ttaskError = BaseError.fromError(error);\n\t\t\t}\n\n\t\t\tconst now = Date.now();\n\t\t\tconst taskEntry: IActivityTaskEntry = {\n\t\t\t\ttaskId: RandomHelper.generateUuidV7(\"compact\"),\n\t\t\t\tdataspaceAppId,\n\t\t\t\tprocessingGroupId,\n\t\t\t\tresult: taskResult,\n\t\t\t\tstartDate: new Date(now).toISOString(),\n\t\t\t\tendDate: new Date(now).toISOString(),\n\t\t\t\tstatus: Is.empty(taskError) ? ActivityTaskStatus.Success : ActivityTaskStatus.Failed,\n\t\t\t\terror: taskError\n\t\t\t};\n\t\t\ttaskEntries.push(taskEntry);\n\n\t\t\tawait this.notifyTaskStatusChanged(\n\t\t\t\tpayload.activityLogEntryId,\n\t\t\t\tpayload.activity.id,\n\t\t\t\tpayload.dataspaceAppId,\n\t\t\t\ttaskEntry.taskId,\n\t\t\t\ttaskEntry.status\n\t\t\t);\n\t\t} else {\n\t\t\tconst processingGroups = handlerApp.processingGroups?.() ?? {};\n\t\t\tif (Is.empty(processingGroups[processingGroupId])) {\n\t\t\t\tthrow new GeneralError(DataspaceDataPlaneService.CLASS_NAME, \"invalidProcessingGroupId\", {\n\t\t\t\t\tprocessingGroupId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst processingGroupOptions = processingGroups[processingGroupId];\n\n\t\t\tconst taskType = `${dataspaceAppId}${processingGroupId ? `-${processingGroupId}` : \"\"}`;\n\n\t\t\tconst taskId = await this._backgroundTaskComponent.create<IExecutionPayload>(\n\t\t\t\ttaskType,\n\t\t\t\tpayload,\n\t\t\t\t{\n\t\t\t\t\tretainFor: this._retainTasksFor,\n\t\t\t\t\tretryCount: processingGroupOptions?.retryCount ?? this._retryCount\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!this._registeredTaskTypes.includes(taskType)) {\n\t\t\t\tthis._registeredTaskTypes.push(taskType);\n\n\t\t\t\tawait this._backgroundTaskComponent.registerHandler<IExecutionPayload, unknown>(\n\t\t\t\t\ttaskType,\n\t\t\t\t\t\"@twin.org/dataspace-app-runner\",\n\t\t\t\t\t\"appRunner\",\n\t\t\t\t\tasync task => {\n\t\t\t\t\t\tawait this.finaliseBackgroundTask(task.id, task.status, task.payload);\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tmaxWorkerCount: processingGroupOptions?.concurrentTasks,\n\t\t\t\t\t\tidleShutdownTimeout: processingGroupOptions?.idleShutdownTimeout,\n\t\t\t\t\t\tinitialiseMethod: \"appRunnerStart\",\n\t\t\t\t\t\tshutdownMethod: \"appRunnerEnd\"\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\ttaskEntries.push({\n\t\t\t\ttaskId,\n\t\t\t\tdataspaceAppId,\n\t\t\t\tprocessingGroupId,\n\t\t\t\tstatus: ActivityTaskStatus.Pending\n\t\t\t});\n\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: \"scheduledTask\",\n\t\t\t\tdata: {\n\t\t\t\t\ttaskId,\n\t\t\t\t\tdataspaceAppId,\n\t\t\t\t\tisRetry\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn isInlineTask;\n\t}\n\n\t/**\n\t * Constructs the activity log entry with processing status and associated tasks.\n\t * @param activityLog The activity log details retrieved from storage.\n\t * @param activityTasks The activity tasks associated with the log entry, if any.\n\t * @returns The complete activity log entry with status and tasks.\n\t * @internal\n\t */\n\tprivate async constructLogEntry(\n\t\tactivityLog: ActivityLogDetails,\n\t\tactivityTasks: ActivityTask | undefined\n\t): Promise<IActivityLogEntry> {\n\t\tlet tasks: IActivityTaskEntry[] | undefined;\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\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\ttasks = [];\n\n\t\t\tconst typeCount: {\n\t\t\t\t[status in TaskStatus]: number;\n\t\t\t} = {\n\t\t\t\t[TaskStatus.Pending]: 0,\n\t\t\t\t[TaskStatus.Processing]: 0,\n\t\t\t\t[TaskStatus.Success]: 0,\n\t\t\t\t[TaskStatus.Failed]: 0,\n\t\t\t\t[TaskStatus.Cancelled]: 0\n\t\t\t};\n\n\t\t\tfor (const entity of activityTasks.associatedTasks) {\n\t\t\t\tlet entry: IActivityTaskEntry | undefined;\n\t\t\t\tif (!Is.stringValue(entity.processingGroupId)) {\n\t\t\t\t\t// If there is no process group, the task was processed inline so the task status is already available in the entity\n\t\t\t\t\ttypeCount[entity.status]++;\n\t\t\t\t\tentry = entity;\n\t\t\t\t} else {\n\t\t\t\t\tconst taskDetails = await this._backgroundTaskComponent.get<IExecutionPayload, unknown>(\n\t\t\t\t\t\tentity.taskId\n\t\t\t\t\t);\n\t\t\t\t\tif (!Is.empty(taskDetails)) {\n\t\t\t\t\t\ttypeCount[taskDetails.status]++;\n\n\t\t\t\t\t\tswitch (taskDetails.status) {\n\t\t\t\t\t\t\tcase TaskStatus.Success:\n\t\t\t\t\t\t\t\tentry = {\n\t\t\t\t\t\t\t\t\t...entity,\n\t\t\t\t\t\t\t\t\tstatus: ActivityTaskStatus.Success,\n\t\t\t\t\t\t\t\t\tresult: taskDetails.result,\n\t\t\t\t\t\t\t\t\tstartDate: taskDetails?.dateCreated,\n\t\t\t\t\t\t\t\t\tendDate: taskDetails?.dateCompleted\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TaskStatus.Pending:\n\t\t\t\t\t\t\t\tentry = { ...entity, status: ActivityTaskStatus.Pending };\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TaskStatus.Processing:\n\t\t\t\t\t\t\t\tentry = {\n\t\t\t\t\t\t\t\t\t...entity,\n\t\t\t\t\t\t\t\t\tstatus: ActivityTaskStatus.Processing,\n\t\t\t\t\t\t\t\t\tstartDate: taskDetails.dateCreated\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TaskStatus.Failed:\n\t\t\t\t\t\t\t\tentry = {\n\t\t\t\t\t\t\t\t\t...entity,\n\t\t\t\t\t\t\t\t\tstatus: ActivityTaskStatus.Failed,\n\t\t\t\t\t\t\t\t\terror: taskDetails.error\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TaskStatus.Cancelled:\n\t\t\t\t\t\t\t\t// Nothing to do for cancelled tasks\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!Is.empty(entry)) {\n\t\t\t\t\ttasks.push(entry);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeCount[TaskStatus.Failed] > 0) {\n\t\t\t\tstatus = ActivityProcessingStatus.Error;\n\t\t\t} else if (typeCount[TaskStatus.Processing] > 0) {\n\t\t\t\tstatus = ActivityProcessingStatus.Running;\n\t\t\t} else if (typeCount[TaskStatus.Pending] > 0) {\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 { ...activityLog, status, tasks };\n\t}\n}\n"]}
|
|
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 type { ITenant, ITenantAdminComponent } from \"@twin.org/api-models\";\nimport {\n\tTaskStatus,\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\tBaseError,\n\tComponentFactory,\n\tConflictError,\n\tConverter,\n\tGeneralError,\n\tGuardError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tRandomHelper,\n\tUnprocessableError,\n\tValidation,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { Blake2b } from \"@twin.org/crypto\";\nimport { DataTypeHelper, JsonSchemaHelper } from \"@twin.org/data-core\";\nimport {\n\tJsonLdDataTypes,\n\tJsonLdHelper,\n\tJsonLdProcessor,\n\ttype IJsonLdContextDefinitionElement,\n\ttype IJsonLdNodeObject\n} from \"@twin.org/data-json-ld\";\nimport {\n\tActivityProcessingStatus,\n\tActivityTaskStatus,\n\tDataRequestType,\n\tDataspaceAppFactory,\n\tDataspaceContexts,\n\tDataspaceDataTypes,\n\tDataspaceTypes,\n\ttype IActivityLogEntry,\n\ttype IActivityLogStatusNotification,\n\ttype IActivityQuery,\n\ttype IActivityTaskEntry,\n\ttype IDataAssetItemListResult,\n\ttype IDataAssetQuery,\n\ttype IDataRequest,\n\ttype IDataspaceActivity,\n\ttype IDataspaceApp,\n\ttype IDataspaceDataPlaneComponent,\n\ttype IEntitySet,\n\ttype IExecutionPayload,\n\ttype IFilteringQuery,\n\ttype ITransferContext,\n\ttype DataspaceAppDataset,\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 IDataspaceProtocolAgreement,\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 type { IActivityStreamsActivity } from \"@twin.org/standards-w3c-activity-streams\";\nimport { OdrlContexts } from \"@twin.org/standards-w3c-odrl\";\nimport { TrustHelper, type ITrustComponent } 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 * 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 * Track task handler registrations to avoid resetting worker pools on every task.\n\t * @internal\n\t */\n\tprivate readonly _registeredTaskTypes: string[];\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 * Retry count for failed tasks.\n\t * @internal\n\t */\n\tprivate readonly _retryCount?: 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 * The tenant admin component.\n\t * @internal\n\t */\n\tprivate readonly _tenantAdmin?: ITenantAdminComponent;\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 * Entity storage for tenant-supplied Dataspace App Dataset entities.\n\t * @internal\n\t */\n\tprivate readonly _dataspaceAppDatasetStorage: IEntityStorageConnector<DataspaceAppDataset>;\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\tthis._tenantAdmin = ComponentFactory.getIfExists<ITenantAdminComponent>(\n\t\t\toptions?.tenantAdminType ?? \"tenant-admin\"\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\tthis._dataspaceAppDatasetStorage = EntityStorageConnectorFactory.get<\n\t\t\tIEntityStorageConnector<DataspaceAppDataset>\n\t\t>(options?.dataspaceAppDatasetEntityStorageType ?? nameofKebabCase<DataspaceAppDataset>());\n\n\t\tJsonLdDataTypes.registerTypes();\n\t\tDataspaceDataTypes.registerTypes();\n\t\tSchemaOrgDataTypes.registerRedirects();\n\t\tDataspaceProtocolDataTypes.registerRedirects();\n\t\tDataspaceProtocolDataTypes.registerTypes();\n\n\t\tthis._activityLogStatusCallbacks = {};\n\t\tthis._registeredTaskTypes = [];\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._retryCount = options?.config?.retryCount;\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 id or entry.\n\t */\n\tpublic async notifyActivity(\n\t\tactivity: IActivityStreamsActivity\n\t): Promise<string | IActivityLogEntry> {\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._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// We only validate that the activity conforms to Activity Streams Schema without entering into details\n\t\t// about the object, target or actor as they might be subject of custom validation rules\n\t\tconst typeId = `${DataspaceContexts.JsonSchemaNamespace}Dataspace${DataspaceTypes.Activity}`;\n\t\tconst activitySchema = await DataTypeHelper.getSchemaForType(typeId);\n\t\tif (Is.undefined(activitySchema)) {\n\t\t\tthrow new GeneralError(DataspaceDataPlaneService.CLASS_NAME, \"schemaNotFound\", {\n\t\t\t\tschemaId: typeId\n\t\t\t});\n\t\t}\n\t\tconst validationFailures = await JsonSchemaHelper.validate(activitySchema, activity);\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// Calculate Activity Log Entry Id\n\t\tconst canonical = JsonHelper.canonicalize(activity);\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\tlet logEntry = await this._entityStorageActivityLogs.get(activityLogEntryId);\n\t\tlet existingSuccessfulApps: string[] = [];\n\t\tlet isRetry = false;\n\t\tconst now = Date.now();\n\n\t\tif (!Is.undefined(logEntry)) {\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\tlogEntry = {\n\t\t\t\tid: activityLogEntryId,\n\t\t\t\tactivityId: activity.id,\n\t\t\t\tgenerator: this.calculateActivityGeneratorIdentity(activity),\n\t\t\t\tdateCreated: new Date(now).toISOString(),\n\t\t\t\tdateModified: new Date(now).toISOString()\n\t\t\t};\n\t\t\tawait this._entityStorageActivityLogs.set(logEntry);\n\t\t}\n\n\t\tconst activityQuerySet = await this.calculateActivityQuerySet(activity as IDataspaceActivity);\n\n\t\tconst taskEntries: IActivityTaskEntry[] = [];\n\t\tconst handlerApps: {\n\t\t\t[id: string]: {\n\t\t\t\tapp: IDataspaceApp;\n\t\t\t\tprocessingGroupId?: string;\n\t\t\t};\n\t\t} = {};\n\n\t\tfor (const query of activityQuerySet) {\n\t\t\tconst apps = this.getAppForActivityQuery(query);\n\t\t\tfor (const appId in apps) {\n\t\t\t\t// Only process apps that haven't already completed successfully\n\t\t\t\tif (!handlerApps[appId] && !existingSuccessfulApps.includes(appId)) {\n\t\t\t\t\thandlerApps[appId] = apps[appId];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet inlineCount = 0;\n\t\tfor (const handlerAppId in handlerApps) {\n\t\t\tif (\n\t\t\t\tawait this.processTask(\n\t\t\t\t\tactivityLogEntryId,\n\t\t\t\t\tactivity,\n\t\t\t\t\thandlerApps,\n\t\t\t\t\thandlerAppId,\n\t\t\t\t\ttaskEntries,\n\t\t\t\t\tisRetry\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tinlineCount++;\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\tconst activityTask: ActivityTask = {\n\t\t\tactivityLogEntryId,\n\t\t\tassociatedTasks: [...existingTasksToKeep, ...taskEntries]\n\t\t};\n\n\t\tawait this._entityStorageActivityTasks.set(activityTask);\n\n\t\tif (inlineCount === taskEntries.length) {\n\t\t\treturn this.finaliseActivityLogEntry(activityLogEntryId);\n\t\t}\n\n\t\treturn activityTask.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 activityLog = await this._entityStorageActivityLogs.get(logEntryId);\n\t\tif (Is.undefined(activityLog)) {\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\tconst activityTasks = await this._entityStorageActivityTasks.get(logEntryId);\n\n\t\treturn this.constructLogEntry(activityLog, activityTasks);\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 app = await this.getAppForDataAssetQuery({ datasetId });\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 app = await this.getAppForDataAssetQuery({ datasetId });\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 taskId The Id of the Activity Log Entry.\n\t * @param status The final status of the task.\n\t * @param payload The execution payload of the task, required to correlate to the Activity Log Entry and update the processing status.\n\t * @internal\n\t */\n\tprivate async finaliseBackgroundTask(\n\t\ttaskId: string,\n\t\tstatus: TaskStatus,\n\t\tpayload?: IExecutionPayload\n\t): Promise<void> {\n\t\tif (Is.empty(payload)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (status === TaskStatus.Success || status === TaskStatus.Failed) {\n\t\t\tawait this.notifyTaskStatusChanged(\n\t\t\t\tpayload.activityLogEntryId,\n\t\t\t\tpayload.activity.id,\n\t\t\t\tpayload.dataspaceAppId,\n\t\t\t\ttaskId,\n\t\t\t\tstatus\n\t\t\t);\n\n\t\t\tawait this.finaliseActivityLogEntry(payload.activityLogEntryId);\n\t\t}\n\t}\n\n\t/**\n\t * Notify registered callbacks about a task status change.\n\t * @param activityLogEntryId The Id of the Activity Log Entry.\n\t * @param activityId The Id of the Activity.\n\t * @param dataspaceAppId The Id of the Dataspace App associated with the task.\n\t * @param taskId The Id of the task.\n\t * @param taskStatus The new status of the task.\n\t * @internal\n\t */\n\tprivate async notifyTaskStatusChanged(\n\t\tactivityLogEntryId: string,\n\t\tactivityId: string | undefined,\n\t\tdataspaceAppId: string,\n\t\ttaskId: string,\n\t\ttaskStatus: TaskStatus\n\t): Promise<void> {\n\t\tfor (const callback of Object.values(this._activityLogStatusCallbacks)) {\n\t\t\tawait callback({\n\t\t\t\tactivityLogEntryId,\n\t\t\t\tactivityId,\n\t\t\t\ttaskProcessingStatus: {\n\t\t\t\t\tdataspaceAppId,\n\t\t\t\t\ttaskId,\n\t\t\t\t\ttaskStatus\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Finalizes the Activity Log Entry by checking if all associated tasks have completed and, if so, updating the entry to be retained for the configured retention period.\n\t * @param activityLogEntryId The Id of the Activity Log Entry to finalize.\n\t * @returns The Activity Log Entry with updated retention details if applicable.\n\t * @internal\n\t */\n\tprivate async finaliseActivityLogEntry(activityLogEntryId: string): Promise<IActivityLogEntry> {\n\t\tconst entry = await this.getActivityLogEntry(activityLogEntryId);\n\t\tif (\n\t\t\tthis._retainActivityLogsFor !== -1 &&\n\t\t\t(entry.status === ActivityProcessingStatus.Completed ||\n\t\t\t\tentry.status === ActivityProcessingStatus.Error)\n\t\t) {\n\t\t\tconst retainUntil = Date.now() + this._retainActivityLogsFor;\n\t\t\tconst updatedEntry: ActivityLogDetails = {\n\t\t\t\tid: entry.id,\n\t\t\t\tactivityId: entry.activityId,\n\t\t\t\tgenerator: entry.generator,\n\t\t\t\tdateCreated: entry.dateCreated,\n\t\t\t\tdateModified: entry.dateModified,\n\t\t\t\tretainUntil\n\t\t\t};\n\t\t\tawait this._entityStorageActivityLogs.set(updatedEntry);\n\t\t}\n\n\t\treturn entry;\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 by tenant as the data is partitioned\n\t\t\ttry {\n\t\t\t\tlet cursor;\n\t\t\t\tdo {\n\t\t\t\t\tconst result: { tenants: ITenant[]; cursor?: string } | undefined =\n\t\t\t\t\t\tawait this._tenantAdmin?.query(undefined, cursor);\n\t\t\t\t\tcursor = result?.cursor;\n\t\t\t\t\tif (!Is.empty(result)) {\n\t\t\t\t\t\tfor (const tenantId of result.tenants.map(t => t.id)) {\n\t\t\t\t\t\t\tconst localContextIds = (await ContextIdStore.getContextIds()) ?? {};\n\t\t\t\t\t\t\tlocalContextIds[ContextIdKeys.Tenant] = tenantId;\n\n\t\t\t\t\t\t\tawait ContextIdStore.run(localContextIds, async () => {\n\t\t\t\t\t\t\t\tnumRecordsDeleted += await this.cleanupActivityLogPartition();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} while (Is.stringValue(cursor));\n\t\t\t} catch (error) {\n\t\t\t\tawait this._logging?.log({\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tmessage: \"cleanupFailed\",\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\t\terror: BaseError.fromError(error)\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 (error) {\n\t\t\tawait this._logging?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: \"cleanupFailed\",\n\t\t\t\tsource: DataspaceDataPlaneService.CLASS_NAME,\n\t\t\t\terror: BaseError.fromError(error)\n\t\t\t});\n\t\t}\n\t\treturn numRecordsDeleted;\n\t}\n\n\t/**\n\t * Calculates the (Activity, Object, Target) query set.\n\t * @param activity The object representing the Activity.\n\t * @returns the (Activity, Object, Target) query set.\n\t * @internal\n\t */\n\tprivate async calculateActivityQuerySet(activity: IDataspaceActivity): Promise<IActivityQuery[]> {\n\t\tconst activityTypes = await JsonLdHelper.getType(activity);\n\t\tlet objectTypes: string[] = [];\n\n\t\tconst objects = ArrayHelper.fromObjectOrArray<IJsonLdNodeObject>(activity.object);\n\t\tfor (const object of objects) {\n\t\t\tobjectTypes = objectTypes.concat(await JsonLdHelper.getType(object));\n\t\t}\n\n\t\tlet targetTypes: string[] = [\"\"];\n\t\tif (Is.object<IJsonLdNodeObject>(activity.target)) {\n\t\t\ttargetTypes = await JsonLdHelper.getType(activity.target);\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): {\n\t\t[id: string]: {\n\t\t\tapp: IDataspaceApp;\n\t\t\tprocessingGroupId?: string;\n\t\t};\n\t} {\n\t\tconst matchingElements: {\n\t\t\t[id: string]: {\n\t\t\t\tapp: IDataspaceApp;\n\t\t\t\tprocessingGroupId?: string;\n\t\t\t};\n\t\t} = {};\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[appId] = {\n\t\t\t\t\t\tapp,\n\t\t\t\t\t\tprocessingGroupId: appQuery.processingGroupId\n\t\t\t\t\t};\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 by its ID. Resolves via the tenant-supplied dataspace app\n\t * datasets stored by the Control Plane.\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\n\t\tconst fromAppDataset = await this._dataspaceAppDatasetStorage.get(datasetId);\n\t\tif (!Is.empty(fromAppDataset)) {\n\t\t\treturn {\n\t\t\t\t...fromAppDataset.dataset,\n\t\t\t\t\"@id\": datasetId\n\t\t\t} as unknown as IDataspaceProtocolDataset;\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<IDataspaceApp> {\n\t\tconst matchingElements: IDataspaceApp[] = [];\n\t\tconst matchingIds: string[] = [];\n\n\t\t// Storage primary key is the dataset's @id, so a single get() resolves it.\n\t\tconst fromAppDataset = await this._dataspaceAppDatasetStorage.get(dataAssetQuery.datasetId);\n\t\tif (!Is.empty(fromAppDataset)) {\n\t\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(fromAppDataset.appId);\n\t\t\tmatchingElements.push(app);\n\t\t\tmatchingIds.push(fromAppDataset.appId);\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\tmatchingIds,\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 =\n\t\t\texistingEntry.tasks\n\t\t\t\t?.filter(t => t.status === ActivityTaskStatus.Failed)\n\t\t\t\t.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 =\n\t\t\texistingEntry.tasks\n\t\t\t\t?.filter(t => t.status === ActivityTaskStatus.Success)\n\t\t\t\t.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\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 IDataspaceProtocolAgreement 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: IDataspaceProtocolAgreement = {\n\t\t\t\"@context\": OdrlContexts.Context,\n\t\t\t\"@type\": \"Agreement\",\n\t\t\t\"@id\": 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\n\t\t\t\t| IDataspaceProtocolAgreement\n\t\t\t\t| 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?: IDataspaceProtocolAgreement\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[\"@id\"]);\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: IDataspaceProtocolAgreement[\"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\t/**\n\t * Processes a task for an activity, by creating a background task and registering the handler.\n\t * @param activityLogEntryId The ID of the activity log entry.\n\t * @param activity The activity to be processed.\n\t * @param handlerApps The handler applications for the activity.\n\t * @param dataspaceAppId The ID of the handler application.\n\t * @param taskEntries The list of activity log entries.\n\t * @param isRetry Indicates if this is a retry of a previous task.\n\t * @returns True if the task was processed inline.\n\t * @internal\n\t */\n\tprivate async processTask(\n\t\tactivityLogEntryId: string,\n\t\tactivity: IActivityStreamsActivity,\n\t\thandlerApps: { [id: string]: { app: IDataspaceApp; processingGroupId?: string } },\n\t\tdataspaceAppId: string,\n\t\ttaskEntries: IActivityTaskEntry[],\n\t\tisRetry: boolean\n\t): Promise<boolean> {\n\t\tconst handlerApp = handlerApps[dataspaceAppId].app;\n\t\tconst processingGroupId = handlerApps[dataspaceAppId].processingGroupId;\n\n\t\tconst payload: IExecutionPayload = {\n\t\t\tactivityLogEntryId,\n\t\t\tactivity: activity as IDataspaceActivity,\n\t\t\tdataspaceAppId\n\t\t};\n\n\t\t// If there is no processing group we execute the task inline without creating a background task\n\t\tconst isInlineTask = !Is.stringValue(processingGroupId);\n\t\tif (isInlineTask) {\n\t\t\tconst handleActivity = handlerApp?.handleActivity?.bind(handlerApp);\n\t\t\tif (!Is.function(handleActivity)) {\n\t\t\t\tthrow new GeneralError(DataspaceDataPlaneService.CLASS_NAME, \"missingHandleActivity\", {\n\t\t\t\t\tdataspaceAppId\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet taskError;\n\t\t\tlet taskResult;\n\t\t\ttry {\n\t\t\t\ttaskResult = await handleActivity(activity as IDataspaceActivity);\n\t\t\t} catch (error) {\n\t\t\t\ttaskError = BaseError.fromError(error);\n\t\t\t}\n\n\t\t\tconst now = Date.now();\n\t\t\tconst taskEntry: IActivityTaskEntry = {\n\t\t\t\ttaskId: RandomHelper.generateUuidV7(\"compact\"),\n\t\t\t\tdataspaceAppId,\n\t\t\t\tprocessingGroupId,\n\t\t\t\tresult: taskResult,\n\t\t\t\tstartDate: new Date(now).toISOString(),\n\t\t\t\tendDate: new Date(now).toISOString(),\n\t\t\t\tstatus: Is.empty(taskError) ? ActivityTaskStatus.Success : ActivityTaskStatus.Failed,\n\t\t\t\terror: taskError?.toJsonObject()\n\t\t\t};\n\t\t\ttaskEntries.push(taskEntry);\n\n\t\t\tawait this.notifyTaskStatusChanged(\n\t\t\t\tpayload.activityLogEntryId,\n\t\t\t\tpayload.activity.id,\n\t\t\t\tpayload.dataspaceAppId,\n\t\t\t\ttaskEntry.taskId,\n\t\t\t\ttaskEntry.status\n\t\t\t);\n\t\t} else {\n\t\t\tconst processingGroups = handlerApp.processingGroups?.() ?? {};\n\t\t\tif (Is.empty(processingGroups[processingGroupId])) {\n\t\t\t\tthrow new GeneralError(DataspaceDataPlaneService.CLASS_NAME, \"invalidProcessingGroupId\", {\n\t\t\t\t\tprocessingGroupId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst processingGroupOptions = processingGroups[processingGroupId];\n\n\t\t\tconst taskType = `${dataspaceAppId}${processingGroupId ? `-${processingGroupId}` : \"\"}`;\n\n\t\t\tconst taskId = await this._backgroundTaskComponent.create<IExecutionPayload>(\n\t\t\t\ttaskType,\n\t\t\t\tpayload,\n\t\t\t\t{\n\t\t\t\t\tretainFor: this._retainTasksFor,\n\t\t\t\t\tretryCount: processingGroupOptions?.retryCount ?? this._retryCount\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!this._registeredTaskTypes.includes(taskType)) {\n\t\t\t\tthis._registeredTaskTypes.push(taskType);\n\n\t\t\t\tawait this._backgroundTaskComponent.registerHandler<IExecutionPayload, unknown>(\n\t\t\t\t\ttaskType,\n\t\t\t\t\t\"@twin.org/dataspace-app-runner\",\n\t\t\t\t\t\"appRunner\",\n\t\t\t\t\tasync task => {\n\t\t\t\t\t\tawait this.finaliseBackgroundTask(task.id, task.status, task.payload);\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tmaxWorkerCount: processingGroupOptions?.concurrentTasks,\n\t\t\t\t\t\tidleShutdownTimeout: processingGroupOptions?.idleShutdownTimeout,\n\t\t\t\t\t\tinitialiseMethod: \"appRunnerStart\",\n\t\t\t\t\t\tshutdownMethod: \"appRunnerEnd\"\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\ttaskEntries.push({\n\t\t\t\ttaskId,\n\t\t\t\tdataspaceAppId,\n\t\t\t\tprocessingGroupId,\n\t\t\t\tstatus: ActivityTaskStatus.Pending\n\t\t\t});\n\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: \"scheduledTask\",\n\t\t\t\tdata: {\n\t\t\t\t\ttaskId,\n\t\t\t\t\tdataspaceAppId,\n\t\t\t\t\tisRetry\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn isInlineTask;\n\t}\n\n\t/**\n\t * Constructs the activity log entry with processing status and associated tasks.\n\t * @param activityLog The activity log details retrieved from storage.\n\t * @param activityTasks The activity tasks associated with the log entry, if any.\n\t * @returns The complete activity log entry with status and tasks.\n\t * @internal\n\t */\n\tprivate async constructLogEntry(\n\t\tactivityLog: ActivityLogDetails,\n\t\tactivityTasks: ActivityTask | undefined\n\t): Promise<IActivityLogEntry> {\n\t\tlet tasks: IActivityTaskEntry[] | undefined;\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\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\ttasks = [];\n\n\t\t\tconst typeCount: {\n\t\t\t\t[status in TaskStatus]: number;\n\t\t\t} = {\n\t\t\t\t[TaskStatus.Pending]: 0,\n\t\t\t\t[TaskStatus.Processing]: 0,\n\t\t\t\t[TaskStatus.Success]: 0,\n\t\t\t\t[TaskStatus.Failed]: 0,\n\t\t\t\t[TaskStatus.Cancelled]: 0\n\t\t\t};\n\n\t\t\tfor (const entity of activityTasks.associatedTasks) {\n\t\t\t\tlet entry: IActivityTaskEntry | undefined;\n\t\t\t\tif (!Is.stringValue(entity.processingGroupId)) {\n\t\t\t\t\t// If there is no process group, the task was processed inline so the task status is already available in the entity\n\t\t\t\t\ttypeCount[entity.status]++;\n\t\t\t\t\tentry = entity;\n\t\t\t\t} else {\n\t\t\t\t\tconst taskDetails = await this._backgroundTaskComponent.get<IExecutionPayload, unknown>(\n\t\t\t\t\t\tentity.taskId\n\t\t\t\t\t);\n\t\t\t\t\tif (!Is.empty(taskDetails)) {\n\t\t\t\t\t\ttypeCount[taskDetails.status]++;\n\n\t\t\t\t\t\tswitch (taskDetails.status) {\n\t\t\t\t\t\t\tcase TaskStatus.Success:\n\t\t\t\t\t\t\t\tentry = {\n\t\t\t\t\t\t\t\t\t...entity,\n\t\t\t\t\t\t\t\t\tstatus: ActivityTaskStatus.Success,\n\t\t\t\t\t\t\t\t\tresult: taskDetails.result,\n\t\t\t\t\t\t\t\t\tstartDate: taskDetails?.dateCreated,\n\t\t\t\t\t\t\t\t\tendDate: taskDetails?.dateCompleted\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TaskStatus.Pending:\n\t\t\t\t\t\t\t\tentry = { ...entity, status: ActivityTaskStatus.Pending };\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TaskStatus.Processing:\n\t\t\t\t\t\t\t\tentry = {\n\t\t\t\t\t\t\t\t\t...entity,\n\t\t\t\t\t\t\t\t\tstatus: ActivityTaskStatus.Processing,\n\t\t\t\t\t\t\t\t\tstartDate: taskDetails.dateCreated\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TaskStatus.Failed:\n\t\t\t\t\t\t\t\tentry = {\n\t\t\t\t\t\t\t\t\t...entity,\n\t\t\t\t\t\t\t\t\tstatus: ActivityTaskStatus.Failed,\n\t\t\t\t\t\t\t\t\terror: taskDetails.error\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TaskStatus.Cancelled:\n\t\t\t\t\t\t\t\t// Nothing to do for cancelled tasks\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!Is.empty(entry)) {\n\t\t\t\t\ttasks.push(entry);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeCount[TaskStatus.Failed] > 0) {\n\t\t\t\tstatus = ActivityProcessingStatus.Error;\n\t\t\t} else if (typeCount[TaskStatus.Processing] > 0) {\n\t\t\t\tstatus = ActivityProcessingStatus.Running;\n\t\t\t} else if (typeCount[TaskStatus.Pending] > 0) {\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 { ...activityLog, status, tasks };\n\t}\n}\n"]}
|
package/docs/changelog.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.3-next.29](https://github.com/iotaledger/twin-dataspace/compare/dataspace-data-plane-service-v0.0.3-next.28...dataspace-data-plane-service-v0.0.3-next.29) (2026-05-20)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* update dependencies ([55cb41c](https://github.com/iotaledger/twin-dataspace/commit/55cb41c1d0ce7ebddcce41c60fe944650bcf0499))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @twin.org/dataspace-app-runner bumped from 0.0.3-next.28 to 0.0.3-next.29
|
|
16
|
+
* @twin.org/dataspace-models bumped from 0.0.3-next.28 to 0.0.3-next.29
|
|
17
|
+
* devDependencies
|
|
18
|
+
* @twin.org/dataspace-test-app bumped from 0.0.3-next.28 to 0.0.3-next.29
|
|
19
|
+
|
|
3
20
|
## [0.0.3-next.28](https://github.com/iotaledger/twin-dataspace/compare/dataspace-data-plane-service-v0.0.3-next.27...dataspace-data-plane-service-v0.0.3-next.28) (2026-05-12)
|
|
4
21
|
|
|
5
22
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twin.org/dataspace-data-plane-service",
|
|
3
|
-
"version": "0.0.3-next.
|
|
3
|
+
"version": "0.0.3-next.29",
|
|
4
4
|
"description": "Processes activities and data requests while enforcing transfer and policy constraints in the data plane.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"@twin.org/crypto": "next",
|
|
22
22
|
"@twin.org/data-core": "next",
|
|
23
23
|
"@twin.org/data-json-ld": "next",
|
|
24
|
-
"@twin.org/dataspace-app-runner": "0.0.3-next.
|
|
25
|
-
"@twin.org/dataspace-models": "0.0.3-next.
|
|
24
|
+
"@twin.org/dataspace-app-runner": "0.0.3-next.29",
|
|
25
|
+
"@twin.org/dataspace-models": "0.0.3-next.29",
|
|
26
26
|
"@twin.org/engine-models": "next",
|
|
27
27
|
"@twin.org/entity": "next",
|
|
28
28
|
"@twin.org/entity-storage-models": "next",
|