@twin.org/dataspace-data-plane-service 0.0.3-next.47 → 0.0.3-next.48

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,7 @@
1
1
  // Copyright 2025 IOTA Stiftung.
2
2
  // SPDX-License-Identifier: Apache-2.0.
3
- import { HttpParameterHelper } from "@twin.org/api-models";
3
+ import { HttpContextIdKeys, HttpParameterHelper, HttpUrlHelper } from "@twin.org/api-models";
4
+ import { ContextIdStore } from "@twin.org/context";
4
5
  import { BaseError, Coerce, ComponentFactory, Guards, Is, UnprocessableError } from "@twin.org/core";
5
6
  import { ActivityProcessingStatus, ActivityTaskStatus } from "@twin.org/dataspace-models";
6
7
  import { HeaderHelper, HeaderTypes, HttpStatusCode, MimeTypes } from "@twin.org/web";
@@ -277,7 +278,6 @@ export async function getDataAssetEntities(httpRequestContext, factoryServiceNam
277
278
  Guards.object(ROUTES_SOURCE, "request.query", request.query);
278
279
  Guards.stringValue(ROUTES_SOURCE, "request.query.type", request.query.type);
279
280
  Guards.stringValue(ROUTES_SOURCE, "request.query.consumerPid", request.query.consumerPid);
280
- const hostingComponent = ComponentFactory.get(httpRequestContext.hostingComponentType ?? "hosting");
281
281
  const trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);
282
282
  const component = ComponentFactory.get(factoryServiceName);
283
283
  const result = await component.getDataAssetEntities({
@@ -286,7 +286,8 @@ export async function getDataAssetEntities(httpRequestContext, factoryServiceNam
286
286
  }, request.query.consumerPid, request.query.cursor, Coerce.integer(request.query.limit), trustPayload);
287
287
  const headers = {};
288
288
  if (Is.stringValue(result.cursor)) {
289
- headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(await hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url), { cursor: result.cursor }, "next");
289
+ const contextIds = await ContextIdStore.getContextIds();
290
+ headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(HttpUrlHelper.replaceOrigin(httpRequestContext.serverRequest.url, contextIds?.[HttpContextIdKeys.PublicOrigin]), { cursor: result.cursor }, "next");
290
291
  }
291
292
  return {
292
293
  headers,
@@ -307,13 +308,13 @@ export async function queryDataAsset(httpRequestContext, factoryServiceName, req
307
308
  Guards.object(ROUTES_SOURCE, "request.body.query", request.body.query);
308
309
  Guards.string(ROUTES_SOURCE, "request.body.query.type", request.body.query.type);
309
310
  Guards.string(ROUTES_SOURCE, "request.body.query.q", request.body.query.q);
310
- const hostingComponent = ComponentFactory.get(httpRequestContext.hostingComponentType ?? "hosting");
311
311
  const trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);
312
312
  const component = ComponentFactory.get(factoryServiceName);
313
313
  const result = await component.queryDataAsset(request.body.consumerPid, request.body.query, request.query?.cursor, Coerce.integer(request.query?.limit), trustPayload);
314
314
  const headers = {};
315
315
  if (Is.stringValue(result.cursor)) {
316
- headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(await hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url), { cursor: result.cursor }, "next");
316
+ const contextIds = await ContextIdStore.getContextIds();
317
+ headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(HttpUrlHelper.replaceOrigin(httpRequestContext.serverRequest.url, contextIds?.[HttpContextIdKeys.PublicOrigin]), { cursor: result.cursor }, "next");
317
318
  }
