@twin.org/dataspace-test-app 0.0.3-next.25 → 0.0.3-next.26

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.
@@ -103,6 +103,17 @@ export class TestDataspaceDataPlaneApp {
103
103
  className() {
104
104
  return TestDataspaceDataPlaneApp.CLASS_NAME;
105
105
  }
106
+ /**
107
+ * The settings for the processing groups for tasks.
108
+ * @returns The options for each process group.
109
+ */
110
+ processingGroups() {
111
+ return {
112
+ "test-default": {
113
+ concurrentTasks: 2
114
+ }
115
+ };
116
+ }
106
117
  /**
107
118
  * Datasets handled by the App.
108
119
  * @returns Dataspace Protocol compliant datasets
@@ -182,7 +193,12 @@ export class TestDataspaceDataPlaneApp {
182
193
  * @returns The activities handled by the App.
183
194
  */
184
195
  activitiesHandled() {
185
- return [{ objectType: "https://vocabulary.uncefact.org/Consignment" }];
196
+ return [
197
+ {
198
+ objectType: "https://vocabulary.uncefact.org/Consignment",
199
+ processingGroupId: "test-default"
200
+ }
201
+ ];
186
202
  }
187
203
  /**
188
204
  * Handle Activity.
@@ -1 +1 @@
1
- {"version":3,"file":"testDataspaceDataPlaneApp.js","sourceRoot":"","sources":["../../src/testDataspaceDataPlaneApp.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport { ComponentFactory, Guards } from \"@twin.org/core\";\nimport { DataTypeHandlerFactory } from \"@twin.org/data-core\";\nimport type { IJsonLdDocument } from \"@twin.org/data-json-ld\";\nimport {\n\tDataRequestType,\n\ttype IDataspaceActivity,\n\ttype IActivityQuery,\n\ttype IDataRequest,\n\ttype IDataspaceApp\n} from \"@twin.org/dataspace-models\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDataspaceProtocolContexts,\n\ttype IDataspaceProtocolDataset\n} from \"@twin.org/standards-dataspace-protocol\";\nimport { DublinCoreContexts } from \"@twin.org/standards-dublin-core\";\nimport type { IActivityStreamsActivity } from \"@twin.org/standards-w3c-activity-streams\";\nimport type { ITestAppConstructorOptions } from \"./ITestAppConstructorOptions.js\";\n\n// Default consignments — two entries with different port locations for filtering tests.\n// Can be overridden via constructor options (e.g. loaded from a JSON file via @json: env syntax).\nconst DEFAULT_CONSIGNMENTS: IJsonLdDocument[] = [\n\t{\n\t\t\"@context\": \"https://vocabulary.uncefact.org/unece-context-D23B.jsonld\",\n\t\ttype: \"Consignment\",\n\t\tid: \"urn:ucr:24PLP051219453I002610799053311\",\n\t\tidentifier: \"M-Test0001\",\n\t\tglobalId: \"5-GB-IMPORT-Test0001\",\n\t\tdestinationCountry: {\n\t\t\ttype: \"Country\",\n\t\t\tcountryId: \"unece:CountryId#GB\"\n\t\t},\n\t\tloadingLocation: {\n\t\t\ttype: \"LogisticsLocation\",\n\t\t\tid: \"unece:LOCODE#NLRTM\",\n\t\t\tname: \"Rotterdam\"\n\t\t},\n\t\tunloadingLocation: {\n\t\t\ttype: \"LogisticsLocation\",\n\t\t\tid: \"unece:LOCODE#GBFXT\",\n\t\t\tname: \"Felixstowe\"\n\t\t}\n\t},\n\t{\n\t\t\"@context\": \"https://vocabulary.uncefact.org/unece-context-D23B.jsonld\",\n\t\ttype: \"Consignment\",\n\t\tid: \"urn:ucr:24PLP051219453I002710888164422\",\n\t\tidentifier: \"M-Test0002\",\n\t\tglobalId: \"5-GB-IMPORT-Test0002\",\n\t\tdestinationCountry: {\n\t\t\ttype: \"Country\",\n\t\t\tcountryId: \"unece:CountryId#GB\"\n\t\t},\n\t\tloadingLocation: {\n\t\t\ttype: \"LogisticsLocation\",\n\t\t\tid: \"unece:LOCODE#FRLEH\",\n\t\t\tname: \"Le Havre\"\n\t\t},\n\t\tunloadingLocation: {\n\t\t\ttype: \"LogisticsLocation\",\n\t\t\tid: \"unece:LOCODE#GBDVR\",\n\t\t\tname: \"Dover\"\n\t\t}\n\t}\n];\n\nconst DEFAULT_ENTITIES: IJsonLdDocument[] = [\n\tDEFAULT_CONSIGNMENTS[0],\n\t{\n\t\t\"@context\": \"https://vocabulary.uncefact.org/unece-context-D23B.jsonld\",\n\t\ttype: \"Document\",\n\t\tid: \"urn:document:a3456fddaa56\",\n\t\tdocumentTypeCode: \"unece:DocumentCodeList#853\"\n\t}\n];\n\n/**\n * Test App Activity Handler.\n */\nexport class TestDataspaceDataPlaneApp implements IDataspaceApp {\n\t/**\n\t * App Name.\n\t */\n\tpublic static readonly APP_ID = \"https://twin.example.org/app1\";\n\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<TestDataspaceDataPlaneApp>();\n\n\t/**\n\t * Logging component.\n\t * @internal\n\t */\n\tprivate readonly _logging?: ILoggingComponent;\n\n\t/**\n\t * Consignment documents served by this app.\n\t * @internal\n\t */\n\tprivate readonly _consignments: IJsonLdDocument[];\n\n\t/**\n\t * Node Identity\n\t * @internal\n\t */\n\tprivate _nodeId?: string;\n\n\t/**\n\t * Create a new instance of TestDataspaceDataPlaneApp.\n\t * @param options The constructor options.\n\t */\n\tconstructor(options?: ITestAppConstructorOptions) {\n\t\tthis._logging = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\t\toptions?.loggingComponentType ?? \"logging\"\n\t\t);\n\t\tthis._consignments = options?.consignments ?? DEFAULT_CONSIGNMENTS;\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 TestDataspaceDataPlaneApp.CLASS_NAME;\n\t}\n\n\t/**\n\t * Datasets handled by the App.\n\t * @returns Dataspace Protocol compliant datasets\n\t */\n\tpublic async datasetsHandled(): Promise<IDataspaceProtocolDataset[]> {\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst organizationId =\n\t\t\tcontextIds?.[ContextIdKeys.Organization] ?? contextIds?.[ContextIdKeys.Node] ?? \"\";\n\t\treturn [\n\t\t\t{\n\t\t\t\t\"@context\": [\n\t\t\t\t\tDataspaceProtocolContexts.Context,\n\t\t\t\t\t{\n\t\t\t\t\t\tdcterms: DublinCoreContexts.NamespaceTerms\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"@id\": \"https://twin.example.org/data-service-1\",\n\t\t\t\t\"@type\": \"Dataset\",\n\t\t\t\t\"dcterms:publisher\": organizationId,\n\t\t\t\thasPolicy: [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@id\": \"urn:policy:test-offer-read-consignment\",\n\t\t\t\t\t\t\"@type\": \"Offer\",\n\t\t\t\t\t\tassigner: organizationId,\n\t\t\t\t\t\tpermission: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\taction: \"read\"\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],\n\t\t\t\tdistribution: [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@id\": \"https://twin.example.org/distribution-1\",\n\t\t\t\t\t\t\"@type\": \"Distribution\",\n\t\t\t\t\t\taccessService: \"https://twin.example.org/data-service-1\",\n\t\t\t\t\t\tformat: \"Http-Pull-Query-Format\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"dcterms:type\": \"https://vocabulary.uncefact.org/Consignment\"\n\t\t\t}\n\t\t];\n\t}\n\n\t/**\n\t * Supported query types.\n\t * @returns Types.\n\t */\n\tpublic supportedQueryTypes(): string[] {\n\t\treturn [\"TestQueryType\"];\n\t}\n\n\t/**\n\t * Start method.\n\t * @param nodeLoggingComponentType the logging component type of such a node.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Node);\n\t\tthis._nodeId = contextIds[ContextIdKeys.Node];\n\n\t\tDataTypeHandlerFactory.register(\"https://twin.example.org/MyCreate\", () => ({\n\t\t\tnamespace: \"https://twin.example.org/\",\n\t\t\ttype: \"MyCreate\",\n\t\t\tdefaultValue: {},\n\t\t\tjsonSchema: async () => ({\n\t\t\t\ttype: \"object\"\n\t\t\t})\n\t\t}));\n\n\t\tDataTypeHandlerFactory.register(\"https://vocabulary.uncefact.org/Consignment\", () => ({\n\t\t\tnamespace: \"https://vocabulary.uncefact.org/\",\n\t\t\ttype: \"Consignment\",\n\t\t\tdefaultValue: {},\n\t\t\tjsonSchema: async () => ({\n\t\t\t\ttype: \"object\"\n\t\t\t})\n\t\t}));\n\t}\n\n\t/**\n\t * The activities handled by the App.\n\t * @returns The activities handled by the App.\n\t */\n\tpublic activitiesHandled(): IActivityQuery[] {\n\t\treturn [{ objectType: \"https://vocabulary.uncefact.org/Consignment\" }];\n\t}\n\n\t/**\n\t * Handle Activity.\n\t * @param activity Activity\n\t * @returns Activity processing result\n\t */\n\tpublic async handleActivity<T>(activity: IDataspaceActivity): Promise<T> {\n\t\tGuards.object<IActivityStreamsActivity>(\n\t\t\tTestDataspaceDataPlaneApp.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: \"info\",\n\t\t\tsource: TestDataspaceDataPlaneApp.CLASS_NAME,\n\t\t\tmessage: `App Called: ${TestDataspaceDataPlaneApp.APP_ID}`\n\t\t});\n\n\t\tawait this._logging?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: TestDataspaceDataPlaneApp.CLASS_NAME,\n\t\t\tmessage: `Node Identity: ${this._nodeId ?? \"\"}`\n\t\t});\n\n\t\tawait new Promise(resolve => setTimeout(resolve, 500));\n\t\treturn \"1234\" as T;\n\t}\n\n\t/**\n\t * Handles the Data Request.\n\t * @param dataRequest The data request\n\t * @param cursor Cursor that points to the next item in the result set.\n\t * @param limit Maximum number of entries retrieved or to be retrieved.\n\t * @returns the Data.\n\t */\n\tpublic async handleDataRequest(\n\t\tdataRequest: IDataRequest,\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{ data: IJsonLdDocument; cursor?: string }> {\n\t\tGuards.object<IDataRequest>(\n\t\t\tTestDataspaceDataPlaneApp.CLASS_NAME,\n\t\t\tnameof(dataRequest),\n\t\t\tdataRequest\n\t\t);\n\n\t\tswitch (dataRequest.type) {\n\t\t\tcase DataRequestType.DataAssetEntities: {\n\t\t\t\tif (dataRequest.entitySet.entityId) {\n\t\t\t\t\tconst entityIds = dataRequest.entitySet.entityId;\n\t\t\t\t\tconst matched = this._consignments.filter(c =>\n\t\t\t\t\t\tentityIds.includes((c as { id?: string }).id ?? \"\")\n\t\t\t\t\t);\n\t\t\t\t\treturn { data: (matched.length === 1 ? matched[0] : matched) as IJsonLdDocument };\n\t\t\t\t}\n\n\t\t\t\tif (dataRequest.entitySet.entityType === \"https://vocabulary.uncefact.org/Consignment\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: this._consignments as unknown as IJsonLdDocument\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn { data: [] };\n\t\t\t}\n\n\t\t\tcase DataRequestType.QueryDataAsset:\n\t\t\t\treturn { data: DEFAULT_ENTITIES as unknown as IJsonLdDocument };\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"testDataspaceDataPlaneApp.js","sourceRoot":"","sources":["../../src/testDataspaceDataPlaneApp.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport { ComponentFactory, Guards } from \"@twin.org/core\";\nimport { DataTypeHandlerFactory } from \"@twin.org/data-core\";\nimport type { IJsonLdDocument } from \"@twin.org/data-json-ld\";\nimport {\n\tDataRequestType,\n\ttype IDataspaceActivity,\n\ttype IActivityQuery,\n\ttype IDataRequest,\n\ttype IDataspaceApp,\n\ttype IProcessingGroupOptions\n} from \"@twin.org/dataspace-models\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDataspaceProtocolContexts,\n\ttype IDataspaceProtocolDataset\n} from \"@twin.org/standards-dataspace-protocol\";\nimport { DublinCoreContexts } from \"@twin.org/standards-dublin-core\";\nimport type { IActivityStreamsActivity } from \"@twin.org/standards-w3c-activity-streams\";\nimport type { ITestAppConstructorOptions } from \"./ITestAppConstructorOptions.js\";\n\n// Default consignments — two entries with different port locations for filtering tests.\n// Can be overridden via constructor options (e.g. loaded from a JSON file via @json: env syntax).\nconst DEFAULT_CONSIGNMENTS: IJsonLdDocument[] = [\n\t{\n\t\t\"@context\": \"https://vocabulary.uncefact.org/unece-context-D23B.jsonld\",\n\t\ttype: \"Consignment\",\n\t\tid: \"urn:ucr:24PLP051219453I002610799053311\",\n\t\tidentifier: \"M-Test0001\",\n\t\tglobalId: \"5-GB-IMPORT-Test0001\",\n\t\tdestinationCountry: {\n\t\t\ttype: \"Country\",\n\t\t\tcountryId: \"unece:CountryId#GB\"\n\t\t},\n\t\tloadingLocation: {\n\t\t\ttype: \"LogisticsLocation\",\n\t\t\tid: \"unece:LOCODE#NLRTM\",\n\t\t\tname: \"Rotterdam\"\n\t\t},\n\t\tunloadingLocation: {\n\t\t\ttype: \"LogisticsLocation\",\n\t\t\tid: \"unece:LOCODE#GBFXT\",\n\t\t\tname: \"Felixstowe\"\n\t\t}\n\t},\n\t{\n\t\t\"@context\": \"https://vocabulary.uncefact.org/unece-context-D23B.jsonld\",\n\t\ttype: \"Consignment\",\n\t\tid: \"urn:ucr:24PLP051219453I002710888164422\",\n\t\tidentifier: \"M-Test0002\",\n\t\tglobalId: \"5-GB-IMPORT-Test0002\",\n\t\tdestinationCountry: {\n\t\t\ttype: \"Country\",\n\t\t\tcountryId: \"unece:CountryId#GB\"\n\t\t},\n\t\tloadingLocation: {\n\t\t\ttype: \"LogisticsLocation\",\n\t\t\tid: \"unece:LOCODE#FRLEH\",\n\t\t\tname: \"Le Havre\"\n\t\t},\n\t\tunloadingLocation: {\n\t\t\ttype: \"LogisticsLocation\",\n\t\t\tid: \"unece:LOCODE#GBDVR\",\n\t\t\tname: \"Dover\"\n\t\t}\n\t}\n];\n\nconst DEFAULT_ENTITIES: IJsonLdDocument[] = [\n\tDEFAULT_CONSIGNMENTS[0],\n\t{\n\t\t\"@context\": \"https://vocabulary.uncefact.org/unece-context-D23B.jsonld\",\n\t\ttype: \"Document\",\n\t\tid: \"urn:document:a3456fddaa56\",\n\t\tdocumentTypeCode: \"unece:DocumentCodeList#853\"\n\t}\n];\n\n/**\n * Test App Activity Handler.\n */\nexport class TestDataspaceDataPlaneApp implements IDataspaceApp {\n\t/**\n\t * App Name.\n\t */\n\tpublic static readonly APP_ID = \"https://twin.example.org/app1\";\n\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<TestDataspaceDataPlaneApp>();\n\n\t/**\n\t * Logging component.\n\t * @internal\n\t */\n\tprivate readonly _logging?: ILoggingComponent;\n\n\t/**\n\t * Consignment documents served by this app.\n\t * @internal\n\t */\n\tprivate readonly _consignments: IJsonLdDocument[];\n\n\t/**\n\t * Node Identity\n\t * @internal\n\t */\n\tprivate _nodeId?: string;\n\n\t/**\n\t * Create a new instance of TestDataspaceDataPlaneApp.\n\t * @param options The constructor options.\n\t */\n\tconstructor(options?: ITestAppConstructorOptions) {\n\t\tthis._logging = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\t\toptions?.loggingComponentType ?? \"logging\"\n\t\t);\n\t\tthis._consignments = options?.consignments ?? DEFAULT_CONSIGNMENTS;\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 TestDataspaceDataPlaneApp.CLASS_NAME;\n\t}\n\n\t/**\n\t * The settings for the processing groups for tasks.\n\t * @returns The options for each process group.\n\t */\n\tpublic processingGroups(): {\n\t\t[id: string]: IProcessingGroupOptions;\n\t} {\n\t\treturn {\n\t\t\t\"test-default\": {\n\t\t\t\tconcurrentTasks: 2\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Datasets handled by the App.\n\t * @returns Dataspace Protocol compliant datasets\n\t */\n\tpublic async datasetsHandled(): Promise<IDataspaceProtocolDataset[]> {\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst organizationId =\n\t\t\tcontextIds?.[ContextIdKeys.Organization] ?? contextIds?.[ContextIdKeys.Node] ?? \"\";\n\t\treturn [\n\t\t\t{\n\t\t\t\t\"@context\": [\n\t\t\t\t\tDataspaceProtocolContexts.Context,\n\t\t\t\t\t{\n\t\t\t\t\t\tdcterms: DublinCoreContexts.NamespaceTerms\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"@id\": \"https://twin.example.org/data-service-1\",\n\t\t\t\t\"@type\": \"Dataset\",\n\t\t\t\t\"dcterms:publisher\": organizationId,\n\t\t\t\thasPolicy: [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@id\": \"urn:policy:test-offer-read-consignment\",\n\t\t\t\t\t\t\"@type\": \"Offer\",\n\t\t\t\t\t\tassigner: organizationId,\n\t\t\t\t\t\tpermission: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\taction: \"read\"\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],\n\t\t\t\tdistribution: [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@id\": \"https://twin.example.org/distribution-1\",\n\t\t\t\t\t\t\"@type\": \"Distribution\",\n\t\t\t\t\t\taccessService: \"https://twin.example.org/data-service-1\",\n\t\t\t\t\t\tformat: \"Http-Pull-Query-Format\"\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\t\"dcterms:type\": \"https://vocabulary.uncefact.org/Consignment\"\n\t\t\t}\n\t\t];\n\t}\n\n\t/**\n\t * Supported query types.\n\t * @returns Types.\n\t */\n\tpublic supportedQueryTypes(): string[] {\n\t\treturn [\"TestQueryType\"];\n\t}\n\n\t/**\n\t * Start method.\n\t * @param nodeLoggingComponentType the logging component type of such a node.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Node);\n\t\tthis._nodeId = contextIds[ContextIdKeys.Node];\n\n\t\tDataTypeHandlerFactory.register(\"https://twin.example.org/MyCreate\", () => ({\n\t\t\tnamespace: \"https://twin.example.org/\",\n\t\t\ttype: \"MyCreate\",\n\t\t\tdefaultValue: {},\n\t\t\tjsonSchema: async () => ({\n\t\t\t\ttype: \"object\"\n\t\t\t})\n\t\t}));\n\n\t\tDataTypeHandlerFactory.register(\"https://vocabulary.uncefact.org/Consignment\", () => ({\n\t\t\tnamespace: \"https://vocabulary.uncefact.org/\",\n\t\t\ttype: \"Consignment\",\n\t\t\tdefaultValue: {},\n\t\t\tjsonSchema: async () => ({\n\t\t\t\ttype: \"object\"\n\t\t\t})\n\t\t}));\n\t}\n\n\t/**\n\t * The activities handled by the App.\n\t * @returns The activities handled by the App.\n\t */\n\tpublic activitiesHandled(): IActivityQuery[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tobjectType: \"https://vocabulary.uncefact.org/Consignment\",\n\t\t\t\tprocessingGroupId: \"test-default\"\n\t\t\t}\n\t\t];\n\t}\n\n\t/**\n\t * Handle Activity.\n\t * @param activity Activity\n\t * @returns Activity processing result\n\t */\n\tpublic async handleActivity<T>(activity: IDataspaceActivity): Promise<T> {\n\t\tGuards.object<IActivityStreamsActivity>(\n\t\t\tTestDataspaceDataPlaneApp.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: \"info\",\n\t\t\tsource: TestDataspaceDataPlaneApp.CLASS_NAME,\n\t\t\tmessage: `App Called: ${TestDataspaceDataPlaneApp.APP_ID}`\n\t\t});\n\n\t\tawait this._logging?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: TestDataspaceDataPlaneApp.CLASS_NAME,\n\t\t\tmessage: `Node Identity: ${this._nodeId ?? \"\"}`\n\t\t});\n\n\t\tawait new Promise(resolve => setTimeout(resolve, 500));\n\t\treturn \"1234\" as T;\n\t}\n\n\t/**\n\t * Handles the Data Request.\n\t * @param dataRequest The data request\n\t * @param cursor Cursor that points to the next item in the result set.\n\t * @param limit Maximum number of entries retrieved or to be retrieved.\n\t * @returns the Data.\n\t */\n\tpublic async handleDataRequest(\n\t\tdataRequest: IDataRequest,\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{ data: IJsonLdDocument; cursor?: string }> {\n\t\tGuards.object<IDataRequest>(\n\t\t\tTestDataspaceDataPlaneApp.CLASS_NAME,\n\t\t\tnameof(dataRequest),\n\t\t\tdataRequest\n\t\t);\n\n\t\tswitch (dataRequest.type) {\n\t\t\tcase DataRequestType.DataAssetEntities: {\n\t\t\t\tif (dataRequest.entitySet.entityId) {\n\t\t\t\t\tconst entityIds = dataRequest.entitySet.entityId;\n\t\t\t\t\tconst matched = this._consignments.filter(c =>\n\t\t\t\t\t\tentityIds.includes((c as { id?: string }).id ?? \"\")\n\t\t\t\t\t);\n\t\t\t\t\treturn { data: (matched.length === 1 ? matched[0] : matched) as IJsonLdDocument };\n\t\t\t\t}\n\n\t\t\t\tif (dataRequest.entitySet.entityType === \"https://vocabulary.uncefact.org/Consignment\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: this._consignments as unknown as IJsonLdDocument\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn { data: [] };\n\t\t\t}\n\n\t\t\tcase DataRequestType.QueryDataAsset:\n\t\t\t\treturn { data: DEFAULT_ENTITIES as unknown as IJsonLdDocument };\n\t\t}\n\t}\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { IJsonLdDocument } from "@twin.org/data-json-ld";
2
- import { type IDataspaceActivity, type IActivityQuery, type IDataRequest, type IDataspaceApp } from "@twin.org/dataspace-models";
2
+ import { type IDataspaceActivity, type IActivityQuery, type IDataRequest, type IDataspaceApp, type IProcessingGroupOptions } from "@twin.org/dataspace-models";
3
3
  import { type IDataspaceProtocolDataset } from "@twin.org/standards-dataspace-protocol";
4
4
  import type { ITestAppConstructorOptions } from "./ITestAppConstructorOptions.js";
5
5
  /**
@@ -24,6 +24,13 @@ export declare class TestDataspaceDataPlaneApp implements IDataspaceApp {
24
24
  * @returns The class name of the component.
25
25
  */
26
26
  className(): string;
27
+ /**
28
+ * The settings for the processing groups for tasks.
29
+ * @returns The options for each process group.
30
+ */
31
+ processingGroups(): {
32
+ [id: string]: IProcessingGroupOptions;
33
+ };
27
34
  /**
28
35
  * Datasets handled by the App.
29
36
  * @returns Dataspace Protocol compliant datasets
package/docs/changelog.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.3-next.26](https://github.com/twinfoundation/dataspace/compare/dataspace-test-app-v0.0.3-next.25...dataspace-test-app-v0.0.3-next.26) (2026-04-14)
4
+
5
+
6
+ ### Features
7
+
8
+ * add inline tasks and concurrent options ([#104](https://github.com/twinfoundation/dataspace/issues/104)) ([2227a21](https://github.com/twinfoundation/dataspace/commit/2227a212d906f58ba77850c79bb20bf2cb7195a8))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/dataspace-models bumped from 0.0.3-next.25 to 0.0.3-next.26
16
+
3
17
  ## [0.0.3-next.25](https://github.com/twinfoundation/dataspace/compare/dataspace-test-app-v0.0.3-next.24...dataspace-test-app-v0.0.3-next.25) (2026-04-10)
4
18
 
5
19
 
@@ -62,6 +62,24 @@ The class name of the component.
62
62
 
63
63
  ***
64
64
 
65
+ ### processingGroups() {#processinggroups}
66
+
67
+ > **processingGroups**(): `object`
68
+
69
+ The settings for the processing groups for tasks.
70
+
71
+ #### Returns
72
+
73
+ `object`
74
+
75
+ The options for each process group.
76
+
77
+ #### Implementation of
78
+
79
+ `IDataspaceApp.processingGroups`
80
+
81
+ ***
82
+
65
83
  ### datasetsHandled() {#datasetshandled}
66
84
 
67
85
  > **datasetsHandled**(): `Promise`\<`IDataspaceProtocolDataset`[]\>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/dataspace-test-app",
3
- "version": "0.0.3-next.25",
3
+ "version": "0.0.3-next.26",
4
4
  "description": "Provides a sample dataspace app for local integration tests and development workflows.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,7 +19,7 @@
19
19
  "@twin.org/core": "next",
20
20
  "@twin.org/data-core": "next",
21
21
  "@twin.org/data-json-ld": "next",
22
- "@twin.org/dataspace-models": "0.0.3-next.25",
22
+ "@twin.org/dataspace-models": "0.0.3-next.26",
23
23
  "@twin.org/engine-models": "next",
24
24
  "@twin.org/engine-types": "next",
25
25
  "@twin.org/logging-models": "next",