@twin.org/federated-catalogue-service 0.9.0 → 0.9.1-next.2

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.
@@ -1,6 +1,6 @@
1
1
  // Copyright 2025 IOTA Stiftung.
2
2
  // SPDX-License-Identifier: Apache-2.0.
3
- import { HttpContextIdKeys, HttpUrlHelper } from "@twin.org/api-models";
3
+ import { HttpContextIdKeys, HttpHeaderHelper } from "@twin.org/api-models";
4
4
  import { ContextIdStore } from "@twin.org/context";
5
5
  import { Coerce, ComponentFactory, Guards, Is } from "@twin.org/core";
6
6
  import { DataspaceProtocolCatalogTypes, DataspaceProtocolContexts } from "@twin.org/standards-dataspace-protocol";
@@ -262,10 +262,8 @@ async function catalogRequest(httpRequestContext, componentName, request) {
262
262
  const component = ComponentFactory.get(componentName);
263
263
  const result = await component.query(request.body.filter, request.query?.cursor, Coerce.integer(request.query?.limit), trustPayload);
264
264
  const headers = {};
265
- if (Is.stringValue(result.cursor)) {
266
- const contextIds = await ContextIdStore.getContextIds();
267
- headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(HttpUrlHelper.replaceOrigin(httpRequestContext.serverRequest.url, contextIds?.[HttpContextIdKeys.PublicOrigin]), { cursor: result.cursor }, "next");
268
- }
265
+ const contextIds = await ContextIdStore.getContextIds();
266
+ HttpHeaderHelper.buildCursor(headers, httpRequestContext.serverRequest.url, contextIds?.[HttpContextIdKeys.PublicOrigin], result.cursor);
269
267
  return {
270
268
  headers,
271
269
  statusCode: transformErrorToStatusCode(result.result),
@@ -323,11 +321,11 @@ async function setDataset(httpRequestContext, componentName, request) {
323
321
  const component = ComponentFactory.get(componentName);
324
322
  const result = await component.set(request.body, trustPayload);
325
323
  if (Is.stringValue(result)) {
324
+ const headers = {};
325
+ HttpHeaderHelper.buildId(headers, result);
326
326
  return {
327
327
  statusCode: HttpStatusCode.created,
328
- headers: {
329
- [HeaderTypes.Location]: Coerce.string(result)
330
- }
328
+ headers
331
329
  };
332
330
  }
333
331
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"federatedCatalogueRoutes.js","sourceRoot":"","sources":["../../src/federatedCatalogueRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHttpContextIdKeys,\n\tHttpUrlHelper,\n\ttype IHttpRequestContext,\n\ttype IRestRoute,\n\ttype ITag\n} from \"@twin.org/api-models\";\nimport { ContextIdStore } from \"@twin.org/context\";\nimport { Coerce, ComponentFactory, Guards, Is } from \"@twin.org/core\";\nimport type {\n\tICatalogRequestRequest,\n\tICatalogRequestResponse,\n\tIDatasetGetRequest,\n\tIDatasetGetResponse,\n\tIDatasetRemoveRequest,\n\tIDatasetRemoveResponse,\n\tIDatasetSetRequest,\n\tIDatasetSetResponse,\n\tIFederatedCatalogueComponent\n} from \"@twin.org/federated-catalogue-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDataspaceProtocolCatalogTypes,\n\tDataspaceProtocolContexts\n} from \"@twin.org/standards-dataspace-protocol\";\nimport { DcatClasses, type DcatContextType } from \"@twin.org/standards-w3c-dcat\";\nimport { OdrlPolicyType } from \"@twin.org/standards-w3c-odrl\";\nimport { HeaderHelper, HeaderTypes, HttpStatusCode } from \"@twin.org/web\";\nimport { transformErrorToStatusCode, transformToCatalogError } from \"./utils/catalogErrorUtils.js\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"federatedCatalogueRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsFederatedCatalogue: ITag[] = [\n\t{\n\t\tname: \"Federated Catalogue\",\n\t\tdescription:\n\t\t\t\"Service providing Dataspace Protocol-compliant catalogue endpoints for dataset discovery and query.\"\n\t}\n];\n\n/**\n * The REST routes for federated catalogue.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param componentName The name of the component to use in the routes stored in the ComponentFactory.\n * @returns The generated routes.\n */\nexport function generateRestRoutesFederatedCatalogue(\n\tbaseRouteName: string,\n\tcomponentName: string\n): IRestRoute[] {\n\tconst catalogRequestRoute: IRestRoute<ICatalogRequestRequest, ICatalogRequestResponse> = {\n\t\toperationId: \"catalogRequest\",\n\t\tsummary: \"Query the federated catalogue for datasets\",\n\t\ttag: tagsFederatedCatalogue[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/request`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tcatalogRequest(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<ICatalogRequestRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"catalogRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\t\t\t\"@type\": DataspaceProtocolCatalogTypes.CatalogRequestMessage,\n\t\t\t\t\t\t\tfilter: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"dcterms:title\": \"Energy Consumption Data\"\n\t\t\t\t\t\t\t\t}\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\t{\n\t\t\t\t\tid: \"catalogRequestNoFilterExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\t\t\t\"@type\": DataspaceProtocolCatalogTypes.CatalogRequestMessage\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<ICatalogRequestResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"catalogRequestResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\t\t\t\t\"@id\":\n\t\t\t\t\t\t\t\t\t\"urn:x-catalog:a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2\",\n\t\t\t\t\t\t\t\t\"@type\": \"Catalog\",\n\t\t\t\t\t\t\t\tparticipantId: \"did:example:node-identity-123\",\n\t\t\t\t\t\t\t\tdataset: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:dataset-123\",\n\t\t\t\t\t\t\t\t\t\t\"@type\": \"Dataset\",\n\t\t\t\t\t\t\t\t\t\t\"dcterms:title\": \"Energy Consumption Data\",\n\t\t\t\t\t\t\t\t\t\t\"dcterms:description\": \"Historical energy consumption data\",\n\t\t\t\t\t\t\t\t\t\thasPolicy: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:policy-456\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"@type\": OdrlPolicyType.Offer,\n\t\t\t\t\t\t\t\t\t\t\t\tassigner: \"did:example:data-provider-789\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tdistribution: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:distribution-789\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"@type\": \"Distribution\",\n\t\t\t\t\t\t\t\t\t\t\t\tformat: \"application/json\",\n\t\t\t\t\t\t\t\t\t\t\t\taccessService: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:access-service-321\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"@type\": \"DataService\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tendpointURL: \"https://example.com/data-access\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\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}\n\t\t],\n\t\tskipAuth: true,\n\t\tskipTenant: true\n\t};\n\n\tconst getDatasetRoute: IRestRoute<IDatasetGetRequest, IDatasetGetResponse> = {\n\t\toperationId: \"getDataset\",\n\t\tsummary: \"Retrieve a specific dataset by ID\",\n\t\ttag: tagsFederatedCatalogue[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/datasets/:datasetId`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tgetDataset(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDatasetGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"getDatasetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tdatasetId: \"urn:uuid:dataset-123\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDatasetGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"getDatasetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": DataspaceProtocolContexts.Context as unknown as DcatContextType,\n\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:dataset-123\",\n\t\t\t\t\t\t\t\t\"@type\": DcatClasses.Dataset,\n\t\t\t\t\t\t\t\t\"dcterms:title\": \"Energy Consumption Data\",\n\t\t\t\t\t\t\t\t\"dcterms:description\": \"Historical energy consumption data\"\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}\n\t\t],\n\t\tskipAuth: true,\n\t\tskipTenant: true\n\t};\n\n\tconst setDatasetRoute: IRestRoute<IDatasetSetRequest, IDatasetSetResponse> = {\n\t\toperationId: \"setDataset\",\n\t\tsummary: \"Insert or update a dataset in the catalogue\",\n\t\ttag: tagsFederatedCatalogue[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/datasets`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tsetDataset(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDatasetSetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"setDatasetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\"@context\": DataspaceProtocolContexts.Context as unknown as DcatContextType,\n\t\t\t\t\t\t\t\"@id\": \"urn:uuid:dataset-123\",\n\t\t\t\t\t\t\t\"@type\": DcatClasses.Dataset,\n\t\t\t\t\t\t\t\"dcterms:title\": \"Energy Consumption Data\",\n\t\t\t\t\t\t\t\"dcterms:description\": \"Historical energy consumption data\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDatasetSetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"setDatasetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.noContent\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\tskipAuth: true,\n\t\tskipTenant: true\n\t};\n\n\tconst removeDatasetRoute: IRestRoute<IDatasetRemoveRequest, IDatasetRemoveResponse> = {\n\t\toperationId: \"removeDataset\",\n\t\tsummary: \"Remove a dataset from the catalogue by ID\",\n\t\ttag: tagsFederatedCatalogue[0].name,\n\t\tmethod: \"DELETE\",\n\t\tpath: `${baseRouteName}/datasets/:datasetId`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tremoveDataset(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDatasetRemoveRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"removeDatasetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tdatasetId: \"urn:uuid:dataset-123\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDatasetRemoveResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"removeDatasetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.noContent\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\tskipAuth: true,\n\t\tskipTenant: true\n\t};\n\n\treturn [catalogRequestRoute, getDatasetRoute, setDatasetRoute, removeDatasetRoute];\n}\n\n/**\n * Handle the catalog request operation.\n * @param httpRequestContext The request context for the operation.\n * @param componentName The name of the component to use.\n * @param request The request.\n * @returns A promise that resolves with the catalog response, including pagination headers and status code.\n */\nasync function catalogRequest(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: ICatalogRequestRequest\n): Promise<ICatalogRequestResponse> {\n\ttry {\n\t\tGuards.object<ICatalogRequestRequest>(ROUTES_SOURCE, nameof(request), request);\n\t\tGuards.object(ROUTES_SOURCE, nameof(request.body), request.body);\n\t\tGuards.stringValue(ROUTES_SOURCE, \"@type\", request.body[\"@type\"]);\n\n\t\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\t\tconst component: IFederatedCatalogueComponent = ComponentFactory.get(componentName);\n\n\t\tconst result = await component.query(\n\t\t\trequest.body.filter,\n\t\t\trequest.query?.cursor,\n\t\t\tCoerce.integer(request.query?.limit),\n\t\t\ttrustPayload\n\t\t);\n\n\t\tconst headers: ICatalogRequestResponse[\"headers\"] = {};\n\n\t\tif (Is.stringValue(result.cursor)) {\n\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\t\theaders[HeaderTypes.Link] = HeaderHelper.createLinkHeader(\n\t\t\t\tHttpUrlHelper.replaceOrigin(\n\t\t\t\t\thttpRequestContext.serverRequest.url,\n\t\t\t\t\tcontextIds?.[HttpContextIdKeys.PublicOrigin]\n\t\t\t\t),\n\t\t\t\t{ cursor: result.cursor },\n\t\t\t\t\"next\"\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\theaders,\n\t\t\tstatusCode: transformErrorToStatusCode(result.result),\n\t\t\tbody: result.result\n\t\t};\n\t} catch (error) {\n\t\tconst catalogError = transformToCatalogError(error);\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(catalogError) ?? HttpStatusCode.badRequest,\n\t\t\tbody: catalogError\n\t\t};\n\t}\n}\n\n/**\n * Handle the get dataset operation.\n * @param httpRequestContext The request context for the operation.\n * @param componentName The name of the component to use.\n * @param request The request.\n * @returns A promise that resolves with the dataset response, containing the dataset or a CatalogError.\n */\nasync function getDataset(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDatasetGetRequest\n): Promise<IDatasetGetResponse> {\n\ttry {\n\t\tGuards.object<IDatasetGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\t\tGuards.object(ROUTES_SOURCE, nameof(request.pathParams), request.pathParams);\n\t\tGuards.stringValue(\n\t\t\tROUTES_SOURCE,\n\t\t\tnameof(request.pathParams.datasetId),\n\t\t\trequest.pathParams.datasetId\n\t\t);\n\n\t\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\t\tconst component: IFederatedCatalogueComponent = ComponentFactory.get(componentName);\n\n\t\tconst result = await component.get(request.pathParams.datasetId, trustPayload);\n\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(result),\n\t\t\tbody: result\n\t\t};\n\t} catch (error) {\n\t\tconst catalogError = transformToCatalogError(error);\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(catalogError) ?? HttpStatusCode.badRequest,\n\t\t\tbody: catalogError\n\t\t};\n\t}\n}\n\n/**\n * Handle the set dataset operation.\n * @param httpRequestContext The request context for the operation.\n * @param componentName The name of the component to use.\n * @param request The request.\n * @returns A promise that resolves with the set response, including a Location header on creation or a CatalogError on failure.\n */\nasync function setDataset(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDatasetSetRequest\n): Promise<IDatasetSetResponse> {\n\ttry {\n\t\tGuards.object<IDatasetSetRequest>(ROUTES_SOURCE, nameof(request), request);\n\t\tGuards.object(ROUTES_SOURCE, nameof(request.body), request.body);\n\n\t\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\t\tconst component: IFederatedCatalogueComponent = ComponentFactory.get(componentName);\n\n\t\tconst result = await component.set(request.body, trustPayload);\n\n\t\tif (Is.stringValue(result)) {\n\t\t\treturn {\n\t\t\t\tstatusCode: HttpStatusCode.created,\n\t\t\t\theaders: {\n\t\t\t\t\t[HeaderTypes.Location]: Coerce.string(result)\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(result),\n\t\t\tbody: result\n\t\t};\n\t} catch (error) {\n\t\tconst catalogError = transformToCatalogError(error);\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(catalogError) ?? HttpStatusCode.badRequest,\n\t\t\tbody: catalogError\n\t\t};\n\t}\n}\n\n/**\n * Handle the remove dataset operation.\n * @param httpRequestContext The request context for the operation.\n * @param componentName The name of the component to use.\n * @param request The request.\n * @returns A promise that resolves with the remove response, containing no content on success or a CatalogError on failure.\n */\nasync function removeDataset(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDatasetRemoveRequest\n): Promise<IDatasetRemoveResponse> {\n\ttry {\n\t\tGuards.object<IDatasetRemoveRequest>(ROUTES_SOURCE, nameof(request), request);\n\t\tGuards.object(ROUTES_SOURCE, nameof(request.pathParams), request.pathParams);\n\t\tGuards.stringValue(\n\t\t\tROUTES_SOURCE,\n\t\t\tnameof(request.pathParams.datasetId),\n\t\t\trequest.pathParams.datasetId\n\t\t);\n\n\t\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\t\tconst component: IFederatedCatalogueComponent = ComponentFactory.get(componentName);\n\n\t\tconst result = await component.remove(request.pathParams.datasetId, trustPayload);\n\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(result) ?? HttpStatusCode.noContent,\n\t\t\tbody: result\n\t\t};\n\t} catch (error) {\n\t\tconst catalogError = transformToCatalogError(error);\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(catalogError) ?? HttpStatusCode.badRequest,\n\t\t\tbody: catalogError\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"federatedCatalogueRoutes.js","sourceRoot":"","sources":["../../src/federatedCatalogueRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHttpContextIdKeys,\n\tHttpHeaderHelper,\n\ttype IHttpRequestContext,\n\ttype IRestRoute,\n\ttype ITag\n} from \"@twin.org/api-models\";\nimport { ContextIdStore } from \"@twin.org/context\";\nimport { Coerce, ComponentFactory, Guards, Is } from \"@twin.org/core\";\nimport type {\n\tICatalogRequestRequest,\n\tICatalogRequestResponse,\n\tIDatasetGetRequest,\n\tIDatasetGetResponse,\n\tIDatasetRemoveRequest,\n\tIDatasetRemoveResponse,\n\tIDatasetSetRequest,\n\tIDatasetSetResponse,\n\tIFederatedCatalogueComponent\n} from \"@twin.org/federated-catalogue-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport {\n\tDataspaceProtocolCatalogTypes,\n\tDataspaceProtocolContexts\n} from \"@twin.org/standards-dataspace-protocol\";\nimport { DcatClasses, type DcatContextType } from \"@twin.org/standards-w3c-dcat\";\nimport { OdrlPolicyType } from \"@twin.org/standards-w3c-odrl\";\nimport { HeaderHelper, HeaderTypes, HttpStatusCode, type IHttpHeaders } from \"@twin.org/web\";\nimport { transformErrorToStatusCode, transformToCatalogError } from \"./utils/catalogErrorUtils.js\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"federatedCatalogueRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsFederatedCatalogue: ITag[] = [\n\t{\n\t\tname: \"Federated Catalogue\",\n\t\tdescription:\n\t\t\t\"Service providing Dataspace Protocol-compliant catalogue endpoints for dataset discovery and query.\"\n\t}\n];\n\n/**\n * The REST routes for federated catalogue.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param componentName The name of the component to use in the routes stored in the ComponentFactory.\n * @returns The generated routes.\n */\nexport function generateRestRoutesFederatedCatalogue(\n\tbaseRouteName: string,\n\tcomponentName: string\n): IRestRoute[] {\n\tconst catalogRequestRoute: IRestRoute<ICatalogRequestRequest, ICatalogRequestResponse> = {\n\t\toperationId: \"catalogRequest\",\n\t\tsummary: \"Query the federated catalogue for datasets\",\n\t\ttag: tagsFederatedCatalogue[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/request`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tcatalogRequest(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<ICatalogRequestRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"catalogRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\t\t\t\"@type\": DataspaceProtocolCatalogTypes.CatalogRequestMessage,\n\t\t\t\t\t\t\tfilter: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\"dcterms:title\": \"Energy Consumption Data\"\n\t\t\t\t\t\t\t\t}\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\t{\n\t\t\t\t\tid: \"catalogRequestNoFilterExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\t\t\t\"@type\": DataspaceProtocolCatalogTypes.CatalogRequestMessage\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<ICatalogRequestResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"catalogRequestResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\t\t\t\t\"@id\":\n\t\t\t\t\t\t\t\t\t\"urn:x-catalog:a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2\",\n\t\t\t\t\t\t\t\t\"@type\": \"Catalog\",\n\t\t\t\t\t\t\t\tparticipantId: \"did:example:node-identity-123\",\n\t\t\t\t\t\t\t\tdataset: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:dataset-123\",\n\t\t\t\t\t\t\t\t\t\t\"@type\": \"Dataset\",\n\t\t\t\t\t\t\t\t\t\t\"dcterms:title\": \"Energy Consumption Data\",\n\t\t\t\t\t\t\t\t\t\t\"dcterms:description\": \"Historical energy consumption data\",\n\t\t\t\t\t\t\t\t\t\thasPolicy: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:policy-456\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"@type\": OdrlPolicyType.Offer,\n\t\t\t\t\t\t\t\t\t\t\t\tassigner: \"did:example:data-provider-789\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tdistribution: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:distribution-789\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"@type\": \"Distribution\",\n\t\t\t\t\t\t\t\t\t\t\t\tformat: \"application/json\",\n\t\t\t\t\t\t\t\t\t\t\t\taccessService: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:access-service-321\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"@type\": \"DataService\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tendpointURL: \"https://example.com/data-access\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\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}\n\t\t],\n\t\tskipAuth: true,\n\t\tskipTenant: true\n\t};\n\n\tconst getDatasetRoute: IRestRoute<IDatasetGetRequest, IDatasetGetResponse> = {\n\t\toperationId: \"getDataset\",\n\t\tsummary: \"Retrieve a specific dataset by ID\",\n\t\ttag: tagsFederatedCatalogue[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/datasets/:datasetId`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tgetDataset(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDatasetGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"getDatasetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tdatasetId: \"urn:uuid:dataset-123\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDatasetGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"getDatasetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": DataspaceProtocolContexts.Context as unknown as DcatContextType,\n\t\t\t\t\t\t\t\t\"@id\": \"urn:uuid:dataset-123\",\n\t\t\t\t\t\t\t\t\"@type\": DcatClasses.Dataset,\n\t\t\t\t\t\t\t\t\"dcterms:title\": \"Energy Consumption Data\",\n\t\t\t\t\t\t\t\t\"dcterms:description\": \"Historical energy consumption data\"\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}\n\t\t],\n\t\tskipAuth: true,\n\t\tskipTenant: true\n\t};\n\n\tconst setDatasetRoute: IRestRoute<IDatasetSetRequest, IDatasetSetResponse> = {\n\t\toperationId: \"setDataset\",\n\t\tsummary: \"Insert or update a dataset in the catalogue\",\n\t\ttag: tagsFederatedCatalogue[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/datasets`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tsetDataset(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDatasetSetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"setDatasetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\"@context\": DataspaceProtocolContexts.Context as unknown as DcatContextType,\n\t\t\t\t\t\t\t\"@id\": \"urn:uuid:dataset-123\",\n\t\t\t\t\t\t\t\"@type\": DcatClasses.Dataset,\n\t\t\t\t\t\t\t\"dcterms:title\": \"Energy Consumption Data\",\n\t\t\t\t\t\t\t\"dcterms:description\": \"Historical energy consumption data\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDatasetSetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"setDatasetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.noContent\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\tskipAuth: true,\n\t\tskipTenant: true\n\t};\n\n\tconst removeDatasetRoute: IRestRoute<IDatasetRemoveRequest, IDatasetRemoveResponse> = {\n\t\toperationId: \"removeDataset\",\n\t\tsummary: \"Remove a dataset from the catalogue by ID\",\n\t\ttag: tagsFederatedCatalogue[0].name,\n\t\tmethod: \"DELETE\",\n\t\tpath: `${baseRouteName}/datasets/:datasetId`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tremoveDataset(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDatasetRemoveRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"removeDatasetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t[HeaderTypes.Authorization]: \"Bearer <trust-token>\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tdatasetId: \"urn:uuid:dataset-123\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDatasetRemoveResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"removeDatasetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.noContent\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t],\n\t\tskipAuth: true,\n\t\tskipTenant: true\n\t};\n\n\treturn [catalogRequestRoute, getDatasetRoute, setDatasetRoute, removeDatasetRoute];\n}\n\n/**\n * Handle the catalog request operation.\n * @param httpRequestContext The request context for the operation.\n * @param componentName The name of the component to use.\n * @param request The request.\n * @returns A promise that resolves with the catalog response, including pagination headers and status code.\n */\nasync function catalogRequest(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: ICatalogRequestRequest\n): Promise<ICatalogRequestResponse> {\n\ttry {\n\t\tGuards.object<ICatalogRequestRequest>(ROUTES_SOURCE, nameof(request), request);\n\t\tGuards.object(ROUTES_SOURCE, nameof(request.body), request.body);\n\t\tGuards.stringValue(ROUTES_SOURCE, \"@type\", request.body[\"@type\"]);\n\n\t\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\t\tconst component: IFederatedCatalogueComponent = ComponentFactory.get(componentName);\n\n\t\tconst result = await component.query(\n\t\t\trequest.body.filter,\n\t\t\trequest.query?.cursor,\n\t\t\tCoerce.integer(request.query?.limit),\n\t\t\ttrustPayload\n\t\t);\n\n\t\tconst headers: ICatalogRequestResponse[\"headers\"] = {};\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tHttpHeaderHelper.buildCursor(\n\t\t\theaders,\n\t\t\thttpRequestContext.serverRequest.url,\n\t\t\tcontextIds?.[HttpContextIdKeys.PublicOrigin],\n\t\t\tresult.cursor\n\t\t);\n\n\t\treturn {\n\t\t\theaders,\n\t\t\tstatusCode: transformErrorToStatusCode(result.result),\n\t\t\tbody: result.result\n\t\t};\n\t} catch (error) {\n\t\tconst catalogError = transformToCatalogError(error);\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(catalogError) ?? HttpStatusCode.badRequest,\n\t\t\tbody: catalogError\n\t\t};\n\t}\n}\n\n/**\n * Handle the get dataset operation.\n * @param httpRequestContext The request context for the operation.\n * @param componentName The name of the component to use.\n * @param request The request.\n * @returns A promise that resolves with the dataset response, containing the dataset or a CatalogError.\n */\nasync function getDataset(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDatasetGetRequest\n): Promise<IDatasetGetResponse> {\n\ttry {\n\t\tGuards.object<IDatasetGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\t\tGuards.object(ROUTES_SOURCE, nameof(request.pathParams), request.pathParams);\n\t\tGuards.stringValue(\n\t\t\tROUTES_SOURCE,\n\t\t\tnameof(request.pathParams.datasetId),\n\t\t\trequest.pathParams.datasetId\n\t\t);\n\n\t\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\t\tconst component: IFederatedCatalogueComponent = ComponentFactory.get(componentName);\n\n\t\tconst result = await component.get(request.pathParams.datasetId, trustPayload);\n\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(result),\n\t\t\tbody: result\n\t\t};\n\t} catch (error) {\n\t\tconst catalogError = transformToCatalogError(error);\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(catalogError) ?? HttpStatusCode.badRequest,\n\t\t\tbody: catalogError\n\t\t};\n\t}\n}\n\n/**\n * Handle the set dataset operation.\n * @param httpRequestContext The request context for the operation.\n * @param componentName The name of the component to use.\n * @param request The request.\n * @returns A promise that resolves with the set response, including a Location header on creation or a CatalogError on failure.\n */\nasync function setDataset(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDatasetSetRequest\n): Promise<IDatasetSetResponse> {\n\ttry {\n\t\tGuards.object<IDatasetSetRequest>(ROUTES_SOURCE, nameof(request), request);\n\t\tGuards.object(ROUTES_SOURCE, nameof(request.body), request.body);\n\n\t\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\t\tconst component: IFederatedCatalogueComponent = ComponentFactory.get(componentName);\n\n\t\tconst result = await component.set(request.body, trustPayload);\n\n\t\tif (Is.stringValue(result)) {\n\t\t\tconst headers: IHttpHeaders = {};\n\t\t\tHttpHeaderHelper.buildId(headers, result);\n\n\t\t\treturn {\n\t\t\t\tstatusCode: HttpStatusCode.created,\n\t\t\t\theaders\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(result),\n\t\t\tbody: result\n\t\t};\n\t} catch (error) {\n\t\tconst catalogError = transformToCatalogError(error);\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(catalogError) ?? HttpStatusCode.badRequest,\n\t\t\tbody: catalogError\n\t\t};\n\t}\n}\n\n/**\n * Handle the remove dataset operation.\n * @param httpRequestContext The request context for the operation.\n * @param componentName The name of the component to use.\n * @param request The request.\n * @returns A promise that resolves with the remove response, containing no content on success or a CatalogError on failure.\n */\nasync function removeDataset(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDatasetRemoveRequest\n): Promise<IDatasetRemoveResponse> {\n\ttry {\n\t\tGuards.object<IDatasetRemoveRequest>(ROUTES_SOURCE, nameof(request), request);\n\t\tGuards.object(ROUTES_SOURCE, nameof(request.pathParams), request.pathParams);\n\t\tGuards.stringValue(\n\t\t\tROUTES_SOURCE,\n\t\t\tnameof(request.pathParams.datasetId),\n\t\t\trequest.pathParams.datasetId\n\t\t);\n\n\t\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\t\tconst component: IFederatedCatalogueComponent = ComponentFactory.get(componentName);\n\n\t\tconst result = await component.remove(request.pathParams.datasetId, trustPayload);\n\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(result) ?? HttpStatusCode.noContent,\n\t\t\tbody: result\n\t\t};\n\t} catch (error) {\n\t\tconst catalogError = transformToCatalogError(error);\n\t\treturn {\n\t\t\tstatusCode: transformErrorToStatusCode(catalogError) ?? HttpStatusCode.badRequest,\n\t\t\tbody: catalogError\n\t\t};\n\t}\n}\n"]}
package/docs/changelog.md CHANGED
@@ -1,5 +1,92 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.9.1-next.2](https://github.com/iotaledger/twin-federated-catalogue/compare/federated-catalogue-service-v0.9.1-next.1...federated-catalogue-service-v0.9.1-next.2) (2026-06-29)
4
+
5
+
6
+ ### Features
7
+
8
+ * enhanced rest testing ([#107](https://github.com/iotaledger/twin-federated-catalogue/issues/107)) ([c017f6c](https://github.com/iotaledger/twin-federated-catalogue/commit/c017f6c8717353da1f2c95f8de3635e9c481ef02))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/federated-catalogue-models bumped from 0.9.1-next.1 to 0.9.1-next.2
16
+
17
+ ## [0.9.1-next.1](https://github.com/iotaledger/twin-federated-catalogue/compare/federated-catalogue-service-v0.9.1-next.0...federated-catalogue-service-v0.9.1-next.1) (2026-06-26)
18
+
19
+
20
+ ### ⚠ BREAKING CHANGES
21
+
22
+ * filter plugins that read the array shape must update (twin-supply-chain FilterByRole).
23
+
24
+ ### Features
25
+
26
+ * add [@id](https://github.com/id) to policy example in federated catalogue route definition ([#58](https://github.com/iotaledger/twin-federated-catalogue/issues/58)) ([c854f16](https://github.com/iotaledger/twin-federated-catalogue/commit/c854f16eac91d23468134bb46e8a2c7a74e854af))
27
+ * add context id features ([#32](https://github.com/iotaledger/twin-federated-catalogue/issues/32)) ([277e64b](https://github.com/iotaledger/twin-federated-catalogue/commit/277e64bb507db0948e83c44e8282e09f1865fe0b))
28
+ * add data types with fully qualified names ([993eb09](https://github.com/iotaledger/twin-federated-catalogue/commit/993eb09e25f6caad5d82a3908a2ba648900f5ca7))
29
+ * add namespace prop to service ([cbfea3b](https://github.com/iotaledger/twin-federated-catalogue/commit/cbfea3b115838744fc8a238b36f1660b0f2939d9))
30
+ * add telemetry metrics to federated catalogue ([#93](https://github.com/iotaledger/twin-federated-catalogue/issues/93)) ([abd8965](https://github.com/iotaledger/twin-federated-catalogue/commit/abd89657d3991e6a50f8ed3845186069549df769))
31
+ * add validate-locales ([3d8d60d](https://github.com/iotaledger/twin-federated-catalogue/commit/3d8d60d9291e5a6f8c6d4562d6a862456a9917bc))
32
+ * configurable timeout for mutex ([b2cd76b](https://github.com/iotaledger/twin-federated-catalogue/commit/b2cd76ba71008e558788eb3fc734b8f02eb7fdc8))
33
+ * consistent component naming with other repos ([83fc03d](https://github.com/iotaledger/twin-federated-catalogue/commit/83fc03dee3846600ae6a45d710248a0ae60af570))
34
+ * eslint migration to flat config ([b5990d9](https://github.com/iotaledger/twin-federated-catalogue/commit/b5990d9ebdf403ac999da456052bee72787745de))
35
+ * implement Dataspace Protocol federated catalogue ([#36](https://github.com/iotaledger/twin-federated-catalogue/issues/36)) ([4765aba](https://github.com/iotaledger/twin-federated-catalogue/commit/4765aba4485ef8ad61e7ec1affbf0e454d974d36))
36
+ * integrate synchronised storage with federated catalogue ([#53](https://github.com/iotaledger/twin-federated-catalogue/issues/53)) ([d1cdf06](https://github.com/iotaledger/twin-federated-catalogue/commit/d1cdf066adff8fb2266ccaaebcf57da391e03d3f))
37
+ * organization identifiers ([#84](https://github.com/iotaledger/twin-federated-catalogue/issues/84)) ([1e02971](https://github.com/iotaledger/twin-federated-catalogue/commit/1e02971a12e40bd20a0034ee1de0988a689d3dc8))
38
+ * publish encrypted `twin:tenantToken` per dataset ([#64](https://github.com/iotaledger/twin-federated-catalogue/issues/64)) ([77e4517](https://github.com/iotaledger/twin-federated-catalogue/commit/77e451782ad8b227b91b4cc8a97bdd6eb90881b6))
39
+ * remove hosting component ([#90](https://github.com/iotaledger/twin-federated-catalogue/issues/90)) ([801ef4f](https://github.com/iotaledger/twin-federated-catalogue/commit/801ef4fbc1033346089b9cc3cea6022ab57f4b01))
40
+ * remove unused namespace ([b1b22f3](https://github.com/iotaledger/twin-federated-catalogue/commit/b1b22f3100e6a6dae23df12b8e424748a78f4245))
41
+ * replace sync storage with shared DB and trust-token auth ([#79](https://github.com/iotaledger/twin-federated-catalogue/issues/79)) ([3a07f02](https://github.com/iotaledger/twin-federated-catalogue/commit/3a07f02aba8d6f3540a23e5c2cebc7b0e579ef30))
42
+ * simplify node ([e80db0e](https://github.com/iotaledger/twin-federated-catalogue/commit/e80db0e1b4935daaa7ff7d4343280efaa6250bf8))
43
+ * simplify not found error handling in rest routes ([b4f2679](https://github.com/iotaledger/twin-federated-catalogue/commit/b4f26794942305ad6e8d555d1cbab6df0615214f))
44
+ * synchronise with gaia-x types ([3e0d7f2](https://github.com/iotaledger/twin-federated-catalogue/commit/3e0d7f2f277ec0adef79d71165b6db778e15e315))
45
+ * typescript 6 update ([ead042d](https://github.com/iotaledger/twin-federated-catalogue/commit/ead042d09f4e6b03a2db46ace2ea95d197f0f4b0))
46
+ * update config naming to match component ([a1a6348](https://github.com/iotaledger/twin-federated-catalogue/commit/a1a6348a6009939e1c784c35fd261ef306bbc59a))
47
+ * update DataspaceProtocolHelper.validate usage ([49eda69](https://github.com/iotaledger/twin-federated-catalogue/commit/49eda69073d0ef4cd88c0e01f5eee8a78e4195e4))
48
+ * update dependencies ([9534767](https://github.com/iotaledger/twin-federated-catalogue/commit/9534767b6aa85468ab5094512886246814edce9a))
49
+ * update dependencies ([24ff3d7](https://github.com/iotaledger/twin-federated-catalogue/commit/24ff3d772cf7bd7f60547c5b314355e75ba55424))
50
+ * update framework core ([68293b6](https://github.com/iotaledger/twin-federated-catalogue/commit/68293b68aaf594d51431b942fa91e7cf7020a8d7))
51
+ * update json-ld patterns ([172aff0](https://github.com/iotaledger/twin-federated-catalogue/commit/172aff07d0f0b780f72d1be3a4896bbf12f6173a))
52
+ * update node ([1429efa](https://github.com/iotaledger/twin-federated-catalogue/commit/1429efaf46e8b2b46a989847e3768ff5a5a8acc8))
53
+ * update schemas ([58d8581](https://github.com/iotaledger/twin-federated-catalogue/commit/58d85813231f6576490937d4394e7be0f6d8c58d))
54
+ * update to latest framework components ([aa30543](https://github.com/iotaledger/twin-federated-catalogue/commit/aa30543cef1309769d359d64fba0a85db490d69b))
55
+ * update to use new schemas ([41dae8d](https://github.com/iotaledger/twin-federated-catalogue/commit/41dae8d401dcea830b435aa35590e9c90a11eb1f))
56
+ * update ts-to-schema generation ([41bdde7](https://github.com/iotaledger/twin-federated-catalogue/commit/41bdde7ff9f0cfa1ea4376b7a952bbaed9988d0a))
57
+ * update twindev schemas ([88d2144](https://github.com/iotaledger/twin-federated-catalogue/commit/88d214432e9060e58f54d009bb3bbfb30da615e7))
58
+ * updates standards dependencies ([62f5d9c](https://github.com/iotaledger/twin-federated-catalogue/commit/62f5d9c6180bc27497ac43624ffd714e7ce65ce6))
59
+ * use new hosting url for cursor links ([e42c934](https://github.com/iotaledger/twin-federated-catalogue/commit/e42c934b9c8748ec5bdd4803c1cdc05c82ccace8))
60
+ * version 0 federated catalogue ([#2](https://github.com/iotaledger/twin-federated-catalogue/issues/2)) ([93fb8bd](https://github.com/iotaledger/twin-federated-catalogue/commit/93fb8bdbb03aa781ef9e8dc4053beea1b397cc36))
61
+
62
+
63
+ ### Bug Fixes
64
+
65
+ * allow CatalogRequestMessage without filter ([#72](https://github.com/iotaledger/twin-federated-catalogue/issues/72)) ([477343d](https://github.com/iotaledger/twin-federated-catalogue/commit/477343dd590150626c417a16705d5fa8bb96838f))
66
+ * bake organization id into object-form accessService endpoint URLs ([#88](https://github.com/iotaledger/twin-federated-catalogue/issues/88)) ([155d86d](https://github.com/iotaledger/twin-federated-catalogue/commit/155d86de7c416abf3c17a38fc3ac5969fd36449c))
67
+ * broken docs ([4588d86](https://github.com/iotaledger/twin-federated-catalogue/commit/4588d861575522da5374291167d57bacd1b21867))
68
+ * consistent naming of entity storage component in config ([1c1cb27](https://github.com/iotaledger/twin-federated-catalogue/commit/1c1cb274c5bca8cbe5f1da71b3dd4ddf52487001))
69
+ * context usage ([cd51790](https://github.com/iotaledger/twin-federated-catalogue/commit/cd51790ef97e14d21e89ef668b98477c163856bb))
70
+ * documentation ([2a4b24f](https://github.com/iotaledger/twin-federated-catalogue/commit/2a4b24f4d2c0da0087081bc459c5890ee4ddd5fa))
71
+ * linting ([df034b1](https://github.com/iotaledger/twin-federated-catalogue/commit/df034b11e78fed68f64dfe9406809d2365acdfb8))
72
+ * pagination and ld context ([#45](https://github.com/iotaledger/twin-federated-catalogue/issues/45)) ([e36f096](https://github.com/iotaledger/twin-federated-catalogue/commit/e36f096aa4fdc61eb5b929a0fc4403247dbd41ce))
73
+ * pass filter criteria object (not the array) to catalogue filter handlers ([#97](https://github.com/iotaledger/twin-federated-catalogue/issues/97)) ([6b0cd54](https://github.com/iotaledger/twin-federated-catalogue/commit/6b0cd54626a01910c2a1fb6af9e16027542e4824))
74
+ * query params force coercion ([a532329](https://github.com/iotaledger/twin-federated-catalogue/commit/a532329089b2b95c7f18cd8bd56ee47482755dc0))
75
+ * service logging constructor type ([35e63cc](https://github.com/iotaledger/twin-federated-catalogue/commit/35e63cc6a46769b32c817f43157233d9f05346da))
76
+ * service missing dependency ([48ff9f2](https://github.com/iotaledger/twin-federated-catalogue/commit/48ff9f26c54a10c6f9c83a11e07a12c1d4c11dd7))
77
+ * stop double-converting filter results in query, preserving dataset [@id](https://github.com/id) ([#75](https://github.com/iotaledger/twin-federated-catalogue/issues/75)) ([f071eda](https://github.com/iotaledger/twin-federated-catalogue/commit/f071eda0f5fc35270570cac7bd106b2bdf02e6e2))
78
+ * support extended fields ([#22](https://github.com/iotaledger/twin-federated-catalogue/issues/22)) ([46e6796](https://github.com/iotaledger/twin-federated-catalogue/commit/46e67967e501eb79cba05adcae59777ae2d4c301))
79
+ * tests now passing. Gaia-X direct references are removed ([#24](https://github.com/iotaledger/twin-federated-catalogue/issues/24)) ([845dfe3](https://github.com/iotaledger/twin-federated-catalogue/commit/845dfe312efe6069ba8487c926f029550a24fa84))
80
+ * transform GuardError to CatalogError for DS Protocol compliance ([#49](https://github.com/iotaledger/twin-federated-catalogue/issues/49)) ([d0f1090](https://github.com/iotaledger/twin-federated-catalogue/commit/d0f10900c251b9abc18e58c90562c393c3265727))
81
+ * use async getStore in tests ([1fe8654](https://github.com/iotaledger/twin-federated-catalogue/commit/1fe8654ecfb3437a4157fd63eb7fcb17bbee040b))
82
+
83
+
84
+ ### Dependencies
85
+
86
+ * The following workspace dependencies were updated
87
+ * dependencies
88
+ * @twin.org/federated-catalogue-models bumped from 0.9.1-next.0 to 0.9.1-next.1
89
+
3
90
  ## [0.9.0](https://github.com/iotaledger/twin-federated-catalogue/compare/federated-catalogue-service-v0.9.0...federated-catalogue-service-v0.9.0) (2026-06-25)
4
91
 
5
92
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/federated-catalogue-service",
3
- "version": "0.9.0",
3
+ "version": "0.9.1-next.2",
4
4
  "description": "Federated Catalogue contract implementation and REST endpoint definitions",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,24 +14,24 @@
14
14
  "node": ">=20.0.0"
15
15
  },
16
16
  "dependencies": {
17
- "@twin.org/api-models": "^0.9.0",
18
- "@twin.org/context": "^0.9.0",
19
- "@twin.org/core": "^0.9.0",
20
- "@twin.org/crypto": "^0.9.0",
21
- "@twin.org/data-json-ld": "^0.9.0",
22
- "@twin.org/entity": "^0.9.0",
23
- "@twin.org/entity-storage-models": "^0.9.0",
24
- "@twin.org/federated-catalogue-models": "^0.9.0",
25
- "@twin.org/logging-models": "^0.9.0",
26
- "@twin.org/nameof": "^0.9.0",
27
- "@twin.org/standards-dataspace-protocol": "^0.9.0",
28
- "@twin.org/standards-dublin-core": "^0.9.0",
29
- "@twin.org/standards-foaf": "^0.9.0",
30
- "@twin.org/standards-w3c-dcat": "^0.9.0",
31
- "@twin.org/telemetry-models": "^0.9.0",
32
- "@twin.org/trust-models": "^0.9.0",
33
- "@twin.org/vault-models": "^0.9.0",
34
- "@twin.org/web": "^0.9.0"
17
+ "@twin.org/api-models": "next",
18
+ "@twin.org/context": "next",
19
+ "@twin.org/core": "next",
20
+ "@twin.org/crypto": "next",
21
+ "@twin.org/data-json-ld": "next",
22
+ "@twin.org/entity": "next",
23
+ "@twin.org/entity-storage-models": "next",
24
+ "@twin.org/federated-catalogue-models": "0.9.1-next.2",
25
+ "@twin.org/logging-models": "next",
26
+ "@twin.org/nameof": "next",
27
+ "@twin.org/standards-dataspace-protocol": "next",
28
+ "@twin.org/standards-dublin-core": "next",
29
+ "@twin.org/standards-foaf": "next",
30
+ "@twin.org/standards-w3c-dcat": "next",
31
+ "@twin.org/telemetry-models": "next",
32
+ "@twin.org/trust-models": "next",
33
+ "@twin.org/vault-models": "next",
34
+ "@twin.org/web": "next"
35
35
  },
36
36
  "main": "./dist/es/index.js",
37
37
  "types": "./dist/types/index.d.ts",