318
319
  return {
319
320
  headers,
@@ -1 +1 @@
1
- {"version":3,"file":"dataspaceDataPlaneRoutes.js","sourceRoot":"","sources":["../../src/dataspaceDataPlaneRoutes.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EACN,mBAAmB,EAKnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,MAAM,EACN,EAAE,EACF,kBAAkB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,wBAAwB,EACxB,kBAAkB,EAYlB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAErF;;GAEG;AACH,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAW;IAC7C;QACC,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,6CAA6C;KAC1D;CACD,CAAC;AAEF,MAAM,eAAe,GAA6B;IACjD,UAAU,EAAE,uCAAuC;IACnD,IAAI,EAAE,KAAK;IACX,KAAK,EAAE;QACN,EAAE,EAAE,2BAA2B;KAC/B;IACD,MAAM,EAAE;QACP,UAAU,EAAE,iCAAiC;QAC7C,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,0BAA0B;KACpC;IACD,OAAO,EAAE,sBAAsB;CAC/B,CAAC;AAEF,MAAM,uBAAuB,GAAsB;IAClD,EAAE,EAAE,2BAA2B;IAC/B,WAAW,EAAE,sBAAsB;IACnC,YAAY,EAAE,sBAAsB;IACpC,SAAS,EAAE,yBAAyB;IACpC,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE;QACN;YACC,MAAM,EAAE,qBAAqB;YAC7B,cAAc,EAAE,iCAAiC;YACjD,MAAM,EAAE,SAAS;SACjB;KACD;CACD,CAAC;AAEF,MAAM,oCAAoC,GAAuB;IAChE,UAAU,EAAE,oBAAoB;IAChC,IAAI,EAAE,UAAU;IAChB,eAAe,EAAE;QAChB;YACC,UAAU,EAAE,2DAA2D;YACvE,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,2BAA2B;SAC/B;KACD;CACD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,oCAAoC,CACnD,aAAqB,EACrB,kBAA0B;IAE1B,MAAM,yBAAyB,GAG3B;QACH,WAAW,EAAE,sBAAsB;QACnC,OAAO,EAAE,0BAA0B;QACnC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG,aAAa,QAAQ;QAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,oBAAoB,CAAC,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,CAAC;QACrF,WAAW,EAAE;YACZ,QAAQ,EAAE,SAAS,CAAC,MAAM;YAC1B,IAAI,gCAAwC;YAC5C,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,oCAAoC;oBACxC,OAAO,EAAE;wBACR,IAAI,EAAE,eAAe;qBACrB;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,iCAAyC;aAC7C;SACD;QACD,qFAAqF;QACrF,8EAA8E;QAC9E,iFAAiF;QACjF,wDAAwD;QACxD,QAAQ,EAAE,IAAI;KACd,CAAC;IAEF,MAAM,wBAAwB,GAG1B;QACH,WAAW,EAAE,uCAAuC;QACpD,OAAO,EAAE,0BAA0B;QACnC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,aAAa,oBAAoB;QAC1C,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,mBAAmB,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,CAAC;QACrE,WAAW,EAAE;YACZ,IAAI,+BAAuC;YAC3C,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,mCAAmC;oBACvC,OAAO,EAAE;wBACR,UAAU,EAAE;4BACX,EAAE,EAAE,4BAA4B;yBAChC;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,gCAAwC;gBAC5C,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,oCAAoC;wBACxC,QAAQ,EAAE;4BACT,IAAI,EAAE,EAAE,GAAG,uBAAuB,EAAE;yBACpC;qBACD;iBACD;aACD;SACD;QACD,QAAQ,EAAE,IAAI;KACd,CAAC;IAEF,MAAM,yBAAyB,GAG3B;QACH,WAAW,EAAE,wCAAwC;QACrD,OAAO,EAAE,yBAAyB;QAClC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,aAAa,WAAW;QACjC,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,oBAAoB,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,CAAC;QACtE,WAAW,EAAE;YACZ,IAAI,gCAAwC;YAC5C,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,oCAAoC;oBACxC,OAAO,EAAE;wBACR,KAAK,EAAE;4BACN,WAAW,EAAE,6BAA6B;4BAC1C,EAAE,EAAE,wCAAwC;4BAC5C,IAAI,EAAE,6CAA6C;yBACnD;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,8BAAsC;gBAC1C,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,qCAAqC;wBACzC,QAAQ,EAAE;4BACT,IAAI,EAAE,EAAE,GAAG,oCAAoC,EAAE;yBACjD;qBACD;iBACD;aACD;SACD;QACD,QAAQ,EAAE,IAAI;KACd,CAAC;IAEF,MAAM,mBAAmB,GAAmE;QAC3F,WAAW,EAAE,kCAAkC;QAC/C,OAAO,EAAE,kBAAkB;QAC3B,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG,aAAa,iBAAiB;QACvC,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,cAAc,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,CAAC;QAChE,WAAW,EAAE;YACZ,IAAI,0BAAkC;YACtC,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,8BAA8B;oBAClC,OAAO,EAAE;wBACR,IAAI,EAAE;4BACL,WAAW,EAAE,6BAA6B;4BAC1C,KAAK,EAAE;gCACN,IAAI,EAAE,SAAS;gCACf,CAAC,EAAE,eAAe;6BAClB;yBACD;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,8BAAsC;gBAC1C,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,+BAA+B;wBACnC,QAAQ,EAAE;4BACT,IAAI,EAAE,EAAE,GAAG,oCAAoC,EAAE;yBACjD;qBACD;iBACD;aACD;SACD;QACD,QAAQ,EAAE,IAAI;KACd,CAAC;IAEF,OAAO;QACN,yBAAyB;QACzB,wBAAwB;QACxB,yBAAyB;QACzB,mBAAmB;KACnB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,aAAqB,EACrB,kBAAuC,EACvC,kBAA0B,EAC1B,OAAqC;IAErC,MAAM,CAAC,MAAM,CAA+B,aAAa,aAAmB,OAAO,CAAC,CAAC;IACrF,MAAM,CAAC,MAAM,CAA2B,aAAa,kBAAwB,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3F,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,kBAAkB,CAAC,CAAC;IAEzF,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9F,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAE1E,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO;YACN,OAAO,EAAE;gBACR,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,GAAG,aAAa,kBAAkB,MAAM,EAAE;aAClE;YACD,UAAU,EAAE,cAAc,CAAC,QAAQ;SACnC,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAmB,cAAc,CAAC,OAAO,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,wBAAwB,CAAC,KAAK,EAAE,CAAC;QACtD,MAAM,YAAY,GACjB,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/E,MAAM,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtD,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAClE,CAAC;QACF,UAAU,GAAG,qBAAqB;YACjC,CAAC,CAAC,cAAc,CAAC,mBAAmB;YACpC,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC;IACvC,CAAC;IAED,OAAO;QACN,OAAO,EAAE;YACR,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,GAAG,aAAa,kBAAkB,MAAM,CAAC,EAAE,EAAE;SACrE;QACD,UAAU;QACV,IAAI,EAAE,MAAM;KACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,kBAAuC,EACvC,kBAA0B,EAC1B,OAAoC;IAEpC,MAAM,CAAC,MAAM,CAA8B,aAAa,aAAmB,OAAO,CAAC,CAAC;IACpF,MAAM,CAAC,MAAM,CACZ,aAAa,wBAEb,OAAO,CAAC,UAAU,CAClB,CAAC;IACF,MAAM,CAAC,WAAW,CAAC,aAAa,2BAAiC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAExF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,kBAAkB,CAAC,CAAC;IAEzF,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;IAE9F,OAAO;QACN,IAAI,EAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC;KAC9E,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,kBAAuC,EACvC,kBAA0B,EAC1B,OAAqC;IAErC,MAAM,CAAC,MAAM,CAA+B,aAAa,aAAmB,OAAO,CAAC,CAAC;IACrF,MAAM,CAAC,MAAM,CACZ,aAAa,mBAEb,OAAO,CAAC,KAAK,CACb,CAAC;IACF,MAAM,CAAC,WAAW,CAAC,aAAa,wBAA8B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,CAAC,aAAa,+BAAqC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEhG,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAC5C,kBAAkB,CAAC,oBAAoB,IAAI,SAAS,CACpD,CAAC;IAEF,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;IAE9F,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,kBAAkB,CAAC,CAAC;IAEzF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAClD;QACC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;QAC9B,QAAQ,EAAE,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;KAC/D,EACD,OAAO,CAAC,KAAK,CAAC,WAAW,EACzB,OAAO,CAAC,KAAK,CAAC,MAAM,EACpB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EACnC,YAAY,CACZ,CAAC;IAEF,MAAM,OAAO,GAA0C,EAAE,CAAC;IAE1D,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,gBAAgB,CACxD,MAAM,gBAAgB,CAAC,cAAc,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,EAC3E,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EACzB,MAAM,CACN,CAAC;IACH,CAAC;IAED,OAAO;QACN,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,QAAQ;KACrB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,kBAAuC,EACvC,kBAA0B,EAC1B,OAA+B;IAE/B,MAAM,CAAC,MAAM,CAAyB,aAAa,aAAmB,OAAO,CAAC,CAAC;IAC/E,MAAM,CAAC,MAAM,CAAiC,aAAa,kBAAwB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjG,MAAM,CAAC,WAAW,CAAC,aAAa,8BAAoC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE9F,MAAM,CAAC,MAAM,CAAkB,aAAa,wBAA8B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9F,MAAM,CAAC,MAAM,CAAC,aAAa,6BAAmC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvF,MAAM,CAAC,MAAM,CAAC,aAAa,0BAAgC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAC5C,kBAAkB,CAAC,oBAAoB,IAAI,SAAS,CACpD,CAAC;IAEF,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;IAE9F,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,kBAAkB,CAAC,CAAC;IAEzF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,cAAc,CAC5C,OAAO,CAAC,IAAI,CAAC,WAAW,EACxB,OAAO,CAAC,IAAI,CAAC,KAAK,EAClB,OAAO,CAAC,KAAK,EAAE,MAAM,EACrB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EACpC,YAAY,CACZ,CAAC;IAEF,MAAM,OAAO,GAA0C,EAAE,CAAC;IAE1D,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,gBAAgB,CACxD,MAAM,gBAAgB,CAAC,cAAc,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,EAC3E,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EACzB,MAAM,CACN,CAAC;IACH,CAAC;IAED,OAAO;QACN,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,QAAQ;KACrB,CAAC;AACH,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHttpParameterHelper,\n\ttype IHostingComponent,\n\ttype IHttpRequestContext,\n\ttype IRestRoute,\n\ttype ITag\n} from \"@twin.org/api-models\";\nimport {\n\tBaseError,\n\tCoerce,\n\tComponentFactory,\n\tGuards,\n\tIs,\n\tUnprocessableError\n} from \"@twin.org/core\";\nimport {\n\tActivityProcessingStatus,\n\tActivityTaskStatus,\n\ttype IActivityLogEntry,\n\ttype IActivityLogEntryGetRequest,\n\ttype IActivityLogEntryGetResponse,\n\ttype IActivityStreamNotifyRequest,\n\ttype IActivityStreamNotifyResponse,\n\ttype IDataAssetEntitiesResponse,\n\ttype IDataAssetGetEntitiesRequest,\n\ttype IDataAssetItemList,\n\ttype IDataAssetQueryRequest,\n\ttype IDataspaceDataPlaneComponent,\n\ttype IFilteringQuery\n} from \"@twin.org/dataspace-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IActivityStreamsActivity } from \"@twin.org/standards-w3c-activity-streams\";\nimport { HeaderHelper, HeaderTypes, HttpStatusCode, MimeTypes } from \"@twin.org/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"dataspaceDataPlaneRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsDataspaceDataPlane: ITag[] = [\n\t{\n\t\tname: \"Dataspace Data Plane\",\n\t\tdescription: \"Endpoints to access a Dataspace Data Plane.\"\n\t}\n];\n\nconst activityExample: IActivityStreamsActivity = {\n\t\"@context\": \"https://www.w3.org/ns/activitystreams\",\n\ttype: \"Add\",\n\tactor: {\n\t\tid: \"did:iota:testnet:0x123456\"\n\t},\n\tobject: {\n\t\t\"@context\": \"https://vocabulary.uncefact.org\",\n\t\t\"@type\": \"Consignment\",\n\t\tglobalId: \"24KEP051219453I002610796\"\n\t},\n\tupdated: \"2025-08-12T12:00:00Z\"\n};\n\nconst activityLogEntryExample: IActivityLogEntry = {\n\tid: \"urn:x-activity-log:134567\",\n\tdateCreated: \"2025-08-12T12:00:00Z\",\n\tdateModified: \"2025-08-12T12:00:00Z\",\n\tgenerator: \"did:iota:testnet:123456\",\n\tstatus: \"pending\",\n\ttasks: [\n\t\t{\n\t\t\ttaskId: \"urn:x-task-id:45678\",\n\t\t\tdataspaceAppId: \"https://my-app.example.org/app1\",\n\t\t\tstatus: \"pending\"\n\t\t}\n\t]\n};\n\nconst dataspaceDataPlaneQueryResultExample: IDataAssetItemList = {\n\t\"@context\": \"https://schema.org\",\n\ttype: \"ItemList\",\n\titemListElement: [\n\t\t{\n\t\t\t\"@context\": \"https://vocabulary.uncefact.org/unece-context-D23B.jsonld\",\n\t\t\ttype: \"Consignment\",\n\t\t\tid: \"urn:ucr:PL527288386100000\"\n\t\t}\n\t]\n};\n\n/**\n * The REST routes for Dataspace Data Plane.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param factoryServiceName The name of the service to use in the routes store in the ServiceFactory.\n * @returns The generated routes.\n */\nexport function generateRestRoutesDataspaceDataPlane(\n\tbaseRouteName: string,\n\tfactoryServiceName: string\n): IRestRoute[] {\n\tconst notifyActivityStreamRoute: IRestRoute<\n\t\tIActivityStreamNotifyRequest,\n\t\tIActivityStreamNotifyResponse\n\t> = {\n\t\toperationId: \"activityStreamNotify\",\n\t\tsummary: \"Notify of a new Activity\",\n\t\ttag: tagsDataspaceDataPlane[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/inbox`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tactivityStreamNotify(baseRouteName, httpRequestContext, factoryServiceName, request),\n\t\trequestType: {\n\t\t\tmimeType: MimeTypes.JsonLd,\n\t\t\ttype: nameof<IActivityStreamNotifyRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"activityStreamNotifyRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: activityExample\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<IActivityStreamNotifyResponse>()\n\t\t\t}\n\t\t],\n\t\t// Cross-node push deliveries authenticate via JWT-VC verified inside notifyActivity.\n\t\t// Skip framework auth so external providers can POST without a session token.\n\t\t// Tenant context is required and comes from the URL-baked encrypted tenant token\n\t\t// (decoded by TenantProcessor before the handler runs).\n\t\tskipAuth: true\n\t};\n\n\tconst getActivityLogEntryRoute: IRestRoute<\n\t\tIActivityLogEntryGetRequest,\n\t\tIActivityLogEntryGetResponse\n\t> = {\n\t\toperationId: \"dataspaceDataPlaneGetActivityLogEntry\",\n\t\tsummary: \"Get a Activity Log Entry\",\n\t\ttag: tagsDataspaceDataPlane[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/activity-logs/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tactivityLogEntryGet(httpRequestContext, factoryServiceName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IActivityLogEntryGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"activityLogEntryGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"urn:x-activity-log:1234567\"\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<IActivityLogEntryGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"activityLogEntryGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: { ...activityLogEntryExample }\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};\n\n\tconst getDataAssetEntitiesRoute: IRestRoute<\n\t\tIDataAssetGetEntitiesRequest,\n\t\tIDataAssetEntitiesResponse\n\t> = {\n\t\toperationId: \"dataspaceDataPlaneGetDataAssetEntities\",\n\t\tsummary: \"Get Data Asset Entities\",\n\t\ttag: tagsDataspaceDataPlane[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/entities`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tgetDataAssetEntities(httpRequestContext, factoryServiceName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDataAssetGetEntitiesRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"dataAssetEntitiesGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tconsumerPid: \"urn:uuid:consumer-pid-12345\",\n\t\t\t\t\t\t\tid: \"urn:ucr:24PLP051219453I002610799053311\",\n\t\t\t\t\t\t\ttype: \"https://vocabulary.uncefact.org/Consignment\"\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<IDataAssetEntitiesResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"dataAssetEntitiesGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: { ...dataspaceDataPlaneQueryResultExample }\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};\n\n\tconst queryDataAssetRoute: IRestRoute<IDataAssetQueryRequest, IDataAssetEntitiesResponse> = {\n\t\toperationId: \"dataspaceDataPlaneQueryDataAsset\",\n\t\tsummary: \"Query Data Asset\",\n\t\ttag: tagsDataspaceDataPlane[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/entities/query`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tqueryDataAsset(httpRequestContext, factoryServiceName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDataAssetQueryRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"dataAssetQueryRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tconsumerPid: \"urn:uuid:consumer-pid-12345\",\n\t\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\t\ttype: \"Example\",\n\t\t\t\t\t\t\t\tq: \"example query\"\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\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDataAssetEntitiesResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"dataAssetQueryResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: { ...dataspaceDataPlaneQueryResultExample }\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};\n\n\treturn [\n\t\tnotifyActivityStreamRoute,\n\t\tgetActivityLogEntryRoute,\n\t\tgetDataAssetEntitiesRoute,\n\t\tqueryDataAssetRoute\n\t];\n}\n\n/**\n * Notify a new Activity to the Dataspace Data Plane Activity Stream.\n * @param baseRouteName The base route name.\n * @param httpRequestContext The request context for the API.\n * @param factoryServiceName The name of the service to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function activityStreamNotify(\n\tbaseRouteName: string,\n\thttpRequestContext: IHttpRequestContext,\n\tfactoryServiceName: string,\n\trequest: IActivityStreamNotifyRequest\n): Promise<IActivityStreamNotifyResponse> {\n\tGuards.object<IActivityStreamNotifyRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IActivityStreamsActivity>(ROUTES_SOURCE, nameof(request.body), request.body);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(factoryServiceName);\n\n\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\tconst result = await component.notifyActivity(request.body, trustPayload);\n\n\tif (Is.string(result)) {\n\t\treturn {\n\t\t\theaders: {\n\t\t\t\t[HeaderTypes.Location]: `${baseRouteName}/activity-logs/${result}`\n\t\t\t},\n\t\t\tstatusCode: HttpStatusCode.accepted\n\t\t};\n\t}\n\n\tlet statusCode: HttpStatusCode = HttpStatusCode.created;\n\tif (result.status === ActivityProcessingStatus.Error) {\n\t\tconst failedErrors =\n\t\t\tresult.tasks?.filter(task => task.status === ActivityTaskStatus.Failed) ?? [];\n\t\tconst hasUnprocessableError = failedErrors.some(task =>\n\t\t\tBaseError.someErrorName(task.error, UnprocessableError.CLASS_NAME)\n\t\t);\n\t\tstatusCode = hasUnprocessableError\n\t\t\t? HttpStatusCode.unprocessableEntity\n\t\t\t: HttpStatusCode.internalServerError;\n\t}\n\n\treturn {\n\t\theaders: {\n\t\t\t[HeaderTypes.Location]: `${baseRouteName}/activity-logs/${result.id}`\n\t\t},\n\t\tstatusCode,\n\t\tbody: result\n\t};\n}\n\n/**\n * Get an Activity Log entry.\n * @param httpRequestContext The request context for the API.\n * @param factoryServiceName The name of the service to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function activityLogEntryGet(\n\thttpRequestContext: IHttpRequestContext,\n\tfactoryServiceName: string,\n\trequest: IActivityLogEntryGetRequest\n): Promise<IActivityLogEntryGetResponse> {\n\tGuards.object<IActivityLogEntryGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IActivityLogEntryGetRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.pathParams.id), request.pathParams.id);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(factoryServiceName);\n\n\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\treturn {\n\t\tbody: await component.getActivityLogEntry(request.pathParams.id, trustPayload)\n\t};\n}\n\n/**\n * Handles a request to obtain the entities of a data asset.\n * @param httpRequestContext The request Context.\n * @param factoryServiceName The factory service name\n * @param request The request.\n * @returns Either the entities as JSON-LD or the corresponding error response.\n */\nexport async function getDataAssetEntities(\n\thttpRequestContext: IHttpRequestContext,\n\tfactoryServiceName: string,\n\trequest: IDataAssetGetEntitiesRequest\n): Promise<IDataAssetEntitiesResponse> {\n\tGuards.object<IDataAssetGetEntitiesRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDataAssetGetEntitiesRequest[\"query\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.query),\n\t\trequest.query\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.query.type), request.query.type);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.query.consumerPid), request.query.consumerPid);\n\n\tconst hostingComponent = ComponentFactory.get<IHostingComponent>(\n\t\thttpRequestContext.hostingComponentType ?? \"hosting\"\n\t);\n\n\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(factoryServiceName);\n\n\tconst result = await component.getDataAssetEntities(\n\t\t{\n\t\t\tentityType: request.query.type,\n\t\t\tentityId: HttpParameterHelper.arrayFromString(request.query.id)\n\t\t},\n\t\trequest.query.consumerPid,\n\t\trequest.query.cursor,\n\t\tCoerce.integer(request.query.limit),\n\t\ttrustPayload\n\t);\n\n\tconst headers: IDataAssetEntitiesResponse[\"headers\"] = {};\n\n\tif (Is.stringValue(result.cursor)) {\n\t\theaders[HeaderTypes.Link] = HeaderHelper.createLinkHeader(\n\t\t\tawait hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url),\n\t\t\t{ cursor: result.cursor },\n\t\t\t\"next\"\n\t\t);\n\t}\n\n\treturn {\n\t\theaders,\n\t\tbody: result.itemList\n\t};\n}\n\n/**\n * Handles a request to query a data asset.\n * @param httpRequestContext The request Context.\n * @param factoryServiceName The factory service name\n * @param request The request.\n * @returns Either the entities as JSON-LD or the corresponding error response.\n */\nexport async function queryDataAsset(\n\thttpRequestContext: IHttpRequestContext,\n\tfactoryServiceName: string,\n\trequest: IDataAssetQueryRequest\n): Promise<IDataAssetEntitiesResponse> {\n\tGuards.object<IDataAssetQueryRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDataAssetQueryRequest[\"body\"]>(ROUTES_SOURCE, nameof(request.body), request.body);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.body.consumerPid), request.body.consumerPid);\n\n\tGuards.object<IFilteringQuery>(ROUTES_SOURCE, nameof(request.body.query), request.body.query);\n\tGuards.string(ROUTES_SOURCE, nameof(request.body.query.type), request.body.query.type);\n\tGuards.string(ROUTES_SOURCE, nameof(request.body.query.q), request.body.query.q);\n\n\tconst hostingComponent = ComponentFactory.get<IHostingComponent>(\n\t\thttpRequestContext.hostingComponentType ?? \"hosting\"\n\t);\n\n\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(factoryServiceName);\n\n\tconst result = await component.queryDataAsset(\n\t\trequest.body.consumerPid,\n\t\trequest.body.query,\n\t\trequest.query?.cursor,\n\t\tCoerce.integer(request.query?.limit),\n\t\ttrustPayload\n\t);\n\n\tconst headers: IDataAssetEntitiesResponse[\"headers\"] = {};\n\n\tif (Is.stringValue(result.cursor)) {\n\t\theaders[HeaderTypes.Link] = HeaderHelper.createLinkHeader(\n\t\t\tawait hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url),\n\t\t\t{ cursor: result.cursor },\n\t\t\t\"next\"\n\t\t);\n\t}\n\n\treturn {\n\t\theaders,\n\t\tbody: result.itemList\n\t};\n}\n"]}
1
+ {"version":3,"file":"dataspaceDataPlaneRoutes.js","sourceRoot":"","sources":["../../src/dataspaceDataPlaneRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHttpContextIdKeys,\n\tHttpParameterHelper,\n\tHttpUrlHelper,\n\ttype IHttpRequestContext,\n\ttype IRestRoute,\n\ttype ITag\n} from \"@twin.org/api-models\";\nimport { ContextIdStore } from \"@twin.org/context\";\nimport {\n\tBaseError,\n\tCoerce,\n\tComponentFactory,\n\tGuards,\n\tIs,\n\tUnprocessableError\n} from \"@twin.org/core\";\nimport {\n\tActivityProcessingStatus,\n\tActivityTaskStatus,\n\ttype IActivityLogEntry,\n\ttype IActivityLogEntryGetRequest,\n\ttype IActivityLogEntryGetResponse,\n\ttype IActivityStreamNotifyRequest,\n\ttype IActivityStreamNotifyResponse,\n\ttype IDataAssetEntitiesResponse,\n\ttype IDataAssetGetEntitiesRequest,\n\ttype IDataAssetItemList,\n\ttype IDataAssetQueryRequest,\n\ttype IDataspaceDataPlaneComponent,\n\ttype IFilteringQuery\n} from \"@twin.org/dataspace-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { IActivityStreamsActivity } from \"@twin.org/standards-w3c-activity-streams\";\nimport { HeaderHelper, HeaderTypes, HttpStatusCode, MimeTypes } from \"@twin.org/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"dataspaceDataPlaneRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsDataspaceDataPlane: ITag[] = [\n\t{\n\t\tname: \"Dataspace Data Plane\",\n\t\tdescription: \"Endpoints to access a Dataspace Data Plane.\"\n\t}\n];\n\nconst activityExample: IActivityStreamsActivity = {\n\t\"@context\": \"https://www.w3.org/ns/activitystreams\",\n\ttype: \"Add\",\n\tactor: {\n\t\tid: \"did:iota:testnet:0x123456\"\n\t},\n\tobject: {\n\t\t\"@context\": \"https://vocabulary.uncefact.org\",\n\t\t\"@type\": \"Consignment\",\n\t\tglobalId: \"24KEP051219453I002610796\"\n\t},\n\tupdated: \"2025-08-12T12:00:00Z\"\n};\n\nconst activityLogEntryExample: IActivityLogEntry = {\n\tid: \"urn:x-activity-log:134567\",\n\tdateCreated: \"2025-08-12T12:00:00Z\",\n\tdateModified: \"2025-08-12T12:00:00Z\",\n\tgenerator: \"did:iota:testnet:123456\",\n\tstatus: \"pending\",\n\ttasks: [\n\t\t{\n\t\t\ttaskId: \"urn:x-task-id:45678\",\n\t\t\tdataspaceAppId: \"https://my-app.example.org/app1\",\n\t\t\tstatus: \"pending\"\n\t\t}\n\t]\n};\n\nconst dataspaceDataPlaneQueryResultExample: IDataAssetItemList = {\n\t\"@context\": \"https://schema.org\",\n\ttype: \"ItemList\",\n\titemListElement: [\n\t\t{\n\t\t\t\"@context\": \"https://vocabulary.uncefact.org/unece-context-D23B.jsonld\",\n\t\t\ttype: \"Consignment\",\n\t\t\tid: \"urn:ucr:PL527288386100000\"\n\t\t}\n\t]\n};\n\n/**\n * The REST routes for Dataspace Data Plane.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param factoryServiceName The name of the service to use in the routes store in the ServiceFactory.\n * @returns The generated routes.\n */\nexport function generateRestRoutesDataspaceDataPlane(\n\tbaseRouteName: string,\n\tfactoryServiceName: string\n): IRestRoute[] {\n\tconst notifyActivityStreamRoute: IRestRoute<\n\t\tIActivityStreamNotifyRequest,\n\t\tIActivityStreamNotifyResponse\n\t> = {\n\t\toperationId: \"activityStreamNotify\",\n\t\tsummary: \"Notify of a new Activity\",\n\t\ttag: tagsDataspaceDataPlane[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/inbox`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tactivityStreamNotify(baseRouteName, httpRequestContext, factoryServiceName, request),\n\t\trequestType: {\n\t\t\tmimeType: MimeTypes.JsonLd,\n\t\t\ttype: nameof<IActivityStreamNotifyRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"activityStreamNotifyRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: activityExample\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<IActivityStreamNotifyResponse>()\n\t\t\t}\n\t\t],\n\t\t// Cross-node push deliveries authenticate via JWT-VC verified inside notifyActivity.\n\t\t// Skip framework auth so external providers can POST without a session token.\n\t\t// Tenant context is required and comes from the URL-baked encrypted tenant token\n\t\t// (decoded by TenantProcessor before the handler runs).\n\t\tskipAuth: true\n\t};\n\n\tconst getActivityLogEntryRoute: IRestRoute<\n\t\tIActivityLogEntryGetRequest,\n\t\tIActivityLogEntryGetResponse\n\t> = {\n\t\toperationId: \"dataspaceDataPlaneGetActivityLogEntry\",\n\t\tsummary: \"Get a Activity Log Entry\",\n\t\ttag: tagsDataspaceDataPlane[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/activity-logs/:id`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tactivityLogEntryGet(httpRequestContext, factoryServiceName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IActivityLogEntryGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"activityLogEntryGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tid: \"urn:x-activity-log:1234567\"\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<IActivityLogEntryGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"activityLogEntryGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: { ...activityLogEntryExample }\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};\n\n\tconst getDataAssetEntitiesRoute: IRestRoute<\n\t\tIDataAssetGetEntitiesRequest,\n\t\tIDataAssetEntitiesResponse\n\t> = {\n\t\toperationId: \"dataspaceDataPlaneGetDataAssetEntities\",\n\t\tsummary: \"Get Data Asset Entities\",\n\t\ttag: tagsDataspaceDataPlane[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/entities`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tgetDataAssetEntities(httpRequestContext, factoryServiceName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDataAssetGetEntitiesRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"dataAssetEntitiesGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tconsumerPid: \"urn:uuid:consumer-pid-12345\",\n\t\t\t\t\t\t\tid: \"urn:ucr:24PLP051219453I002610799053311\",\n\t\t\t\t\t\t\ttype: \"https://vocabulary.uncefact.org/Consignment\"\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<IDataAssetEntitiesResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"dataAssetEntitiesGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: { ...dataspaceDataPlaneQueryResultExample }\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};\n\n\tconst queryDataAssetRoute: IRestRoute<IDataAssetQueryRequest, IDataAssetEntitiesResponse> = {\n\t\toperationId: \"dataspaceDataPlaneQueryDataAsset\",\n\t\tsummary: \"Query Data Asset\",\n\t\ttag: tagsDataspaceDataPlane[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/entities/query`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tqueryDataAsset(httpRequestContext, factoryServiceName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDataAssetQueryRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"dataAssetQueryRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tconsumerPid: \"urn:uuid:consumer-pid-12345\",\n\t\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\t\ttype: \"Example\",\n\t\t\t\t\t\t\t\tq: \"example query\"\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\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDataAssetEntitiesResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"dataAssetQueryResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: { ...dataspaceDataPlaneQueryResultExample }\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};\n\n\treturn [\n\t\tnotifyActivityStreamRoute,\n\t\tgetActivityLogEntryRoute,\n\t\tgetDataAssetEntitiesRoute,\n\t\tqueryDataAssetRoute\n\t];\n}\n\n/**\n * Notify a new Activity to the Dataspace Data Plane Activity Stream.\n * @param baseRouteName The base route name.\n * @param httpRequestContext The request context for the API.\n * @param factoryServiceName The name of the service to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function activityStreamNotify(\n\tbaseRouteName: string,\n\thttpRequestContext: IHttpRequestContext,\n\tfactoryServiceName: string,\n\trequest: IActivityStreamNotifyRequest\n): Promise<IActivityStreamNotifyResponse> {\n\tGuards.object<IActivityStreamNotifyRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IActivityStreamsActivity>(ROUTES_SOURCE, nameof(request.body), request.body);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(factoryServiceName);\n\n\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\tconst result = await component.notifyActivity(request.body, trustPayload);\n\n\tif (Is.string(result)) {\n\t\treturn {\n\t\t\theaders: {\n\t\t\t\t[HeaderTypes.Location]: `${baseRouteName}/activity-logs/${result}`\n\t\t\t},\n\t\t\tstatusCode: HttpStatusCode.accepted\n\t\t};\n\t}\n\n\tlet statusCode: HttpStatusCode = HttpStatusCode.created;\n\tif (result.status === ActivityProcessingStatus.Error) {\n\t\tconst failedErrors =\n\t\t\tresult.tasks?.filter(task => task.status === ActivityTaskStatus.Failed) ?? [];\n\t\tconst hasUnprocessableError = failedErrors.some(task =>\n\t\t\tBaseError.someErrorName(task.error, UnprocessableError.CLASS_NAME)\n\t\t);\n\t\tstatusCode = hasUnprocessableError\n\t\t\t? HttpStatusCode.unprocessableEntity\n\t\t\t: HttpStatusCode.internalServerError;\n\t}\n\n\treturn {\n\t\theaders: {\n\t\t\t[HeaderTypes.Location]: `${baseRouteName}/activity-logs/${result.id}`\n\t\t},\n\t\tstatusCode,\n\t\tbody: result\n\t};\n}\n\n/**\n * Get an Activity Log entry.\n * @param httpRequestContext The request context for the API.\n * @param factoryServiceName The name of the service to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function activityLogEntryGet(\n\thttpRequestContext: IHttpRequestContext,\n\tfactoryServiceName: string,\n\trequest: IActivityLogEntryGetRequest\n): Promise<IActivityLogEntryGetResponse> {\n\tGuards.object<IActivityLogEntryGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IActivityLogEntryGetRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.pathParams.id), request.pathParams.id);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(factoryServiceName);\n\n\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\treturn {\n\t\tbody: await component.getActivityLogEntry(request.pathParams.id, trustPayload)\n\t};\n}\n\n/**\n * Handles a request to obtain the entities of a data asset.\n * @param httpRequestContext The request Context.\n * @param factoryServiceName The factory service name\n * @param request The request.\n * @returns Either the entities as JSON-LD or the corresponding error response.\n */\nexport async function getDataAssetEntities(\n\thttpRequestContext: IHttpRequestContext,\n\tfactoryServiceName: string,\n\trequest: IDataAssetGetEntitiesRequest\n): Promise<IDataAssetEntitiesResponse> {\n\tGuards.object<IDataAssetGetEntitiesRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDataAssetGetEntitiesRequest[\"query\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.query),\n\t\trequest.query\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.query.type), request.query.type);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.query.consumerPid), request.query.consumerPid);\n\n\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(factoryServiceName);\n\n\tconst result = await component.getDataAssetEntities(\n\t\t{\n\t\t\tentityType: request.query.type,\n\t\t\tentityId: HttpParameterHelper.arrayFromString(request.query.id)\n\t\t},\n\t\trequest.query.consumerPid,\n\t\trequest.query.cursor,\n\t\tCoerce.integer(request.query.limit),\n\t\ttrustPayload\n\t);\n\n\tconst headers: IDataAssetEntitiesResponse[\"headers\"] = {};\n\n\tif (Is.stringValue(result.cursor)) {\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\theaders[HeaderTypes.Link] = HeaderHelper.createLinkHeader(\n\t\t\tHttpUrlHelper.replaceOrigin(\n\t\t\t\thttpRequestContext.serverRequest.url,\n\t\t\t\tcontextIds?.[HttpContextIdKeys.PublicOrigin]\n\t\t\t),\n\t\t\t{ cursor: result.cursor },\n\t\t\t\"next\"\n\t\t);\n\t}\n\n\treturn {\n\t\theaders,\n\t\tbody: result.itemList\n\t};\n}\n\n/**\n * Handles a request to query a data asset.\n * @param httpRequestContext The request Context.\n * @param factoryServiceName The factory service name\n * @param request The request.\n * @returns Either the entities as JSON-LD or the corresponding error response.\n */\nexport async function queryDataAsset(\n\thttpRequestContext: IHttpRequestContext,\n\tfactoryServiceName: string,\n\trequest: IDataAssetQueryRequest\n): Promise<IDataAssetEntitiesResponse> {\n\tGuards.object<IDataAssetQueryRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDataAssetQueryRequest[\"body\"]>(ROUTES_SOURCE, nameof(request.body), request.body);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.body.consumerPid), request.body.consumerPid);\n\n\tGuards.object<IFilteringQuery>(ROUTES_SOURCE, nameof(request.body.query), request.body.query);\n\tGuards.string(ROUTES_SOURCE, nameof(request.body.query.type), request.body.query.type);\n\tGuards.string(ROUTES_SOURCE, nameof(request.body.query.q), request.body.query.q);\n\n\tconst trustPayload = HeaderHelper.extractBearer(request.headers?.[HeaderTypes.Authorization]);\n\n\tconst component = ComponentFactory.get<IDataspaceDataPlaneComponent>(factoryServiceName);\n\n\tconst result = await component.queryDataAsset(\n\t\trequest.body.consumerPid,\n\t\trequest.body.query,\n\t\trequest.query?.cursor,\n\t\tCoerce.integer(request.query?.limit),\n\t\ttrustPayload\n\t);\n\n\tconst headers: IDataAssetEntitiesResponse[\"headers\"] = {};\n\n\tif (Is.stringValue(result.cursor)) {\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\theaders[HeaderTypes.Link] = HeaderHelper.createLinkHeader(\n\t\t\tHttpUrlHelper.replaceOrigin(\n\t\t\t\thttpRequestContext.serverRequest.url,\n\t\t\t\tcontextIds?.[HttpContextIdKeys.PublicOrigin]\n\t\t\t),\n\t\t\t{ cursor: result.cursor },\n\t\t\t\"next\"\n\t\t);\n\t}\n\n\treturn {\n\t\theaders,\n\t\tbody: result.itemList\n\t};\n}\n"]}
package/docs/changelog.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.3-next.48](https://github.com/iotaledger/twin-dataspace/compare/dataspace-data-plane-service-v0.0.3-next.47...dataspace-data-plane-service-v0.0.3-next.48) (2026-06-18)
4
+
5
+
6
+ ### Features
7
+
8
+ * remove hosting component ([#209](https://github.com/iotaledger/twin-dataspace/issues/209)) ([5e19328](https://github.com/iotaledger/twin-dataspace/commit/5e1932823aa8a0f88f559f096610b9df1f3b8615))
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.47 to 0.0.3-next.48
16
+ * @twin.org/dataspace-models bumped from 0.0.3-next.47 to 0.0.3-next.48
17
+ * devDependencies
18
+ * @twin.org/dataspace-test-app bumped from 0.0.3-next.47 to 0.0.3-next.48
19
+
3
20
  ## [0.0.3-next.47](https://github.com/iotaledger/twin-dataspace/compare/dataspace-data-plane-service-v0.0.3-next.46...dataspace-data-plane-service-v0.0.3-next.47) (2026-06-17)
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.47",
3
+ "version": "0.0.3-next.48",
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.47",
25
- "@twin.org/dataspace-models": "0.0.3-next.47",
24
+ "@twin.org/dataspace-app-runner": "0.0.3-next.48",
25
+ "@twin.org/dataspace-models": "0.0.3-next.48",
26
26
  "@twin.org/engine-models": "next",
27
27
  "@twin.org/entity": "next",
28
28
  "@twin.org/entity-storage-models": "next",