diff --git a/.github/workflows/pull-request_backend.yml b/.github/workflows/pull-request_backend.yml index 0e538b9cc5..920a9c629f 100644 --- a/.github/workflows/pull-request_backend.yml +++ b/.github/workflows/pull-request_backend.yml @@ -47,6 +47,29 @@ jobs: with: github-token: "${{ secrets.GITHUB_TOKEN }}" review-message: "Please add a short description of the feature/fix to the Changelog.md." + Check-Pom-update: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Check pom for -SNAPSHOT + id: pom-version + run: | + snapshot_count_root_pom=$(grep -o '\-SNAPSHOT' pom.xml | wc -l) + if [ "$snapshot_count_root_pom" > 1 ]; then + echo "pom_changed=true" >> $GITHUB_OUTPUT + else + echo "pom_changed=false" >> $GITHUB_OUTPUT + fi + + - name: Create Review Comment + uses: ntsd/auto-request-changes-action@v3 + if: steps.pom-version.outputs.pom_changed == 'true' + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + review-message: "Please remove -SNAPSHOT from property versions " + Test-and-Sonar: permissions: diff --git a/CHANGELOG.md b/CHANGELOG.md index 92fc525b8e..8716bf7095 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,14 +10,19 @@ _**For better traceability add the corresponding GitHub issue number in each cha ## [UNRELEASED - DD.MM.YYYY] ### Added +- #421 Added contract agreement view - #515 Service Unavailable Response on Notification failure - +- #536 Added import state PUBLISHED_TO_CX in frontend - #420 add /contracts api to fetch contract agreement information from EDC for assets - +- Added a step to the pull-request-backend.yml which checks if the pom.xml(root) properties have some versions ending with -SNAPSHOT +- Added a PostConstruct method in PolicyStartUpConfig to allow Integration tests to run without errors in stack traces. ### Changed - Updated RELEASE.md to the latest release guide (added more steps) - #515 Fixed notification toast click area +- #625 increased height of tables - #423 Moved errorMessages from investigation/alert to notification list +- Updated COMPATIBILITY.md matrix adding release C-X 24.3 and 23.12 +- #536 rework /policies to respond with policies from the IRS policy store ### Removed - #625 Removed the header and breadcrumbs section from app layout diff --git a/COMPATIBILITY_MATRIX.md b/COMPATIBILITY_MATRIX.md index a17019e77f..581955e5e9 100644 --- a/COMPATIBILITY_MATRIX.md +++ b/COMPATIBILITY_MATRIX.md @@ -1,15 +1,132 @@ # Compatibility matrix Trace-X -## Catena-X Release? -- [x] yes -> Catena-X Release 9.0.0-rc2 + +## Trace-X version [[10.6.0](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.6.0)] - 2024-03-04 + +### Catena-X Release? + +- [ ] yes +- [x] no + +### Helm Version [1.3.31](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/helm-charts-1.3.31) + +| Dependency | Name of Service | Version | Helm | Comments | +|------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Finder | discovery service | v0.2.4-M1 | 0.1.11 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | + + +## Trace-X version [[10.5.0](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.5.0)]- 2024-02-22 + +### Catena-X Release? + +- [ ] yes +- [x] no + + +| Dependency | Name of Service | Version | Helm | Comments | +|------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Finder | discovery service | v0.2.4-M1 | 0.1.11 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | + + +## Trace-X version [[10.4.0](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.4.0)] - 2024-02-19 + +### Catena-X Release? + +- [ ] yes +- [x] no + +### Helm Version [1.3.29](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/helm-charts-1.3.29) + +| Dependency | Name of Service | Version | Helm | Comments | +|------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Finder | discovery service | v0.2.4-M1 | 0.1.11 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | + + +## Trace-X version [[10.3.0](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/10.3.0)] - 2024-02-05 + +### Catena-X Release? + +- [x] yes -> Catena-X Release 24.03 - [ ] no +### Helm Version [1.3.28](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/helm-charts-1.3.28) + +| Dependency | Name of Service | Version | Helm | Comments | +|------------------|------------------------------|---------------------------------|--------|-----------------------------------------------------------------------------------| +| EDC | edc-postgresql | 12.1.6 | 2.0.0 | Enterprise Data Connector for PostgreSQL | +| IRS | irs-helm | 4.4.0 | 6.13.0 | Helm charts for Item Relationship Service | +| EDC | tractusx-connector | 0.5.3 | 2.0.0 | Connector for Data Transfer and Registration | +| Discovery Finder | discovery service | v0.2.4-M1 | 0.1.11 | Service for discovering and registering artifacts | +| Portal | portal | 1.7.0 | 1.7.0 | Web portal for interacting with Trace-X | +| SD-Factory | SD-Factory | 2.1.7 | 2.1.8 | Service Discovery Factory for managing dependencies | +| Wallet | wallet | 0.3.0 | 0.3.0 | Secure storage for sensitive information | +| SDE | Simple Data Exchanger (SDE) | 2.3.3 | 0.1.3 | Standalone service for companies to provide data in the Eclipse Tractus-X network | +| Aspect Model | SerialPart | [1.0.0,1.1.0,2.0.0,3.0.0) | - | | +| Aspect Model | Batch | [1.0.1,1.0.2,2.0.0,2.0.1,3.0.0) | - | | +| Aspect Model | PartAsPlanned | [1.0.0,1.0.1,2.0.0) | - | | +| Aspect Model | PartSiteInformationAsPlanned | [1.0.0] | - | | +| Aspect Model | JustInSequencePart | [1.0.0,2.0.0,3.0.0) | - | | +| Aspect Model | TractionBatteryCode | [1.0.0] | - | | +| Aspect Model | SingleLevelUsageAsBuilt | [1.0.1] | - | | +| Aspect Model | SingleLevelBomAsBuilt | [1.0.0, 2.0.0) | - | | +| Aspect Model | SingleLevelBomAsPlanned | [1.0.1, 1.1.0) | - | | -### (Trace-X Release) [9.0.0-rc2| Release Notes](https://github.com/catenax-ng/tx-traceability-foss/releases/tag/9.0.0-rc2) -#### Trace-X version 9.0.0-rc2 -#### Helm Version 1.3.21 +## Trace-X version [[9.0.0-rc2](https://github.com/eclipse-tractusx/traceability-foss/releases/tag/9.0.0-rc2)] - 2023-11-15 +## Catena-X Release? + +- [x] yes -> Catena-X Release R23.12 +- [ ] no +### Helm Version 1.3.21 | Dependency | Name of Service | Version | Helm | Comments | |-------------------|------------------------------|---------------------------------|-------|-----------------------------------------------------------------------------------| diff --git a/DEPENDENCIES_BACKEND b/DEPENDENCIES_BACKEND index 55cab4eaf8..0c78aba26f 100644 --- a/DEPENDENCIES_BACKEND +++ b/DEPENDENCIES_BACKEND @@ -161,9 +161,9 @@ maven/mavencentral/net.java.dev.jna/jna/5.12.1, Apache-2.0 OR LGPL-2.1-or-later, maven/mavencentral/net.javacrumbs.json-unit/json-unit-assertj/3.2.2, Apache-2.0, approved, clearlydefined maven/mavencentral/net.javacrumbs.json-unit/json-unit-core/3.2.2, Apache-2.0, approved, clearlydefined maven/mavencentral/net.javacrumbs.json-unit/json-unit-json-path/3.2.2, Apache-2.0, approved, clearlydefined -maven/mavencentral/net.javacrumbs.shedlock/shedlock-core/5.11.0, , restricted, clearlydefined -maven/mavencentral/net.javacrumbs.shedlock/shedlock-provider-jdbc-template/5.11.0, , restricted, clearlydefined -maven/mavencentral/net.javacrumbs.shedlock/shedlock-spring/5.11.0, , restricted, clearlydefined +maven/mavencentral/net.javacrumbs.shedlock/shedlock-core/5.11.0, Apache-2.0, approved, #13500 +maven/mavencentral/net.javacrumbs.shedlock/shedlock-provider-jdbc-template/5.11.0, Apache-2.0, approved, #13498 +maven/mavencentral/net.javacrumbs.shedlock/shedlock-spring/5.11.0, Apache-2.0, approved, #13499 maven/mavencentral/net.minidev/accessors-smart/2.4.11, Apache-2.0, approved, #7515 maven/mavencentral/net.minidev/accessors-smart/2.4.9, Apache-2.0, approved, #7515 maven/mavencentral/net.minidev/json-smart/2.4.10, Apache-2.0, approved, #3288 @@ -301,10 +301,10 @@ maven/mavencentral/org.eclipse.jetty/jetty-webapp/11.0.17, EPL-2.0 OR Apache-2.0 maven/mavencentral/org.eclipse.jetty/jetty-webapp/11.0.20, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-xml/11.0.17, EPL-2.0 OR Apache-2.0, approved, rt.jetty maven/mavencentral/org.eclipse.jetty/jetty-xml/11.0.20, EPL-2.0 OR Apache-2.0, approved, rt.jetty -maven/mavencentral/org.eclipse.tractusx.irs/irs-common/1.6.0-20240229.132600-18, Apache-2.0, approved, automotive.tractusx -maven/mavencentral/org.eclipse.tractusx.irs/irs-edc-client/1.6.0-20240229.132600-18, Apache-2.0, approved, automotive.tractusx -maven/mavencentral/org.eclipse.tractusx.irs/irs-models/1.6.0-20240229.132600-18, Apache-2.0, approved, automotive.tractusx -maven/mavencentral/org.eclipse.tractusx.irs/irs-registry-client/1.6.0-20240229.132600-18, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.irs/irs-common/1.6.0-20240307.091809-32, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.irs/irs-edc-client/1.6.0-20240307.091809-32, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.irs/irs-models/1.6.0-20240307.091809-32, Apache-2.0, approved, automotive.tractusx +maven/mavencentral/org.eclipse.tractusx.irs/irs-registry-client/1.6.0-20240307.091809-32, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.eclipse.tractusx.traceability/tx-backend/0.0.1-SNAPSHOT, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.eclipse.tractusx.traceability/tx-models/0.0.1-SNAPSHOT, Apache-2.0, approved, automotive.tractusx maven/mavencentral/org.flywaydb/flyway-core/9.16.3, Apache-2.0, approved, #7935 diff --git a/DEPENDENCIES_FRONTEND b/DEPENDENCIES_FRONTEND index bf05c2aa8e..e69de29bb2 100644 --- a/DEPENDENCIES_FRONTEND +++ b/DEPENDENCIES_FRONTEND @@ -1,1703 +0,0 @@ -npm/npmjs/-/abab/2.0.6, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/abbrev/1.1.1, ISC, approved, clearlydefined -npm/npmjs/-/accepts/1.3.8, MIT, approved, clearlydefined -npm/npmjs/-/acorn-globals/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn-import-assertions/1.8.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn-import-assertions/1.9.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn-jsx/5.3.2, MIT, approved, clearlydefined -npm/npmjs/-/acorn-walk/7.2.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn-walk/8.2.0, MIT, approved, clearlydefined -npm/npmjs/-/acorn/7.4.1, MIT, approved, clearlydefined -npm/npmjs/-/acorn/8.11.3, MIT, approved, clearlydefined -npm/npmjs/-/acorn/8.8.2, MIT, approved, #6951 -npm/npmjs/-/adjust-sourcemap-loader/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/agent-base/6.0.2, MIT, approved, clearlydefined -npm/npmjs/-/agentkeepalive/4.2.1, MIT, approved, clearlydefined -npm/npmjs/-/aggregate-error/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/ajv-formats/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/ajv-keywords/3.5.2, MIT, approved, clearlydefined -npm/npmjs/-/ajv-keywords/5.1.0, MIT, approved, clearlydefined -npm/npmjs/-/ajv/6.12.6, MIT, approved, #979 -npm/npmjs/-/ajv/8.11.0, MIT, approved, #4969 -npm/npmjs/-/ajv/8.12.0, MIT AND OFL-1.1 AND (EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0), approved, #6025 -npm/npmjs/-/angular-i18next/16.0.0, MIT, approved, clearlydefined -npm/npmjs/-/angular-split/16.2.1, Apache-2.0, approved, #13295 -npm/npmjs/-/ansi-colors/4.1.3, MIT, approved, clearlydefined -npm/npmjs/-/ansi-escapes/4.3.2, MIT, approved, clearlydefined -npm/npmjs/-/ansi-html-community/0.0.8, Apache-2.0, approved, clearlydefined -npm/npmjs/-/ansi-regex/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/ansi-regex/5.0.1, MIT, approved, clearlydefined -npm/npmjs/-/ansi-regex/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/ansi-styles/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/ansi-styles/4.3.0, MIT, approved, clearlydefined -npm/npmjs/-/ansi-styles/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/ansi-styles/6.1.0, MIT, approved, clearlydefined -npm/npmjs/-/any-promise/1.3.0, MIT, approved, clearlydefined -npm/npmjs/-/anymatch/3.1.3, ISC, approved, #5050 -npm/npmjs/-/aproba/2.0.0, ISC, approved, clearlydefined -npm/npmjs/-/arch/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/are-docs-informative/0.0.2, MIT, approved, #8056 -npm/npmjs/-/are-we-there-yet/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/arg/4.1.3, MIT, approved, clearlydefined -npm/npmjs/-/arg/5.0.2, MIT, approved, clearlydefined -npm/npmjs/-/argparse/1.0.10, MIT, approved, #2174 -npm/npmjs/-/argparse/2.0.1, Python-2.0, approved, CQ22954 -npm/npmjs/-/aria-query/5.1.3, Apache-2.0, approved, clearlydefined -npm/npmjs/-/aria-query/5.3.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/array-buffer-byte-length/1.0.0, MIT, approved, #7548 -npm/npmjs/-/array-flatten/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/array-flatten/2.1.2, MIT, approved, clearlydefined -npm/npmjs/-/array-includes/3.1.6, MIT, approved, #4577 -npm/npmjs/-/array-union/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/array.prototype.flat/1.3.1, MIT, approved, #4574 -npm/npmjs/-/array.prototype.flatmap/1.3.1, MIT, approved, #4651 -npm/npmjs/-/arrify/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/asn1/0.2.6, MIT, approved, clearlydefined -npm/npmjs/-/assert-plus/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/assertion-error-formatter/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/astral-regex/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/async/3.2.4, Apache-2.0 AND MIT, approved, #1553 -npm/npmjs/-/asynckit/0.4.0, MIT, approved, clearlydefined -npm/npmjs/-/at-least-node/1.0.0, ISC, approved, clearlydefined -npm/npmjs/-/atob/2.1.2, MIT OR Apache-2.0, approved, #1027 -npm/npmjs/-/autoprefixer/10.4.14, MIT, approved, #7494 -npm/npmjs/-/available-typed-arrays/1.0.5, MIT, approved, clearlydefined -npm/npmjs/-/aws-sign2/0.7.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/aws4/1.11.0, MIT, approved, clearlydefined -npm/npmjs/-/axios/1.6.7, MIT, approved, #11338 -npm/npmjs/-/axobject-query/4.0.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/babel-loader/9.1.3, MIT, approved, clearlydefined -npm/npmjs/-/babel-plugin-istanbul/6.1.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/babel-plugin-polyfill-corejs2/0.4.8, MIT, approved, #9309 -npm/npmjs/-/babel-plugin-polyfill-corejs3/0.8.7, MIT, approved, #9316 -npm/npmjs/-/babel-plugin-polyfill-regenerator/0.5.5, MIT, approved, #9310 -npm/npmjs/-/balanced-match/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/balanced-match/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/base64-js/1.5.1, MIT, approved, clearlydefined -npm/npmjs/-/base64id/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/batch/0.6.1, MIT, approved, clearlydefined -npm/npmjs/-/bcrypt-pbkdf/1.0.2, BSD-3-Clause AND ISC AND BSD-3-Clause, approved, #2725 -npm/npmjs/-/big.js/5.2.2, MIT, approved, clearlydefined -npm/npmjs/-/binary-extensions/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/bl/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/blob-util/2.0.2, Apache-2.0, approved, clearlydefined -npm/npmjs/-/bluebird/3.7.2, MIT, approved, clearlydefined -npm/npmjs/-/body-parser/1.20.1, MIT, approved, clearlydefined -npm/npmjs/-/body-parser/1.20.2, MIT, approved, clearlydefined -npm/npmjs/-/bonjour-service/1.1.1, MIT, approved, #7474 -npm/npmjs/-/boolbase/1.0.0, ISC, approved, clearlydefined -npm/npmjs/-/brace-expansion/1.1.11, MIT, approved, clearlydefined -npm/npmjs/-/brace-expansion/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/braces/3.0.2, MIT, approved, clearlydefined -npm/npmjs/-/browser-process-hrtime/1.0.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/browserslist/4.21.5, MIT, approved, #7034 -npm/npmjs/-/browserslist/4.22.3, MIT, approved, #10780 -npm/npmjs/-/buffer-crc32/0.2.13, MIT, approved, clearlydefined -npm/npmjs/-/buffer-from/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/buffer/5.7.1, MIT, approved, clearlydefined -npm/npmjs/-/builtins/5.0.1, MIT, approved, clearlydefined -npm/npmjs/-/bytes/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/bytes/3.1.2, MIT, approved, clearlydefined -npm/npmjs/-/cacache/16.1.3, ISC, approved, clearlydefined -npm/npmjs/-/cacache/17.0.4, ISC, approved, #7610 -npm/npmjs/-/cachedir/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/call-bind/1.0.5, MIT, approved, #11092 -npm/npmjs/-/callsites/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/camelcase-css/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/camelcase-keys/6.2.2, MIT, approved, clearlydefined -npm/npmjs/-/camelcase/5.3.1, MIT, approved, clearlydefined -npm/npmjs/-/caniuse-lite/1.0.30001486, CC-BY-4.0, approved, #1196 -npm/npmjs/-/caniuse-lite/1.0.30001581, CC-BY-4.0, approved, #1196 -npm/npmjs/-/capital-case/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/caseless/0.12.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/chalk/2.4.2, MIT, approved, clearlydefined -npm/npmjs/-/chalk/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/chalk/4.1.2, MIT, approved, clearlydefined -npm/npmjs/-/chalk/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/chardet/0.7.0, MIT, approved, clearlydefined -npm/npmjs/-/check-more-types/2.24.0, MIT, approved, clearlydefined -npm/npmjs/-/chokidar/3.5.3, MIT, approved, #2317 -npm/npmjs/-/chownr/2.0.0, ISC, approved, clearlydefined -npm/npmjs/-/chrome-trace-event/1.0.3, MIT, approved, #2414 -npm/npmjs/-/ci-info/3.7.0, MIT, approved, clearlydefined -npm/npmjs/-/class-transformer/0.5.1, MIT, approved, clearlydefined -npm/npmjs/-/clean-stack/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/cli-cursor/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/cli-spinners/2.6.1, MIT, approved, clearlydefined -npm/npmjs/-/cli-spinners/2.9.0, MIT, approved, #8249 -npm/npmjs/-/cli-table/0.3.11, MIT, approved, clearlydefined -npm/npmjs/-/cli-table3/0.6.3, MIT, approved, clearlydefined -npm/npmjs/-/cli-truncate/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/cli-truncate/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/cli-width/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/cliui/7.0.4, ISC AND Artistic-2.0, approved, #2724 -npm/npmjs/-/cliui/8.0.1, ISC AND Artistic-2.0, approved, #3753 -npm/npmjs/-/clone-deep/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/clone-regexp/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/clone/1.0.4, MIT, approved, #2729 -npm/npmjs/-/color-convert/1.9.3, MIT, approved, clearlydefined -npm/npmjs/-/color-convert/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/color-name/1.1.3, MIT, approved, clearlydefined -npm/npmjs/-/color-name/1.1.4, MIT, approved, clearlydefined -npm/npmjs/-/color-string/1.9.1, MIT, approved, clearlydefined -npm/npmjs/-/color-support/1.1.3, ISC, approved, clearlydefined -npm/npmjs/-/color/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/colord/2.9.3, MIT, approved, clearlydefined -npm/npmjs/-/colorette/2.0.20, MIT, approved, clearlydefined -npm/npmjs/-/colors/1.0.3, MIT, approved, clearlydefined -npm/npmjs/-/colors/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/colorspace/1.1.4, MIT, approved, clearlydefined -npm/npmjs/-/combined-stream/1.0.8, MIT, approved, clearlydefined -npm/npmjs/-/commander/10.0.1, MIT, approved, #8062 -npm/npmjs/-/commander/2.20.3, MIT, approved, clearlydefined -npm/npmjs/-/commander/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/commander/6.2.1, MIT, approved, clearlydefined -npm/npmjs/-/commander/7.2.0, MIT, approved, clearlydefined -npm/npmjs/-/commander/9.1.0, MIT, approved, clearlydefined -npm/npmjs/-/commander/9.4.1, MIT, approved, clearlydefined -npm/npmjs/-/commander/9.5.0, MIT, approved, #6166 -npm/npmjs/-/comment-parser/1.3.1, MIT, approved, clearlydefined -npm/npmjs/-/common-ancestor-path/1.0.1, ISC, approved, clearlydefined -npm/npmjs/-/common-path-prefix/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/common-tags/1.8.2, MIT, approved, #2950 -npm/npmjs/-/compressible/2.0.18, MIT, approved, clearlydefined -npm/npmjs/-/compression/1.7.4, MIT, approved, #1975 -npm/npmjs/-/concat-map/0.0.1, MIT, approved, clearlydefined -npm/npmjs/-/connect-history-api-fallback/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/connect/3.7.0, MIT, approved, clearlydefined -npm/npmjs/-/console-control-strings/1.1.0, ISC, approved, clearlydefined -npm/npmjs/-/content-disposition/0.5.4, MIT, approved, clearlydefined -npm/npmjs/-/content-type/1.0.5, MIT, approved, #6950 -npm/npmjs/-/convert-source-map/1.9.0, MIT, approved, clearlydefined -npm/npmjs/-/convert-source-map/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/cookie-signature/1.0.6, MIT, approved, clearlydefined -npm/npmjs/-/cookie/0.4.2, MIT, approved, clearlydefined -npm/npmjs/-/cookie/0.5.0, MIT, approved, clearlydefined -npm/npmjs/-/copy-anything/2.0.6, 0BSD AND MIT, approved, #1819 -npm/npmjs/-/copy-webpack-plugin/11.0.0, MIT, approved, clearlydefined -npm/npmjs/-/core-js-compat/3.35.1, MIT, approved, #12900 -npm/npmjs/-/core-util-is/1.0.2, MIT, approved, #5898 -npm/npmjs/-/core-util-is/1.0.3, MIT, approved, #5898 -npm/npmjs/-/cors/2.8.5, MIT, approved, clearlydefined -npm/npmjs/-/cosmiconfig-typescript-loader/4.3.0, MIT, approved, clearlydefined -npm/npmjs/-/cosmiconfig/7.1.0, MIT, approved, #4975 -npm/npmjs/-/cosmiconfig/8.1.3, MIT, approved, #7589 -npm/npmjs/-/cosmiconfig/8.3.6, MIT, approved, #10781 -npm/npmjs/-/create-require/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/critters/0.0.20, Apache-2.0, approved, clearlydefined -npm/npmjs/-/cross-fetch/3.1.5, MIT, approved, clearlydefined -npm/npmjs/-/cross-spawn/7.0.3, MIT, approved, clearlydefined -npm/npmjs/-/css-functions-list/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/css-loader/6.8.1, MIT AND Apache-2.0, approved, #8759 -npm/npmjs/-/css-select/5.1.0, BSD-2-Clause AND MIT, approved, #3493 -npm/npmjs/-/css-tree/2.3.1, MIT, approved, clearlydefined -npm/npmjs/-/css-what/6.1.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/css.escape/1.5.1, MIT, approved, clearlydefined -npm/npmjs/-/css/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/cssesc/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/cssom/0.3.8, MIT, approved, clearlydefined -npm/npmjs/-/cssom/0.4.4, MIT, approved, clearlydefined -npm/npmjs/-/cssstyle/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/custom-event/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/cypress/12.17.4, MIT, restricted, clearlydefined -npm/npmjs/-/d3-array/3.2.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-axis/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-brush/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-chord/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-color/3.1.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-contour/4.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-delaunay/6.0.2, ISC, approved, clearlydefined -npm/npmjs/-/d3-dispatch/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-drag/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-dsv/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-ease/3.0.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/d3-fetch/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-force/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-format/3.1.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-geo/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-hierarchy/3.1.2, ISC, approved, clearlydefined -npm/npmjs/-/d3-interpolate/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-path/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-polygon/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-quadtree/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-random/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-scale-chromatic/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-scale/4.0.2, ISC, approved, clearlydefined -npm/npmjs/-/d3-selection/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-shape/3.1.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-time-format/4.1.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-time/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3-timer/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-transition/3.0.1, ISC, approved, clearlydefined -npm/npmjs/-/d3-zoom/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/d3/7.8.4, ISC, approved, clearlydefined -npm/npmjs/-/dashdash/1.14.1, MIT, approved, clearlydefined -npm/npmjs/-/data-urls/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/date-format/4.0.14, MIT, approved, clearlydefined -npm/npmjs/-/dayjs/1.11.7, MIT, approved, #9149 -npm/npmjs/-/debug/2.6.9, MIT, approved, clearlydefined -npm/npmjs/-/debug/3.2.7, MIT, approved, clearlydefined -npm/npmjs/-/debug/4.3.4, MIT, approved, clearlydefined -npm/npmjs/-/decamelize-keys/1.1.0, MIT, approved, #4601 -npm/npmjs/-/decamelize/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/decimal.js/10.4.3, MIT, approved, clearlydefined -npm/npmjs/-/decode-uri-component/0.2.2, MIT, approved, #5322 -npm/npmjs/-/deep-equal/2.2.3, MIT, approved, #8406 -npm/npmjs/-/deep-is/0.1.4, MIT, approved, #2130 -npm/npmjs/-/default-gateway/6.0.3, BSD-2-Clause AND BSD-3-Clause, approved, #2956 -npm/npmjs/-/defaults/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/define-data-property/1.1.1, MIT, approved, #10591 -npm/npmjs/-/define-lazy-prop/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/define-properties/1.2.1, MIT, approved, #7116 -npm/npmjs/-/delaunator/5.0.0, ISC, approved, clearlydefined -npm/npmjs/-/delayed-stream/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/delegates/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/depd/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/depd/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/dequal/2.0.3, MIT, approved, clearlydefined -npm/npmjs/-/destroy/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/detect-node/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/di/0.0.1, MIT, approved, clearlydefined -npm/npmjs/-/didyoumean/1.2.2, Apache-2.0, approved, clearlydefined -npm/npmjs/-/diff/4.0.2, BSD-3-Clause, approved, #2728 -npm/npmjs/-/dir-glob/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/dlv/1.1.3, MIT, approved, clearlydefined -npm/npmjs/-/dns-equal/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/dns-packet/5.6.0, MIT, approved, clearlydefined -npm/npmjs/-/doctrine/2.1.0, Apache-2.0 AND BSD-2-Clause, approved, #1987 -npm/npmjs/-/doctrine/3.0.0, Apache-2.0 AND BSD-2-Clause, approved, CQ22628 -npm/npmjs/-/dom-accessibility-api/0.5.16, MIT, approved, clearlydefined -npm/npmjs/-/dom-serialize/2.2.1, MIT, approved, clearlydefined -npm/npmjs/-/dom-serializer/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/domelementtype/2.3.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/domexception/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/domhandler/5.0.3, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/domutils/3.1.0, BSD-2-Clause, approved, #8391 -npm/npmjs/-/dotenv/10.0.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/duplexer/0.1.2, MIT, approved, #1002 -npm/npmjs/-/eastasianwidth/0.2.0, MIT, approved, clearlydefined -npm/npmjs/-/ecc-jsbn/0.1.2, MIT, approved, clearlydefined -npm/npmjs/-/ee-first/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/ejs/3.1.9, Apache-2.0, approved, #1373 -npm/npmjs/-/electron-to-chromium/1.4.385, ISC, approved, #1950 -npm/npmjs/-/electron-to-chromium/1.4.650, ISC, approved, #1950 -npm/npmjs/-/emoji-regex/8.0.0, MIT, approved, clearlydefined -npm/npmjs/-/emoji-regex/9.2.2, MIT, approved, clearlydefined -npm/npmjs/-/emojis-list/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/enabled/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/encodeurl/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/encoding/0.1.13, MIT AND MIT-0, approved, #1016 -npm/npmjs/-/end-of-stream/1.4.4, MIT, approved, clearlydefined -npm/npmjs/-/engine.io-parser/5.0.6, MIT, approved, #6249 -npm/npmjs/-/engine.io/6.4.2, MIT, approved, #7128 -npm/npmjs/-/enhanced-resolve/5.12.0, MIT, approved, clearlydefined -npm/npmjs/-/enhanced-resolve/5.15.0, MIT, approved, #8939 -npm/npmjs/-/enquirer/2.3.6, MIT AND (ISC AND MIT), approved, #2727 -npm/npmjs/-/ent/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/entities/4.4.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/entities/4.5.0, BSD-2-Clause, approved, #7910 -npm/npmjs/-/env-paths/2.2.1, MIT, approved, clearlydefined -npm/npmjs/-/err-code/2.0.3, MIT, approved, clearlydefined -npm/npmjs/-/errno/0.1.8, MIT, approved, clearlydefined -npm/npmjs/-/error-ex/1.3.2, MIT, approved, clearlydefined -npm/npmjs/-/error-stack-parser/2.1.4, MIT, approved, clearlydefined -npm/npmjs/-/es-abstract/1.21.1, MIT, approved, #6209 -npm/npmjs/-/es-get-iterator/1.1.3, MIT, approved, clearlydefined -npm/npmjs/-/es-module-lexer/0.9.3, MIT, approved, #1206 -npm/npmjs/-/es-module-lexer/1.4.1, MIT, approved, clearlydefined -npm/npmjs/-/es-set-tostringtag/2.0.1, MIT, approved, #6218 -npm/npmjs/-/es-shim-unscopables/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/es-to-primitive/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-android-64/0.14.54, MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #3297 -npm/npmjs/-/esbuild-android-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-darwin-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-darwin-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-freebsd-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-freebsd-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-32/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-arm/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-mips64le/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-ppc64le/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-riscv64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-linux-s390x/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-netbsd-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-openbsd-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-sunos-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-wasm/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #13304 -npm/npmjs/-/esbuild-windows-32/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-windows-64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild-windows-arm64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild/0.14.54, MIT, approved, clearlydefined -npm/npmjs/-/esbuild/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7537 -npm/npmjs/-/esbuild/0.18.17, MIT, approved, #9907 -npm/npmjs/-/esbuild/0.18.20, MIT, approved, #9907 -npm/npmjs/-/escalade/3.1.1, MIT, approved, clearlydefined -npm/npmjs/-/escape-html/1.0.3, MIT, approved, clearlydefined -npm/npmjs/-/escape-string-regexp/1.0.5, MIT, approved, clearlydefined -npm/npmjs/-/escape-string-regexp/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/escodegen/2.1.0, BSD-2-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9306 -npm/npmjs/-/eslint-config-prettier/8.8.0, MIT, approved, #7543 -npm/npmjs/-/eslint-import-resolver-node/0.3.7, MIT, approved, #9923 -npm/npmjs/-/eslint-module-utils/2.7.4, MIT, approved, #2500 -npm/npmjs/-/eslint-plugin-import/2.27.5, MIT, approved, #6937 -npm/npmjs/-/eslint-plugin-jsdoc/43.1.1, BSD-3-Clause, approved, #8059 -npm/npmjs/-/eslint-plugin-prefer-arrow/1.2.3, MIT, approved, clearlydefined -npm/npmjs/-/eslint-scope/5.1.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/eslint-scope/7.1.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/eslint-scope/7.2.0, BSD-2-Clause, approved, #9916 -npm/npmjs/-/eslint-visitor-keys/3.3.0, Apache-2.0, approved, #2696 -npm/npmjs/-/eslint-visitor-keys/3.4.0, Apache-2.0, approved, #7729 -npm/npmjs/-/eslint/8.39.0, MIT AND OFL-1.1-no-RFN AND CC-BY-NC-SA-4.0 AND ISC AND CC-BY-SA-2.0 AND (JSON AND MIT), approved, #8043 -npm/npmjs/-/espree/9.5.1, BSD-2-Clause AND BSD-3-Clause AND MIT AND BSD-2-Clause AND BSD-3-Clause AND MIT AND (BSD-2-Clause AND MIT) AND (BSD-3-Clause AND LGPL-2.0-or-later AND MIT) AND LGPL-2.1-or-later, approved, #7478 -npm/npmjs/-/esprima/4.0.1, BSD-2-Clause, approved, #995 -npm/npmjs/-/esquery/1.5.0, BSD-3-Clause, approved, #7469 -npm/npmjs/-/esrecurse/4.3.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/estraverse/4.3.0, BSD-2-Clause, approved, #518 -npm/npmjs/-/estraverse/5.3.0, BSD-2-Clause AND MIT, approved, #1557 -npm/npmjs/-/esutils/2.0.3, BSD-2-Clause AND BSD-3-Clause, approved, #120 -npm/npmjs/-/etag/1.8.1, MIT, approved, clearlydefined -npm/npmjs/-/eventemitter-asyncresource/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/eventemitter2/6.4.7, MIT, approved, clearlydefined -npm/npmjs/-/eventemitter3/4.0.7, MIT, approved, clearlydefined -npm/npmjs/-/events/3.3.0, MIT, approved, clearlydefined -npm/npmjs/-/execa/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/execa/5.1.1, MIT, approved, clearlydefined -npm/npmjs/-/execa/7.1.1, MIT, approved, clearlydefined -npm/npmjs/-/executable/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/express/4.18.2, MIT, approved, clearlydefined -npm/npmjs/-/extend/3.0.2, MIT, approved, clearlydefined -npm/npmjs/-/external-editor/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/extract-zip/2.0.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/extsprintf/1.3.0, MIT, approved, #1813 -npm/npmjs/-/extsprintf/1.4.1, MIT, approved, #1039 -npm/npmjs/-/fast-deep-equal/3.1.3, MIT, approved, clearlydefined -npm/npmjs/-/fast-glob/3.2.12, MIT, approved, clearlydefined -npm/npmjs/-/fast-glob/3.2.7, MIT, approved, clearlydefined -npm/npmjs/-/fast-glob/3.3.1, MIT, approved, #9307 -npm/npmjs/-/fast-json-stable-stringify/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/fast-levenshtein/2.0.6, MIT, approved, #2428 -npm/npmjs/-/fastest-levenshtein/1.0.16, MIT, approved, clearlydefined -npm/npmjs/-/fastq/1.15.0, ISC, approved, #6021 -npm/npmjs/-/faye-websocket/0.11.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/fd-slicer/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/fecha/4.2.3, MIT, approved, clearlydefined -npm/npmjs/-/figures/3.2.0, MIT, approved, clearlydefined -npm/npmjs/-/file-entry-cache/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/filelist/1.0.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/fill-range/7.0.1, MIT, approved, clearlydefined -npm/npmjs/-/finalhandler/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/finalhandler/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/find-cache-dir/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/find-up/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/find-up/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/find-up/6.3.0, MIT, approved, clearlydefined -npm/npmjs/-/flat-cache/3.0.4, MIT, approved, clearlydefined -npm/npmjs/-/flat/5.0.2, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/flatted/3.2.7, ISC AND (ISC AND MIT), approved, #2430 -npm/npmjs/-/fn.name/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/follow-redirects/1.15.5, MIT, approved, #10782 -npm/npmjs/-/for-each/0.3.3, MIT, approved, clearlydefined -npm/npmjs/-/forever-agent/0.6.1, Apache-2.0, approved, clearlydefined -npm/npmjs/-/form-data/2.3.3, MIT, approved, clearlydefined -npm/npmjs/-/form-data/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/form-data/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/forwarded/0.2.0, MIT, approved, clearlydefined -npm/npmjs/-/fraction.js/4.2.0, MIT, approved, clearlydefined -npm/npmjs/-/fresh/0.5.2, MIT, approved, clearlydefined -npm/npmjs/-/fs-constants/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/fs-extra/11.2.0, MIT, approved, clearlydefined -npm/npmjs/-/fs-extra/8.1.0, MIT, approved, clearlydefined -npm/npmjs/-/fs-extra/9.1.0, MIT, approved, clearlydefined -npm/npmjs/-/fs-minipass/2.1.0, ISC, approved, clearlydefined -npm/npmjs/-/fs-minipass/3.0.2, ISC, approved, #8277 -npm/npmjs/-/fs-monkey/1.0.3, Unlicense AND (ISC AND MIT), approved, #2964 -npm/npmjs/-/fs.realpath/1.0.0, ISC, approved, clearlydefined -npm/npmjs/-/fsevents/2.3.3, MIT, approved, #2967 -npm/npmjs/-/function-bind/1.1.2, MIT, approved, #11063 -npm/npmjs/-/function.prototype.name/1.1.5, MIT, approved, #10255 -npm/npmjs/-/functions-have-names/1.2.3, MIT, approved, clearlydefined -npm/npmjs/-/gauge/4.0.4, ISC, approved, clearlydefined -npm/npmjs/-/gensync/1.0.0-beta.2, MIT, approved, clearlydefined -npm/npmjs/-/get-caller-file/2.0.5, ISC, approved, clearlydefined -npm/npmjs/-/get-intrinsic/1.2.2, MIT, approved, #8453 -npm/npmjs/-/get-package-type/0.1.0, MIT, approved, clearlydefined -npm/npmjs/-/get-stream/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/get-stream/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/get-symbol-description/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/getos/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/getpass/0.1.7, MIT, approved, clearlydefined -npm/npmjs/-/glob-parent/5.1.2, ISC, approved, clearlydefined -npm/npmjs/-/glob-parent/6.0.2, ISC, approved, clearlydefined -npm/npmjs/-/glob-to-regexp/0.4.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/glob/7.1.4, ISC, approved, #994 -npm/npmjs/-/glob/7.1.6, ISC, approved, #994 -npm/npmjs/-/glob/7.2.3, ISC, approved, clearlydefined -npm/npmjs/-/glob/8.1.0, ISC AND (ISC AND MIT) AND CC-BY-SA-4.0, approved, #7145 -npm/npmjs/-/glob/9.3.5, ISC AND CC-BY-SA-4.0, approved, #7590 -npm/npmjs/-/global-dirs/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/global-modules/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/global-prefix/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/globals/11.12.0, MIT, approved, clearlydefined -npm/npmjs/-/globals/13.20.0, MIT, approved, #6953 -npm/npmjs/-/globalthis/1.0.3, MIT, approved, clearlydefined -npm/npmjs/-/globby/11.1.0, MIT, approved, clearlydefined -npm/npmjs/-/globby/13.1.4, MIT, approved, #5753 -npm/npmjs/-/globjoin/0.1.4, MIT, approved, clearlydefined -npm/npmjs/-/gopd/1.0.1, MIT, approved, #4863 -npm/npmjs/-/graceful-fs/4.2.11, ISC, approved, #7413 -npm/npmjs/-/grapheme-splitter/1.0.4, MIT, approved, #1645 -npm/npmjs/-/graphql/16.8.1, MIT, approved, clearlydefined -npm/npmjs/-/guess-parser/0.4.22, MIT, approved, clearlydefined -npm/npmjs/-/gzip-size/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/handle-thing/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/hard-rejection/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/has-ansi/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/has-bigints/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/has-flag/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/has-flag/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/has-property-descriptors/1.0.1, MIT, approved, #11098 -npm/npmjs/-/has-proto/1.0.1, MIT, approved, #6175 -npm/npmjs/-/has-symbols/1.0.3, MIT, approved, clearlydefined -npm/npmjs/-/has-tostringtag/1.0.0, MIT, approved, #13161 -npm/npmjs/-/has-unicode/2.0.1, ISC, approved, clearlydefined -npm/npmjs/-/has/1.0.3, MIT, approved, #10930 -npm/npmjs/-/hasown/2.0.0, MIT, approved, #11097 -npm/npmjs/-/hdr-histogram-js/2.0.3, BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND 0BSD, approved, #3301 -npm/npmjs/-/hdr-histogram-percentiles-obj/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/headers-polyfill/3.1.2, MIT, approved, clearlydefined -npm/npmjs/-/hosted-git-info/2.8.9, ISC, approved, clearlydefined -npm/npmjs/-/hosted-git-info/4.1.0, ISC, approved, clearlydefined -npm/npmjs/-/hosted-git-info/6.1.1, ISC, approved, clearlydefined -npm/npmjs/-/hpack.js/2.1.6, MIT, approved, clearlydefined -npm/npmjs/-/html-encoding-sniffer/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/html-entities/2.3.3, MIT, approved, #9043 -npm/npmjs/-/html-escaper/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/html-tags/3.3.1, MIT, approved, clearlydefined -npm/npmjs/-/htmlparser2/8.0.2, MIT, approved, clearlydefined -npm/npmjs/-/http-cache-semantics/4.1.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/http-deceiver/1.2.7, MIT, approved, clearlydefined -npm/npmjs/-/http-errors/1.6.3, MIT, approved, clearlydefined -npm/npmjs/-/http-errors/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/http-parser-js/0.5.8, MIT, approved, #2970 -npm/npmjs/-/http-proxy-agent/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/http-proxy-agent/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/http-proxy-middleware/2.0.6, MIT, approved, clearlydefined -npm/npmjs/-/http-proxy/1.18.1, MIT, approved, clearlydefined -npm/npmjs/-/http-signature/1.3.6, MIT, approved, clearlydefined -npm/npmjs/-/https-proxy-agent/5.0.1, MIT, approved, clearlydefined -npm/npmjs/-/human-signals/1.1.1, Apache-2.0, approved, clearlydefined -npm/npmjs/-/human-signals/2.1.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/human-signals/4.3.1, Apache-2.0, approved, clearlydefined -npm/npmjs/-/humanize-ms/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/husky/8.0.3, MIT, approved, clearlydefined -npm/npmjs/-/i18next-browser-languagedetector/7.0.1, MIT, approved, clearlydefined -npm/npmjs/-/i18next-http-backend/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/i18next/22.4.15, MIT, approved, #8063 -npm/npmjs/-/iconv-lite/0.4.24, MIT, approved, clearlydefined -npm/npmjs/-/iconv-lite/0.6.3, MIT, approved, clearlydefined -npm/npmjs/-/icss-utils/5.1.0, ISC, approved, clearlydefined -npm/npmjs/-/ieee754/1.2.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/ignore-walk/6.0.1, ISC, approved, #7563 -npm/npmjs/-/ignore/5.2.4, MIT, approved, #5907 -npm/npmjs/-/image-size/0.5.5, MIT, approved, clearlydefined -npm/npmjs/-/immutable/4.3.0, MIT, approved, #7353 -npm/npmjs/-/import-fresh/3.3.0, MIT, approved, clearlydefined -npm/npmjs/-/import-lazy/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/imurmurhash/0.1.4, MIT, approved, clearlydefined -npm/npmjs/-/indent-string/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/infer-owner/1.0.4, ISC, approved, clearlydefined -npm/npmjs/-/inflight/1.0.6, ISC, approved, clearlydefined -npm/npmjs/-/inherits/2.0.3, ISC, approved, clearlydefined -npm/npmjs/-/inherits/2.0.4, ISC, approved, clearlydefined -npm/npmjs/-/ini/1.3.8, ISC AND MIT AND BSD-3-Clause, approved, CQ23023 -npm/npmjs/-/ini/2.0.0, ISC, approved, clearlydefined -npm/npmjs/-/ini/4.1.1, ISC, approved, clearlydefined -npm/npmjs/-/inquirer/8.2.4, MIT, approved, clearlydefined -npm/npmjs/-/internal-slot/1.0.4, MIT, approved, #7118 -npm/npmjs/-/internmap/2.0.3, ISC, approved, clearlydefined -npm/npmjs/-/ip/1.1.5, MIT, approved, #126 -npm/npmjs/-/ipaddr.js/1.9.1, MIT, approved, clearlydefined -npm/npmjs/-/ipaddr.js/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-arguments/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/is-array-buffer/3.0.2, MIT, approved, #6248 -npm/npmjs/-/is-arrayish/0.2.1, MIT, approved, clearlydefined -npm/npmjs/-/is-arrayish/0.3.2, MIT, approved, clearlydefined -npm/npmjs/-/is-bigint/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/is-binary-path/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/is-boolean-object/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/is-callable/1.2.7, MIT, approved, clearlydefined -npm/npmjs/-/is-ci/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-core-module/2.11.0, MIT, approved, clearlydefined -npm/npmjs/-/is-core-module/2.12.0, MIT, approved, clearlydefined -npm/npmjs/-/is-date-object/1.0.5, MIT, approved, clearlydefined -npm/npmjs/-/is-docker/2.2.1, MIT, approved, clearlydefined -npm/npmjs/-/is-extglob/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/is-fullwidth-code-point/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-fullwidth-code-point/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-generator-function/1.0.10, MIT, approved, clearlydefined -npm/npmjs/-/is-glob/4.0.3, MIT, approved, clearlydefined -npm/npmjs/-/is-installed-globally/0.4.0, MIT, approved, clearlydefined -npm/npmjs/-/is-interactive/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-lambda/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-map/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-negative-zero/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-node-process/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/is-number-object/1.0.7, MIT, approved, clearlydefined -npm/npmjs/-/is-number/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-path-inside/3.0.3, MIT, approved, clearlydefined -npm/npmjs/-/is-plain-obj/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/is-plain-obj/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-plain-object/2.0.4, MIT, approved, clearlydefined -npm/npmjs/-/is-plain-object/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-potential-custom-element-name/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-regex/1.1.4, MIT, approved, clearlydefined -npm/npmjs/-/is-regexp/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/is-set/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-shared-array-buffer/1.0.2, MIT, approved, #1207 -npm/npmjs/-/is-stream/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-stream/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/is-string/1.0.7, MIT, approved, clearlydefined -npm/npmjs/-/is-symbol/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/is-typed-array/1.1.10, MIT, approved, #4853 -npm/npmjs/-/is-typedarray/1.0.0, MIT, approved, #2531 -npm/npmjs/-/is-unicode-supported/0.1.0, MIT, approved, clearlydefined -npm/npmjs/-/is-weakmap/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/is-weakref/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-weakset/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/is-what/3.14.1, MIT, approved, clearlydefined -npm/npmjs/-/is-wsl/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/isarray/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/isarray/2.0.5, MIT, approved, clearlydefined -npm/npmjs/-/isbinaryfile/4.0.10, MIT, approved, clearlydefined -npm/npmjs/-/isexe/2.0.0, ISC, approved, clearlydefined -npm/npmjs/-/isobject/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/isstream/0.1.2, MIT, approved, clearlydefined -npm/npmjs/-/istanbul-lib-coverage/3.2.0, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-lib-instrument/5.2.0, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-lib-instrument/5.2.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-lib-report/3.0.0, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-lib-source-maps/4.0.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/istanbul-reports/3.1.5, BSD-3-Clause AND MIT, approved, #1710 -npm/npmjs/-/jake/10.8.7, Apache-2.0 AND MIT, approved, #1316 -npm/npmjs/-/jasmine-core/4.6.0, MIT, approved, clearlydefined -npm/npmjs/-/jest-worker/27.5.1, 0BSD AND Apache-2.0 AND BSD-2-Clause AND MIT, approved, #1952 -npm/npmjs/-/jiti/1.18.2, MIT, approved, clearlydefined -npm/npmjs/-/jiti/1.21.0, MIT, approved, clearlydefined -npm/npmjs/-/js-levenshtein/1.1.6, MIT, approved, clearlydefined -npm/npmjs/-/js-sdsl/4.2.0, MIT AND (0BSD AND MIT), approved, #5025 -npm/npmjs/-/js-sha256/0.9.0, MIT, approved, clearlydefined -npm/npmjs/-/js-tokens/4.0.0, MIT, approved, #2401 -npm/npmjs/-/js-yaml/3.14.1, MIT, approved, clearlydefined -npm/npmjs/-/js-yaml/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/js2xmlparser/4.0.2, Apache-2.0, approved, clearlydefined -npm/npmjs/-/jsbn/0.1.1, MIT, approved, clearlydefined -npm/npmjs/-/jsdoc-type-pratt-parser/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/jsdom/16.7.0, LGPL-2.0-or-later AND MIT, approved, #1370 -npm/npmjs/-/jsesc/0.5.0, MIT, approved, clearlydefined -npm/npmjs/-/jsesc/2.5.2, MIT, approved, clearlydefined -npm/npmjs/-/json-parse-even-better-errors/2.3.1, MIT, approved, clearlydefined -npm/npmjs/-/json-parse-even-better-errors/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/json-schema-traverse/0.4.1, MIT, approved, clearlydefined -npm/npmjs/-/json-schema-traverse/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/json-schema/0.4.0, AFL-2.1 OR BSD-3-Clause, approved, #2410 -npm/npmjs/-/json-stable-stringify-without-jsonify/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/json-stringify-safe/5.0.1, ISC, approved, clearlydefined -npm/npmjs/-/json5/1.0.2, MIT, approved, CQ22351 -npm/npmjs/-/json5/2.2.3, MIT, approved, #2126 -npm/npmjs/-/jsonc-parser/3.2.0, MIT, approved, #12891 -npm/npmjs/-/jsonfile/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/jsonfile/6.1.0, MIT, approved, clearlydefined -npm/npmjs/-/jsonparse/1.3.1, MIT, approved, clearlydefined -npm/npmjs/-/jsprim/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/karma-chrome-launcher/3.2.0, MIT, approved, #8061 -npm/npmjs/-/karma-coverage/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/karma-jasmine/5.1.0, MIT, approved, clearlydefined -npm/npmjs/-/karma-sonarqube-reporter/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/karma-source-map-support/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/karma-spec-reporter/0.0.36, MIT, approved, clearlydefined -npm/npmjs/-/karma/6.4.2, MIT, approved, #8049 -npm/npmjs/-/keycloak-angular/14.2.0, MIT, approved, #13301 -npm/npmjs/-/keycloak-js/21.0.2, Apache-2.0 AND MIT, approved, #8025 -npm/npmjs/-/kind-of/6.0.3, MIT, approved, clearlydefined -npm/npmjs/-/klona/2.0.6, MIT, approved, clearlydefined -npm/npmjs/-/known-css-properties/0.27.0, MIT, approved, clearlydefined -npm/npmjs/-/knuth-shuffle-seeded/1.0.6, Apache-2.0, approved, clearlydefined -npm/npmjs/-/kuler/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/launch-editor/2.6.1, MIT, approved, #10975 -npm/npmjs/-/lazy-ass/1.6.0, MIT, approved, clearlydefined -npm/npmjs/-/less-loader/11.1.0, MIT, approved, clearlydefined -npm/npmjs/-/less/4.1.3, 0BSD AND Apache-2.0 AND BSD-2-Clause AND MIT, approved, #1527 -npm/npmjs/-/levn/0.4.1, MIT, approved, clearlydefined -npm/npmjs/-/license-webpack-plugin/4.0.2, ISC AND MIT AND (BSD-3-Clause AND ISC AND MIT), approved, #3303 -npm/npmjs/-/lilconfig/2.0.6, MIT, approved, clearlydefined -npm/npmjs/-/lilconfig/2.1.0, MIT, approved, #7313 -npm/npmjs/-/lines-and-columns/1.2.4, MIT, approved, clearlydefined -npm/npmjs/-/lines-and-columns/2.0.4, MIT, approved, clearlydefined -npm/npmjs/-/lint-staged/13.2.1, MIT, approved, #9206 -npm/npmjs/-/listr2/3.14.0, MIT, approved, clearlydefined -npm/npmjs/-/listr2/5.0.8, MIT, approved, clearlydefined -npm/npmjs/-/loader-runner/4.3.0, MIT, approved, clearlydefined -npm/npmjs/-/loader-utils/2.0.4, MIT, approved, #4986 -npm/npmjs/-/loader-utils/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/locate-path/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/locate-path/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/locate-path/7.2.0, MIT, approved, clearlydefined -npm/npmjs/-/lodash-es/4.17.21, MIT, approved, clearlydefined -npm/npmjs/-/lodash.debounce/4.0.8, MIT, approved, clearlydefined -npm/npmjs/-/lodash.merge/4.6.2, MIT, approved, clearlydefined -npm/npmjs/-/lodash.mergewith/4.6.2, MIT, approved, clearlydefined -npm/npmjs/-/lodash.once/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/lodash.truncate/4.4.2, MIT, approved, clearlydefined -npm/npmjs/-/lodash/4.17.21, CC0-1.0 AND MIT, approved, #2096 -npm/npmjs/-/log-symbols/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/log-update/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/log4js/6.9.1, Apache-2.0, approved, clearlydefined -npm/npmjs/-/logform/2.4.2, MIT, approved, clearlydefined -npm/npmjs/-/lower-case/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/lru-cache/5.1.1, ISC, approved, clearlydefined -npm/npmjs/-/lru-cache/6.0.0, ISC, approved, clearlydefined -npm/npmjs/-/lru-cache/7.18.3, MIT AND ISC, approved, #7614 -npm/npmjs/-/lru-cache/9.1.1, ISC AND MIT, approved, #8054 -npm/npmjs/-/luxon/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/lz-string/1.5.0, MIT AND WTFPL, approved, #8398 -npm/npmjs/-/magic-string/0.30.1, MIT, approved, #13189 -npm/npmjs/-/make-dir/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/make-dir/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/make-error/1.3.6, ISC, approved, clearlydefined -npm/npmjs/-/make-fetch-happen/10.2.1, ISC AND Apache-2.0, approved, #3077 -npm/npmjs/-/make-fetch-happen/11.1.0, ISC AND Apache-2.0, approved, #8022 -npm/npmjs/-/make-fetch-happen/11.1.1, ISC AND Apache-2.0, approved, #8022 -npm/npmjs/-/map-obj/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/map-obj/4.3.0, MIT, approved, clearlydefined -npm/npmjs/-/mathml-tag-names/2.1.3, MIT, approved, clearlydefined -npm/npmjs/-/mdn-data/2.0.30, CC0-1.0, approved, clearlydefined -npm/npmjs/-/media-typer/0.3.0, MIT, approved, clearlydefined -npm/npmjs/-/memfs/3.5.1, Unlicense, approved, #8397 -npm/npmjs/-/meow/9.0.0, MIT, approved, clearlydefined -npm/npmjs/-/merge-descriptors/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/merge-stream/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/merge2/1.4.1, MIT, approved, clearlydefined -npm/npmjs/-/methods/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/micromatch/4.0.5, MIT, approved, clearlydefined -npm/npmjs/-/mime-db/1.52.0, MIT, approved, clearlydefined -npm/npmjs/-/mime-types/2.1.35, MIT, approved, clearlydefined -npm/npmjs/-/mime/1.6.0, MIT, approved, clearlydefined -npm/npmjs/-/mime/2.6.0, MIT, approved, clearlydefined -npm/npmjs/-/mimic-fn/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/mimic-fn/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/min-indent/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/mini-css-extract-plugin/2.7.6, MIT, approved, #5004 -npm/npmjs/-/minimalistic-assert/1.0.1, ISC, approved, clearlydefined -npm/npmjs/-/minimatch/3.0.5, ISC, approved, clearlydefined -npm/npmjs/-/minimatch/3.1.2, ISC, approved, clearlydefined -npm/npmjs/-/minimatch/5.1.6, ISC, approved, #5952 -npm/npmjs/-/minimatch/6.2.0, ISC, approved, clearlydefined -npm/npmjs/-/minimatch/8.0.4, ISC, approved, #8026 -npm/npmjs/-/minimatch/9.0.3, ISC, approved, #9190 -npm/npmjs/-/minimist-options/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/minimist/1.2.8, MIT, approved, #5886 -npm/npmjs/-/minipass-collect/1.0.2, ISC, approved, clearlydefined -npm/npmjs/-/minipass-fetch/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/minipass-fetch/3.0.1, MIT, approved, #5764 -npm/npmjs/-/minipass-flush/1.0.5, ISC, approved, clearlydefined -npm/npmjs/-/minipass-json-stream/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/minipass-pipeline/1.2.4, ISC, approved, clearlydefined -npm/npmjs/-/minipass-sized/1.0.3, ISC, approved, clearlydefined -npm/npmjs/-/minipass/3.3.6, ISC, approved, clearlydefined -npm/npmjs/-/minipass/4.2.8, ISC, approved, #7573 -npm/npmjs/-/minipass/5.0.0, ISC, approved, clearlydefined -npm/npmjs/-/minizlib/2.1.2, MIT, approved, clearlydefined -npm/npmjs/-/mkdirp/0.5.6, MIT, approved, clearlydefined -npm/npmjs/-/mkdirp/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/module-alias/2.2.2, MIT, approved, clearlydefined -npm/npmjs/-/mrmime/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/ms/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/ms/2.1.2, MIT, approved, #5895 -npm/npmjs/-/ms/2.1.3, MIT, approved, #5895 -npm/npmjs/-/msw/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/multicast-dns/7.2.5, MIT, approved, clearlydefined -npm/npmjs/-/mute-stream/0.0.8, ISC, approved, clearlydefined -npm/npmjs/-/mz/2.7.0, MIT, approved, clearlydefined -npm/npmjs/-/nanoclone/0.2.1, MIT, approved, clearlydefined -npm/npmjs/-/nanoid/3.3.6, MIT, approved, #7571 -npm/npmjs/-/nanoid/3.3.7, MIT, approved, #7571 -npm/npmjs/-/natural-compare-lite/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/natural-compare/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/needle/3.2.0, MIT, approved, #4963 -npm/npmjs/-/negotiator/0.6.3, MIT, approved, clearlydefined -npm/npmjs/-/neo-async/2.6.2, MIT, approved, clearlydefined -npm/npmjs/-/nice-napi/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/no-case/3.0.4, MIT, approved, clearlydefined -npm/npmjs/-/node-addon-api/3.2.1, MIT, approved, clearlydefined -npm/npmjs/-/node-fetch/2.6.7, MIT, approved, #6954 -npm/npmjs/-/node-forge/1.3.1, (BSD-3-Clause OR GPL-2.0-only) AND MIT, approved, #3014 -npm/npmjs/-/node-gyp-build/4.8.0, MIT, approved, clearlydefined -npm/npmjs/-/node-gyp/9.3.1, MIT AND BSD-3-Clause, approved, #3783 -npm/npmjs/-/node-hook/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/node-releases/2.0.10, MIT, approved, #1954 -npm/npmjs/-/node-releases/2.0.14, MIT, approved, #1954 -npm/npmjs/-/nopt/6.0.0, ISC, approved, clearlydefined -npm/npmjs/-/normalize-package-data/2.5.0, BSD-2-Clause AND Apache-2.0 AND MIT, approved, #2499 -npm/npmjs/-/normalize-package-data/3.0.3, BSD-2-Clause, approved, #11614 -npm/npmjs/-/normalize-package-data/5.0.0, BSD-3-Clause, approved, #5757 -npm/npmjs/-/normalize-path/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/normalize-range/0.1.2, MIT, approved, clearlydefined -npm/npmjs/-/npm-bundled/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/npm-install-checks/6.0.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/npm-normalize-package-bin/3.0.0, ISC, approved, #8252 -npm/npmjs/-/npm-package-arg/10.1.0, ISC, approved, #5758 -npm/npmjs/-/npm-packlist/7.0.4, ISC, approved, #5755 -npm/npmjs/-/npm-pick-manifest/8.0.1, ISC, approved, clearlydefined -npm/npmjs/-/npm-registry-fetch/14.0.3, ISC, approved, #5743 -npm/npmjs/-/npm-run-path/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/npm-run-path/5.1.0, MIT, approved, clearlydefined -npm/npmjs/-/npmlog/6.0.2, ISC, approved, clearlydefined -npm/npmjs/-/nth-check/2.1.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/nwsapi/2.2.7, MIT, approved, #7909 -npm/npmjs/-/nx/16.5.1, MIT AND MIT-0 AND (CC0-1.0 AND MIT), approved, #9380 -npm/npmjs/-/object-assign/4.1.1, MIT, approved, clearlydefined -npm/npmjs/-/object-hash/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/object-inspect/1.12.3, MIT, approved, clearlydefined -npm/npmjs/-/object-is/1.1.5, MIT, approved, clearlydefined -npm/npmjs/-/object-keys/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/object-path/0.11.8, MIT, approved, clearlydefined -npm/npmjs/-/object.assign/4.1.4, MIT, approved, #3232 -npm/npmjs/-/object.values/1.1.6, MIT, approved, #4665 -npm/npmjs/-/obuf/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/on-finished/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/on-finished/2.4.1, MIT, approved, clearlydefined -npm/npmjs/-/on-headers/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/once/1.4.0, ISC, approved, clearlydefined -npm/npmjs/-/one-time/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/onetime/5.1.2, MIT, approved, clearlydefined -npm/npmjs/-/onetime/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/open/8.4.2, MIT, approved, #7102 -npm/npmjs/-/opener/1.5.2, MIT AND WTFPL AND WTFPL, approved, #11619 -npm/npmjs/-/optionator/0.9.1, MIT, approved, #9208 -npm/npmjs/-/ora/5.4.1, MIT, approved, clearlydefined -npm/npmjs/-/os-tmpdir/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/ospath/1.2.2, MIT, approved, clearlydefined -npm/npmjs/-/outvariant/1.4.0, MIT, approved, clearlydefined -npm/npmjs/-/p-limit/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/p-limit/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/p-limit/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/p-locate/4.1.0, MIT, approved, clearlydefined -npm/npmjs/-/p-locate/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/p-locate/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/p-map/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/p-retry/4.6.2, MIT, approved, clearlydefined -npm/npmjs/-/p-try/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/pacote/15.2.0, ISC AND (ISC AND MIT), approved, #8751 -npm/npmjs/-/pad-right/0.2.2, MIT, approved, clearlydefined -npm/npmjs/-/pako/1.0.11, MIT AND Zlib, approved, clearlydefined -npm/npmjs/-/parent-module/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/parse-json/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/parse-node-version/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/parse5-html-rewriting-stream/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/parse5-sax-parser/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/parse5/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/parse5/7.1.2, MIT, approved, clearlydefined -npm/npmjs/-/parseurl/1.3.3, MIT, approved, clearlydefined -npm/npmjs/-/path-exists/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/path-exists/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/path-is-absolute/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/path-key/3.1.1, MIT, approved, clearlydefined -npm/npmjs/-/path-key/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/path-parse/1.0.7, MIT, approved, clearlydefined -npm/npmjs/-/path-scurry/1.7.0, BlueOak-1.0.0, approved, #8028 -npm/npmjs/-/path-to-regexp/0.1.7, MIT, approved, clearlydefined -npm/npmjs/-/path-to-regexp/6.2.0, MIT, approved, clearlydefined -npm/npmjs/-/path-type/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/pend/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/performance-now/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/picocolors/1.0.0, ISC, approved, clearlydefined -npm/npmjs/-/picomatch/2.3.1, MIT, approved, clearlydefined -npm/npmjs/-/pidtree/0.6.0, MIT, approved, clearlydefined -npm/npmjs/-/pify/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/pify/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/pirates/4.0.5, MIT, approved, #680 -npm/npmjs/-/piscina/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/pkg-dir/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/playwright-core/1.32.3, Apache-2.0 AND MPL-2.0 AND (BSD-2-Clause AND MPL-2.0) AND BSD-2-Clause AND (BSD-2-Clause AND LGPL-2.0-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later) AND (Apache-2.0 AND MIT) AND ISC AND MIT AND (BSD-2-Clause AND BSD-3-Clause AND CC-BY-SA-4.0 AND ISC AND MIT) AND CC0-1.0 AND (Apache-2.0 AND CC-BY-4.0 AND ISC AND MIT) AND OFL-1.1 AND (Apache-2.0 AND BSD-3-Clause AND MIT) AND (BSD-3-Clause AND MIT) AND BSD-3-Clause, approved, #8060 -npm/npmjs/-/playwright-webkit/1.32.3, Apache-2.0 AND MPL-2.0 AND (BSD-2-Clause AND MPL-2.0) AND BSD-2-Clause AND (BSD-2-Clause AND LGPL-2.0-or-later AND LGPL-3.0-only AND LGPL-3.0-or-later) AND (Apache-2.0 AND MIT) AND ISC AND MIT AND (BSD-2-Clause AND BSD-3-Clause AND CC-BY-SA-4.0 AND ISC AND MIT) AND CC0-1.0 AND (Apache-2.0 AND CC-BY-4.0 AND ISC AND MIT) AND OFL-1.1 AND (Apache-2.0 AND BSD-3-Clause AND MIT) AND (BSD-3-Clause AND MIT) AND BSD-3-Clause, approved, #8036 -npm/npmjs/-/postcss-import/14.1.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-import/15.1.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-js/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-load-config/3.1.4, MIT, approved, clearlydefined -npm/npmjs/-/postcss-loader/7.2.4, MIT, approved, clearlydefined -npm/npmjs/-/postcss-loader/7.3.3, MIT, approved, clearlydefined -npm/npmjs/-/postcss-media-query-parser/0.2.3, MIT, approved, clearlydefined -npm/npmjs/-/postcss-modules-extract-imports/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/postcss-modules-local-by-default/4.0.4, MIT, approved, #8508 -npm/npmjs/-/postcss-modules-scope/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/postcss-modules-values/4.0.0, ISC, approved, clearlydefined -npm/npmjs/-/postcss-nested/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-resolve-nested-selector/0.1.1, MIT, approved, clearlydefined -npm/npmjs/-/postcss-safe-parser/6.0.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss-scss/4.0.6, MIT, approved, clearlydefined -npm/npmjs/-/postcss-selector-parser/6.0.11, MIT, approved, #5056 -npm/npmjs/-/postcss-selector-parser/6.0.12, MIT, approved, #5056 -npm/npmjs/-/postcss-value-parser/4.2.0, MIT, approved, clearlydefined -npm/npmjs/-/postcss/8.4.31, MIT, approved, #3545 -npm/npmjs/-/postcss/8.4.33, MIT, approved, #3545 -npm/npmjs/-/prelude-ls/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/prettier/2.8.8, MIT AND (0BSD AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND CC-BY-SA-4.0 AND ISC AND MIT) AND BSD-2-Clause, approved, #6871 -npm/npmjs/-/pretty-bytes/5.6.0, MIT, approved, clearlydefined -npm/npmjs/-/pretty-format/27.5.1, 0BSD AND Apache-2.0 AND BSD-2-Clause AND MIT, approved, #1948 -npm/npmjs/-/proc-log/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/process-nextick-args/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/process/0.11.10, MIT, approved, CQ23452 -npm/npmjs/-/progress/2.0.3, MIT, approved, clearlydefined -npm/npmjs/-/promise-inflight/1.0.1, ISC, approved, clearlydefined -npm/npmjs/-/promise-retry/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/property-expr/2.0.5, MIT, approved, clearlydefined -npm/npmjs/-/proxy-addr/2.0.7, MIT, approved, clearlydefined -npm/npmjs/-/proxy-from-env/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/proxy-from-env/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/prr/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/psl/1.9.0, MIT AND CC0-1.0, approved, #3080 -npm/npmjs/-/pump/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/punycode/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/punycode/2.3.0, MIT, approved, #6373 -npm/npmjs/-/qjobs/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/qs/6.10.5, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/qs/6.11.0, BSD-3-Clause, approved, #7556 -npm/npmjs/-/querystringify/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/queue-microtask/1.2.3, MIT, approved, clearlydefined -npm/npmjs/-/quick-lru/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/quick-lru/5.1.1, MIT, approved, clearlydefined -npm/npmjs/-/randombytes/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/range-parser/1.2.1, MIT, approved, clearlydefined -npm/npmjs/-/raw-body/2.5.1, MIT, approved, clearlydefined -npm/npmjs/-/raw-body/2.5.2, MIT, approved, clearlydefined -npm/npmjs/-/react-is/17.0.2, MIT, approved, clearlydefined -npm/npmjs/-/read-cache/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/read-package-json-fast/3.0.2, ISC, approved, #5752 -npm/npmjs/-/read-package-json/6.0.0, ISC, approved, #7568 -npm/npmjs/-/read-pkg-up/7.0.1, MIT, approved, clearlydefined -npm/npmjs/-/read-pkg/5.2.0, MIT, approved, clearlydefined -npm/npmjs/-/readable-stream/2.3.8, MIT, approved, #945 -npm/npmjs/-/readable-stream/3.6.2, MIT, approved, CQ22627 -npm/npmjs/-/readdirp/3.6.0, MIT, approved, #2977 -npm/npmjs/-/redent/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/reflect-metadata/0.1.13, Apache-2.0, approved, clearlydefined -npm/npmjs/-/regenerate-unicode-properties/10.1.0, MIT, approved, #10903 -npm/npmjs/-/regenerate/1.4.2, MIT, approved, clearlydefined -npm/npmjs/-/regenerator-runtime/0.13.11, MIT, approved, #4978 -npm/npmjs/-/regenerator-transform/0.15.2, MIT, approved, #5001 -npm/npmjs/-/regex-parser/2.2.11, MIT, approved, clearlydefined -npm/npmjs/-/regexp-match-indices/1.0.2, Apache-2.0, approved, clearlydefined -npm/npmjs/-/regexp-tree/0.1.24, MIT, approved, clearlydefined -npm/npmjs/-/regexp.prototype.flags/1.5.1, MIT, approved, #8199 -npm/npmjs/-/regexpu-core/5.3.2, MIT, approved, #7117 -npm/npmjs/-/regjsparser/0.9.1, BSD-2-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #3329 -npm/npmjs/-/repeat-string/1.6.1, MIT, approved, clearlydefined -npm/npmjs/-/request-progress/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/require-directory/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/require-from-string/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/requires-port/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve-from/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve-from/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve-pkg/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve-url-loader/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/resolve/1.22.1, MIT AND ISC, approved, #2409 -npm/npmjs/-/resolve/1.22.2, MIT AND ISC, approved, #2409 -npm/npmjs/-/restore-cursor/3.1.0, MIT, approved, clearlydefined -npm/npmjs/-/retry/0.12.0, MIT, approved, clearlydefined -npm/npmjs/-/retry/0.13.1, MIT, approved, clearlydefined -npm/npmjs/-/reusify/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/rfdc/1.3.0, MIT, approved, clearlydefined -npm/npmjs/-/rimraf/3.0.2, ISC, approved, clearlydefined -npm/npmjs/-/robust-predicates/3.0.1, Unlicense, approved, #3305 -npm/npmjs/-/rollup/3.29.4, MIT, approved, clearlydefined -npm/npmjs/-/run-async/2.4.1, MIT, approved, clearlydefined -npm/npmjs/-/run-parallel/1.2.0, MIT, approved, clearlydefined -npm/npmjs/-/rw/1.3.3, BSD-3-Clause, approved, clearlydefined -npm/npmjs/-/rxjs/6.6.7, Apache-2.0 AND MIT, approved, #941 -npm/npmjs/-/rxjs/7.8.0, Apache-2.0 AND (0BSD AND Apache-2.0) AND 0BSD, approved, #5993 -npm/npmjs/-/rxjs/7.8.1, Apache-2.0 AND (0BSD AND Apache-2.0) AND 0BSD, approved, #5993 -npm/npmjs/-/safe-buffer/5.1.2, MIT, approved, clearlydefined -npm/npmjs/-/safe-buffer/5.2.1, MIT, approved, clearlydefined -npm/npmjs/-/safe-regex-test/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/safe-stable-stringify/2.4.0, MIT, approved, clearlydefined -npm/npmjs/-/safer-buffer/2.1.2, MIT, approved, clearlydefined -npm/npmjs/-/safevalues/0.3.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/sass-loader/13.3.2, MIT, approved, clearlydefined -npm/npmjs/-/sass/1.64.1, Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT AND MIT, approved, #9722 -npm/npmjs/-/sax/1.2.4, ISC AND MIT AND ISC, approved, #5889 -npm/npmjs/-/saxes/5.0.1, ISC, approved, clearlydefined -npm/npmjs/-/schema-utils/3.1.1, MIT, approved, #7963 -npm/npmjs/-/schema-utils/3.3.0, MIT, approved, #8952 -npm/npmjs/-/schema-utils/4.0.1, MIT, approved, #8213 -npm/npmjs/-/seed-random/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/select-hose/2.0.0, MIT, approved, #145 -npm/npmjs/-/selfsigned/2.1.1, MIT, approved, clearlydefined -npm/npmjs/-/semver/5.7.2, ISC, approved, #5900 -npm/npmjs/-/semver/6.3.1, ISC, approved, clearlydefined -npm/npmjs/-/semver/7.3.8, ISC, approved, clearlydefined -npm/npmjs/-/semver/7.5.3, ISC, approved, clearlydefined -npm/npmjs/-/semver/7.5.4, ISC, approved, clearlydefined -npm/npmjs/-/semver/7.6.0, ISC, approved, clearlydefined -npm/npmjs/-/send/0.18.0, MIT, approved, clearlydefined -npm/npmjs/-/serialize-javascript/6.0.1, BSD-3-Clause, approved, #12680 -npm/npmjs/-/serialize-javascript/6.0.2, BSD-3-Clause, approved, #12680 -npm/npmjs/-/serve-index/1.9.1, MIT, approved, clearlydefined -npm/npmjs/-/serve-static/1.15.0, MIT, approved, clearlydefined -npm/npmjs/-/set-blocking/2.0.0, ISC, approved, #5899 -npm/npmjs/-/set-cookie-parser/2.4.8, MIT, approved, clearlydefined -npm/npmjs/-/set-function-length/1.2.0, MIT, approved, #12772 -npm/npmjs/-/set-function-name/2.0.1, MIT, approved, #10590 -npm/npmjs/-/setprototypeof/1.1.0, ISC, approved, clearlydefined -npm/npmjs/-/setprototypeof/1.2.0, ISC, approved, clearlydefined -npm/npmjs/-/shallow-clone/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/shebang-command/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/shebang-regex/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/shell-quote/1.8.1, MIT, approved, #7044 -npm/npmjs/-/side-channel/1.0.4, MIT, approved, clearlydefined -npm/npmjs/-/signal-exit/3.0.7, ISC, approved, #5892 -npm/npmjs/-/sigstore/1.9.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/simple-swizzle/0.2.2, MIT, approved, clearlydefined -npm/npmjs/-/sirv/1.0.19, MIT, approved, clearlydefined -npm/npmjs/-/slash/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/slash/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/slice-ansi/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/slice-ansi/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/slice-ansi/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/smart-buffer/4.2.0, MIT, approved, clearlydefined -npm/npmjs/-/socket.io-adapter/2.5.2, MIT, approved, #13465 -npm/npmjs/-/socket.io-parser/4.2.3, MIT, approved, #8535 -npm/npmjs/-/socket.io/4.6.1, MIT, approved, #7121 -npm/npmjs/-/sockjs/0.3.24, MIT, approved, #2985 -npm/npmjs/-/socks-proxy-agent/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/socks/2.6.2, MIT, approved, clearlydefined -npm/npmjs/-/source-map-js/1.0.2, BSD-3-Clause, approved, #2412 -npm/npmjs/-/source-map-loader/4.0.1, MIT, approved, clearlydefined -npm/npmjs/-/source-map-resolve/0.6.0, MIT, approved, clearlydefined -npm/npmjs/-/source-map-support/0.5.21, MIT, approved, clearlydefined -npm/npmjs/-/source-map/0.6.1, BSD-3-Clause, approved, #2417 -npm/npmjs/-/source-map/0.7.4, BSD-3-Clause, approved, #2416 -npm/npmjs/-/spdx-correct/3.1.1, Apache-2.0, approved, #990 -npm/npmjs/-/spdx-exceptions/2.3.0, CC-BY-3.0, approved, clearlydefined -npm/npmjs/-/spdx-expression-parse/3.0.1, MIT, approved, #1127 -npm/npmjs/-/spdx-license-ids/3.0.11, CC0-1.0, approved, #989 -npm/npmjs/-/spdy-transport/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/spdy/4.0.2, MIT, approved, #2926 -npm/npmjs/-/sprintf-js/1.0.3, BSD-3-Clause, approved, #949 -npm/npmjs/-/sshpk/1.17.0, MIT, approved, clearlydefined -npm/npmjs/-/ssri/10.0.4, ISC, approved, #5768 -npm/npmjs/-/ssri/9.0.0, CC0-1.0 AND ISC, approved, #2683 -npm/npmjs/-/stack-trace/0.0.10, MIT, approved, clearlydefined -npm/npmjs/-/stackframe/1.3.4, MIT, approved, clearlydefined -npm/npmjs/-/statuses/1.5.0, MIT, approved, clearlydefined -npm/npmjs/-/statuses/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/stop-iteration-iterator/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/streamroller/3.1.5, MIT, approved, clearlydefined -npm/npmjs/-/strict-event-emitter/0.2.8, MIT, approved, clearlydefined -npm/npmjs/-/strict-event-emitter/0.4.4, MIT, approved, #7077 -npm/npmjs/-/string-argv/0.3.1, MIT, approved, clearlydefined -npm/npmjs/-/string-width/4.2.3, MIT, approved, clearlydefined -npm/npmjs/-/string-width/5.1.2, MIT, approved, clearlydefined -npm/npmjs/-/string.prototype.trimend/1.0.6, MIT, approved, #4564 -npm/npmjs/-/string.prototype.trimstart/1.0.6, MIT, approved, #4647 -npm/npmjs/-/string_decoder/1.1.1, MIT, approved, clearlydefined -npm/npmjs/-/string_decoder/1.3.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-ansi/6.0.1, MIT, approved, clearlydefined -npm/npmjs/-/strip-ansi/7.0.1, MIT, approved, clearlydefined -npm/npmjs/-/strip-bom/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-final-newline/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-final-newline/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-indent/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/strip-json-comments/3.1.1, MIT, approved, clearlydefined -npm/npmjs/-/strong-log-transformer/2.1.0, Apache-2.0, approved, #1138 -npm/npmjs/-/style-search/0.1.0, ISC, approved, clearlydefined -npm/npmjs/-/stylelint-config-recommended-scss/11.0.0, MIT, approved, #8068 -npm/npmjs/-/stylelint-config-recommended/12.0.0, MIT, approved, #8039 -npm/npmjs/-/stylelint-config-standard-scss/9.0.0, MIT, approved, #8024 -npm/npmjs/-/stylelint-config-standard/33.0.0, MIT, approved, #8038 -npm/npmjs/-/stylelint-scss/4.6.0, MIT, approved, clearlydefined -npm/npmjs/-/stylelint/15.6.0, MIT, approved, #8034 -npm/npmjs/-/sucrase/3.32.0, MIT, approved, #8042 -npm/npmjs/-/supports-color/5.5.0, MIT, approved, clearlydefined -npm/npmjs/-/supports-color/7.2.0, MIT, approved, clearlydefined -npm/npmjs/-/supports-color/8.1.1, MIT, approved, clearlydefined -npm/npmjs/-/supports-hyperlinks/3.0.0, MIT, approved, clearlydefined -npm/npmjs/-/supports-preserve-symlinks-flag/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/svg-tags/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/symbol-observable/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/symbol-tree/3.2.4, MIT, approved, clearlydefined -npm/npmjs/-/table/6.8.1, BSD-3-Clause, approved, #4596 -npm/npmjs/-/tailwindcss/3.3.1, MIT AND (Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND ISC AND MIT) AND CC0-1.0, approved, #8390 -npm/npmjs/-/tapable/2.2.1, MIT, approved, clearlydefined -npm/npmjs/-/tar-stream/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/tar/6.1.14, ISC, approved, #4566 -npm/npmjs/-/terser-webpack-plugin/5.3.1, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #7461 -npm/npmjs/-/terser-webpack-plugin/5.3.10, MIT AND (Apache-2.0 AND MIT) AND Apache-2.0, approved, #7461 -npm/npmjs/-/terser/5.16.3, BSD-2-Clause AND BSD-3-Clause AND BSD-2-Clause AND ISC, approved, #7045 -npm/npmjs/-/terser/5.19.2, BSD-2-Clause AND BSD-3-Clause AND BSD-2-Clause, approved, #9355 -npm/npmjs/-/terser/5.27.0, BSD-2-Clause AND (BSD-2-Clause AND BSD-3-Clause) AND ISC, approved, #12904 -npm/npmjs/-/test-exclude/6.0.0, ISC, approved, clearlydefined -npm/npmjs/-/text-hex/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/text-table/0.2.0, MIT, approved, clearlydefined -npm/npmjs/-/thenify-all/1.6.0, MIT, approved, clearlydefined -npm/npmjs/-/thenify/3.3.1, MIT, approved, clearlydefined -npm/npmjs/-/throttleit/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/through/2.3.8, Apache-2.0 AND MIT, approved, #1036 -npm/npmjs/-/thunky/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/tmp/0.0.33, MIT, approved, clearlydefined -npm/npmjs/-/tmp/0.2.1, MIT, approved, clearlydefined -npm/npmjs/-/to-fast-properties/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/to-regex-range/5.0.1, MIT, approved, clearlydefined -npm/npmjs/-/toidentifier/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/toposort/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/totalist/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/tough-cookie/4.1.3, BSD-3-Clause AND MIT, approved, #8743 -npm/npmjs/-/tr46/0.0.3, MIT, approved, clearlydefined -npm/npmjs/-/tr46/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/tree-kill/1.2.2, MIT, approved, clearlydefined -npm/npmjs/-/trim-newlines/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/triple-beam/1.3.0, MIT, approved, clearlydefined -npm/npmjs/-/ts-interface-checker/0.1.13, Apache-2.0, approved, clearlydefined -npm/npmjs/-/ts-loader/9.4.2, MIT AND ISC, approved, #5028 -npm/npmjs/-/ts-node/10.9.1, MIT, approved, clearlydefined -npm/npmjs/-/tsconfig-paths/3.14.1, MIT, approved, clearlydefined -npm/npmjs/-/tsconfig-paths/4.1.2, MIT, approved, #5390 -npm/npmjs/-/tsconfig-paths/4.2.0, MIT, approved, #7709 -npm/npmjs/-/tslib/1.14.1, 0BSD, approved, clearlydefined -npm/npmjs/-/tslib/2.5.0, 0BSD, approved, #6747 -npm/npmjs/-/tslib/2.6.1, 0BSD, approved, #9189 -npm/npmjs/-/tslib/2.6.2, 0BSD, approved, #9189 -npm/npmjs/-/tsutils/3.21.0, MIT, approved, clearlydefined -npm/npmjs/-/tuf-js/1.1.7, MIT, approved, #7585 -npm/npmjs/-/tunnel-agent/0.6.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/tweetnacl/0.14.5, Unlicense, approved, #1035 -npm/npmjs/-/type-check/0.4.0, MIT, approved, clearlydefined -npm/npmjs/-/type-fest/0.18.1, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/0.20.2, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/0.21.3, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/0.6.0, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/0.8.1, MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-fest/2.19.0, CC0-1.0 OR MIT OR (CC0-1.0 AND MIT), approved, clearlydefined -npm/npmjs/-/type-is/1.6.18, MIT, approved, clearlydefined -npm/npmjs/-/typed-array-length/1.0.4, MIT, approved, #6246 -npm/npmjs/-/typed-assert/1.0.9, MIT, approved, clearlydefined -npm/npmjs/-/typescript/4.9.5, Apache-2.0 AND (CC-BY-4.0 AND LicenseRef-scancode-khronos AND LicenseRef-scancode-unicode AND MIT AND W3C-20150513), approved, #4979 -npm/npmjs/-/ua-parser-js/0.7.35, MIT, approved, clearlydefined -npm/npmjs/-/unbox-primitive/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/unicode-canonical-property-names-ecmascript/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/unicode-match-property-ecmascript/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/unicode-match-property-value-ecmascript/2.1.0, MIT, approved, #4991 -npm/npmjs/-/unicode-property-aliases-ecmascript/2.1.0, MIT, approved, clearlydefined -npm/npmjs/-/unique-filename/2.0.1, ISC, approved, clearlydefined -npm/npmjs/-/unique-filename/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/unique-slug/3.0.0, ISC, approved, clearlydefined -npm/npmjs/-/unique-slug/4.0.0, ISC, approved, clearlydefined -npm/npmjs/-/universalify/0.1.2, MIT, approved, clearlydefined -npm/npmjs/-/universalify/0.2.0, MIT, approved, clearlydefined -npm/npmjs/-/universalify/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/unpipe/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/untildify/4.0.0, MIT, approved, clearlydefined -npm/npmjs/-/update-browserslist-db/1.0.11, MIT, approved, #8237 -npm/npmjs/-/update-browserslist-db/1.0.13, MIT, approved, #8237 -npm/npmjs/-/upper-case-first/2.0.2, MIT, approved, clearlydefined -npm/npmjs/-/uri-js/4.4.1, BSD-2-Clause, approved, #1086 -npm/npmjs/-/url-parse/1.5.10, MIT, approved, clearlydefined -npm/npmjs/-/util-arity/1.1.0, MIT, approved, clearlydefined -npm/npmjs/-/util-deprecate/1.0.2, MIT, approved, #5885 -npm/npmjs/-/util/0.12.5, MIT, approved, clearlydefined -npm/npmjs/-/utils-merge/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/uuid/8.3.2, MIT AND (BSD-3-Clause AND MIT), approved, #2438 -npm/npmjs/-/uuid/9.0.0, MIT AND (BSD-3-Clause AND MIT), approved, #6869 -npm/npmjs/-/v8-compile-cache-lib/3.0.1, MIT, approved, clearlydefined -npm/npmjs/-/v8-compile-cache/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/validate-npm-package-license/3.0.4, Apache-2.0 AND (Apache-2.0 AND BSD-2-Clause), approved, #2562 -npm/npmjs/-/validate-npm-package-name/5.0.0, ISC, approved, clearlydefined -npm/npmjs/-/vary/1.1.2, MIT, approved, clearlydefined -npm/npmjs/-/verror/1.10.0, MIT, approved, clearlydefined -npm/npmjs/-/verror/1.10.1, MIT, approved, clearlydefined -npm/npmjs/-/vite/4.5.2, MIT, approved, clearlydefined -npm/npmjs/-/void-elements/2.0.1, MIT, approved, clearlydefined -npm/npmjs/-/w3c-hr-time/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/w3c-xmlserializer/2.0.0, MIT, approved, clearlydefined -npm/npmjs/-/watchpack/2.4.0, MIT, approved, clearlydefined -npm/npmjs/-/wbuf/1.7.3, MIT, approved, clearlydefined -npm/npmjs/-/wcwidth/1.0.1, MIT, approved, #944 -npm/npmjs/-/web-encoding/1.1.5, MIT, approved, clearlydefined -npm/npmjs/-/webidl-conversions/3.0.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/webidl-conversions/5.0.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/webidl-conversions/6.1.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/-/webpack-bundle-analyzer/4.8.0, MIT, approved, clearlydefined -npm/npmjs/-/webpack-dev-middleware/5.3.3, MIT, approved, clearlydefined -npm/npmjs/-/webpack-dev-middleware/6.1.1, MIT, approved, clearlydefined -npm/npmjs/-/webpack-dev-server/4.15.1, MIT, approved, #8400 -npm/npmjs/-/webpack-merge/5.10.0, MIT, approved, #12055 -npm/npmjs/-/webpack-merge/5.9.0, MIT, approved, #8760 -npm/npmjs/-/webpack-sources/3.2.3, MIT, approved, clearlydefined -npm/npmjs/-/webpack-subresource-integrity/5.1.0, MIT AND (BSD-2-Clause AND MIT), approved, #3307 -npm/npmjs/-/webpack/5.76.1, MIT, approved, #7409 -npm/npmjs/-/webpack/5.88.2, MIT, approved, #9185 -npm/npmjs/-/websocket-driver/0.7.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/websocket-extensions/0.1.4, Apache-2.0, approved, CQ23021 -npm/npmjs/-/whatwg-encoding/1.0.5, MIT, approved, clearlydefined -npm/npmjs/-/whatwg-mimetype/2.3.0, MIT, approved, clearlydefined -npm/npmjs/-/whatwg-url/5.0.0, MIT, approved, clearlydefined -npm/npmjs/-/whatwg-url/8.7.0, MIT, approved, clearlydefined -npm/npmjs/-/which-boxed-primitive/1.0.2, MIT, approved, clearlydefined -npm/npmjs/-/which-collection/1.0.1, MIT, approved, clearlydefined -npm/npmjs/-/which-typed-array/1.1.13, MIT, approved, #4864 -npm/npmjs/-/which/1.3.1, ISC, approved, clearlydefined -npm/npmjs/-/which/2.0.2, ISC, approved, clearlydefined -npm/npmjs/-/which/3.0.0, ISC, approved, #8246 -npm/npmjs/-/wide-align/1.1.5, ISC, approved, clearlydefined -npm/npmjs/-/wildcard/2.0.1, MIT, approved, #8274 -npm/npmjs/-/winston-transport/4.5.0, MIT, approved, clearlydefined -npm/npmjs/-/winston/3.8.2, MIT, approved, clearlydefined -npm/npmjs/-/word-wrap/1.2.5, MIT, approved, clearlydefined -npm/npmjs/-/wrap-ansi/6.2.0, MIT, approved, clearlydefined -npm/npmjs/-/wrap-ansi/7.0.0, MIT, approved, clearlydefined -npm/npmjs/-/wrappy/1.0.2, ISC, approved, clearlydefined -npm/npmjs/-/write-file-atomic/5.0.0, ISC, approved, #8219 -npm/npmjs/-/ws/7.5.7, MIT, approved, #1940 -npm/npmjs/-/ws/7.5.9, MIT, approved, #1940 -npm/npmjs/-/ws/8.11.0, MIT, approved, clearlydefined -npm/npmjs/-/ws/8.16.0, MIT, approved, clearlydefined -npm/npmjs/-/xml-name-validator/3.0.0, Apache-2.0, approved, clearlydefined -npm/npmjs/-/xmlbuilder/15.1.1, MIT, approved, clearlydefined -npm/npmjs/-/xmlchars/2.2.0, MIT, approved, clearlydefined -npm/npmjs/-/xmlcreate/2.0.4, Apache-2.0, approved, clearlydefined -npm/npmjs/-/y18n/5.0.8, ISC, approved, clearlydefined -npm/npmjs/-/yallist/3.1.1, ISC, approved, clearlydefined -npm/npmjs/-/yallist/4.0.0, ISC, approved, clearlydefined -npm/npmjs/-/yaml/1.10.2, ISC, approved, clearlydefined -npm/npmjs/-/yaml/2.2.2, ISC, approved, #7343 -npm/npmjs/-/yargs-parser/20.2.9, ISC, approved, clearlydefined -npm/npmjs/-/yargs-parser/21.1.1, ISC, approved, clearlydefined -npm/npmjs/-/yargs/16.2.0, MIT, approved, clearlydefined -npm/npmjs/-/yargs/17.7.2, MIT, approved, #8222 -npm/npmjs/-/yauzl/2.10.0, MIT, approved, clearlydefined -npm/npmjs/-/yn/3.1.1, MIT, approved, clearlydefined -npm/npmjs/-/yocto-queue/0.1.0, MIT, approved, clearlydefined -npm/npmjs/-/yocto-queue/1.0.0, MIT, approved, clearlydefined -npm/npmjs/-/yup/0.32.11, MIT, approved, clearlydefined -npm/npmjs/-/zone.js/0.13.0, MIT, approved, clearlydefined -npm/npmjs/@ampproject/remapping/2.2.1, Apache-2.0, approved, clearlydefined -npm/npmjs/@angular-builders/custom-webpack/16.0.1, MIT, approved, clearlydefined -npm/npmjs/@angular-devkit/architect/0.1602.12, MIT, approved, #13306 -npm/npmjs/@angular-devkit/build-angular/16.2.12, MIT, approved, #13294 -npm/npmjs/@angular-devkit/build-webpack/0.1602.12, MIT, approved, #13297 -npm/npmjs/@angular-devkit/core/16.2.12, MIT, approved, #13296 -npm/npmjs/@angular-devkit/schematics/16.2.12, MIT, approved, #13303 -npm/npmjs/@angular-eslint/builder/16.3.1, MIT, approved, #13299 -npm/npmjs/@angular-eslint/bundled-angular-compiler/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/eslint-plugin-template/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/eslint-plugin/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/schematics/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/template-parser/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-eslint/utils/16.3.1, MIT, approved, clearlydefined -npm/npmjs/@angular-material-components/datetime-picker/16.0.1, MIT, approved, clearlydefined -npm/npmjs/@angular/animations/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/cdk/16.2.13, MIT, approved, clearlydefined -npm/npmjs/@angular/cli/16.2.12, MIT AND Apache-2.0 AND (ISC AND BSD-2-Clause AND BSD-3-Clause AND MIT), approved, #13307 -npm/npmjs/@angular/common/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/compiler-cli/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/compiler/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/core/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/forms/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/language-service/16.2.12, MIT AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND Unlicense AND CC-BY-4.0 AND LicenseRef-Public-domain, approved, #11035 -npm/npmjs/@angular/material/16.2.13, MIT, approved, #13302 -npm/npmjs/@angular/platform-browser-dynamic/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/platform-browser/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@angular/router/16.2.12, MIT, approved, clearlydefined -npm/npmjs/@assemblyscript/loader/0.10.1, Apache-2.0, approved, clearlydefined -npm/npmjs/@babel/code-frame/7.21.4, MIT, approved, clearlydefined -npm/npmjs/@babel/code-frame/7.23.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11659 -npm/npmjs/@babel/compat-data/7.23.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11554 -npm/npmjs/@babel/core/7.21.8, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7466 -npm/npmjs/@babel/core/7.22.9, MIT, approved, #9057 -npm/npmjs/@babel/core/7.23.2, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11570 -npm/npmjs/@babel/generator/7.21.5, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7470 -npm/npmjs/@babel/generator/7.22.9, MIT, approved, #9002 -npm/npmjs/@babel/generator/7.23.0, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11522 -npm/npmjs/@babel/generator/7.23.6, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11522 -npm/npmjs/@babel/helper-annotate-as-pure/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-annotate-as-pure/7.22.5, MIT, approved, #9009 -npm/npmjs/@babel/helper-builder-binary-assignment-operator-visitor/7.22.15, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8765 -npm/npmjs/@babel/helper-compilation-targets/7.23.6, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-create-class-features-plugin/7.23.9, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-create-regexp-features-plugin/7.21.8, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8261 -npm/npmjs/@babel/helper-create-regexp-features-plugin/7.22.15, MIT, approved, #8950 -npm/npmjs/@babel/helper-define-polyfill-provider/0.4.4, MIT, approved, #9314 -npm/npmjs/@babel/helper-define-polyfill-provider/0.5.0, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-environment-visitor/7.22.20, MIT, approved, #8934 -npm/npmjs/@babel/helper-function-name/7.23.0, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-hoist-variables/7.22.5, MIT, approved, #8957 -npm/npmjs/@babel/helper-member-expression-to-functions/7.23.0, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10960 -npm/npmjs/@babel/helper-module-imports/7.22.15, MIT, approved, #8944 -npm/npmjs/@babel/helper-module-transforms/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8214 -npm/npmjs/@babel/helper-module-transforms/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11537 -npm/npmjs/@babel/helper-optimise-call-expression/7.22.5, MIT, approved, #9011 -npm/npmjs/@babel/helper-plugin-utils/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8262 -npm/npmjs/@babel/helper-plugin-utils/7.22.5, MIT, approved, #9012 -npm/npmjs/@babel/helper-remap-async-to-generator/7.22.20, MIT, approved, #8981 -npm/npmjs/@babel/helper-replace-supers/7.22.20, MIT, approved, #9068 -npm/npmjs/@babel/helper-simple-access/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8220 -npm/npmjs/@babel/helper-simple-access/7.22.5, MIT, approved, #9048 -npm/npmjs/@babel/helper-skip-transparent-expression-wrappers/7.22.5, MIT, approved, #8984 -npm/npmjs/@babel/helper-split-export-declaration/7.22.6, MIT, approved, #8938 -npm/npmjs/@babel/helper-string-parser/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8226 -npm/npmjs/@babel/helper-string-parser/7.22.5, MIT, approved, #8962 -npm/npmjs/@babel/helper-string-parser/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11660 -npm/npmjs/@babel/helper-validator-identifier/7.22.20, MIT, approved, #8955 -npm/npmjs/@babel/helper-validator-option/7.23.5, MIT, approved, clearlydefined -npm/npmjs/@babel/helper-wrap-function/7.22.20, MIT, approved, #8951 -npm/npmjs/@babel/helpers/7.21.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8250 -npm/npmjs/@babel/helpers/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11662 -npm/npmjs/@babel/highlight/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/highlight/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11658 -npm/npmjs/@babel/parser/7.21.8, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7455 -npm/npmjs/@babel/parser/7.23.0, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10663 -npm/npmjs/@babel/parser/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10663 -npm/npmjs/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11581 -npm/npmjs/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11555 -npm/npmjs/@babel/plugin-proposal-async-generator-functions/7.20.7, MIT, approved, #4607 -npm/npmjs/@babel/plugin-proposal-private-property-in-object/7.21.0-placeholder-for-preset-env.2, MIT, approved, #8768 -npm/npmjs/@babel/plugin-proposal-unicode-property-regex/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-async-generators/7.8.4, MIT, approved, #1973 -npm/npmjs/@babel/plugin-syntax-class-properties/7.12.13, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-class-static-block/7.14.5, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-dynamic-import/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-export-namespace-from/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-import-assertions/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11577 -npm/npmjs/@babel/plugin-syntax-import-attributes/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11567 -npm/npmjs/@babel/plugin-syntax-import-meta/7.10.4, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-json-strings/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-logical-assignment-operators/7.10.4, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-nullish-coalescing-operator/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-numeric-separator/7.10.4, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-object-rest-spread/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-optional-catch-binding/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-optional-chaining/7.8.3, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-private-property-in-object/7.14.5, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-top-level-await/7.14.5, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-syntax-unicode-sets-regex/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-transform-arrow-functions/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11563 -npm/npmjs/@babel/plugin-transform-async-generator-functions/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11539 -npm/npmjs/@babel/plugin-transform-async-to-generator/7.22.5, MIT, approved, #8963 -npm/npmjs/@babel/plugin-transform-async-to-generator/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11569 -npm/npmjs/@babel/plugin-transform-block-scoped-functions/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11573 -npm/npmjs/@babel/plugin-transform-block-scoping/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10981 -npm/npmjs/@babel/plugin-transform-class-properties/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11547 -npm/npmjs/@babel/plugin-transform-class-static-block/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11590 -npm/npmjs/@babel/plugin-transform-classes/7.23.8, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11546 -npm/npmjs/@babel/plugin-transform-computed-properties/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11561 -npm/npmjs/@babel/plugin-transform-destructuring/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10963 -npm/npmjs/@babel/plugin-transform-dotall-regex/7.18.6, MIT, approved, clearlydefined -npm/npmjs/@babel/plugin-transform-dotall-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11553 -npm/npmjs/@babel/plugin-transform-duplicate-keys/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11576 -npm/npmjs/@babel/plugin-transform-dynamic-import/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11542 -npm/npmjs/@babel/plugin-transform-exponentiation-operator/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11588 -npm/npmjs/@babel/plugin-transform-export-namespace-from/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11544 -npm/npmjs/@babel/plugin-transform-for-of/7.23.6, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11571 -npm/npmjs/@babel/plugin-transform-function-name/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11583 -npm/npmjs/@babel/plugin-transform-json-strings/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11585 -npm/npmjs/@babel/plugin-transform-literals/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11584 -npm/npmjs/@babel/plugin-transform-logical-assignment-operators/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11562 -npm/npmjs/@babel/plugin-transform-member-expression-literals/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11587 -npm/npmjs/@babel/plugin-transform-modules-amd/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10967 -npm/npmjs/@babel/plugin-transform-modules-commonjs/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10965 -npm/npmjs/@babel/plugin-transform-modules-systemjs/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10977 -npm/npmjs/@babel/plugin-transform-modules-umd/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11541 -npm/npmjs/@babel/plugin-transform-named-capturing-groups-regex/7.22.5, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8738 -npm/npmjs/@babel/plugin-transform-new-target/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11548 -npm/npmjs/@babel/plugin-transform-nullish-coalescing-operator/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11550 -npm/npmjs/@babel/plugin-transform-numeric-separator/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11540 -npm/npmjs/@babel/plugin-transform-object-rest-spread/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11575 -npm/npmjs/@babel/plugin-transform-object-super/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11568 -npm/npmjs/@babel/plugin-transform-optional-catch-binding/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11574 -npm/npmjs/@babel/plugin-transform-optional-chaining/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #10968 -npm/npmjs/@babel/plugin-transform-parameters/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11565 -npm/npmjs/@babel/plugin-transform-private-methods/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11545 -npm/npmjs/@babel/plugin-transform-private-property-in-object/7.23.4, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11578 -npm/npmjs/@babel/plugin-transform-property-literals/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11559 -npm/npmjs/@babel/plugin-transform-regenerator/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11557 -npm/npmjs/@babel/plugin-transform-reserved-words/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11572 -npm/npmjs/@babel/plugin-transform-runtime/7.22.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8746 -npm/npmjs/@babel/plugin-transform-shorthand-properties/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11589 -npm/npmjs/@babel/plugin-transform-spread/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11580 -npm/npmjs/@babel/plugin-transform-sticky-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11558 -npm/npmjs/@babel/plugin-transform-template-literals/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11560 -npm/npmjs/@babel/plugin-transform-typeof-symbol/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11556 -npm/npmjs/@babel/plugin-transform-unicode-escapes/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11566 -npm/npmjs/@babel/plugin-transform-unicode-property-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11582 -npm/npmjs/@babel/plugin-transform-unicode-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11549 -npm/npmjs/@babel/plugin-transform-unicode-sets-regex/7.23.3, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11536 -npm/npmjs/@babel/preset-env/7.22.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8748 -npm/npmjs/@babel/preset-modules/0.1.5, MIT, approved, #9932 -npm/npmjs/@babel/regjsgen/0.8.0, MIT, approved, #7149 -npm/npmjs/@babel/runtime/7.20.13, MIT AND BSD-3-Clause AND BSD-2-Clause, approved, #6242 -npm/npmjs/@babel/runtime/7.21.0, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7349 -npm/npmjs/@babel/runtime/7.21.5, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7349 -npm/npmjs/@babel/runtime/7.22.6, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #8730 -npm/npmjs/@babel/template/7.20.7, MIT AND BSD-2-Clause AND BSD-3-Clause, approved, #5988 -npm/npmjs/@babel/template/7.22.15, MIT, approved, #9017 -npm/npmjs/@babel/template/7.22.5, MIT, approved, #9017 -npm/npmjs/@babel/template/7.23.9, MIT, approved, clearlydefined -npm/npmjs/@babel/traverse/7.23.2, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11520 -npm/npmjs/@babel/traverse/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11520 -npm/npmjs/@babel/types/7.21.5, MIT AND (BSD-2-Clause AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #7473 -npm/npmjs/@babel/types/7.23.0, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11521 -npm/npmjs/@babel/types/7.23.9, MIT AND (BSD-2-Clause AND ISC AND MIT) AND BSD-2-Clause AND BSD-3-Clause, approved, #11521 -npm/npmjs/@badeball/cypress-configuration/5.0.0, MIT, approved, #8021 -npm/npmjs/@badeball/cypress-cucumber-preprocessor/16.0.3, MIT, approved, #8041 -npm/npmjs/@bahmutov/cypress-esbuild-preprocessor/2.2.0, MIT, approved, clearlydefined -npm/npmjs/@colors/colors/1.5.0, MIT, approved, clearlydefined -npm/npmjs/@cspotcode/source-map-support/0.8.1, MIT, approved, clearlydefined -npm/npmjs/@csstools/css-parser-algorithms/2.1.1, MIT, approved, #8044 -npm/npmjs/@csstools/css-tokenizer/2.1.1, MIT, approved, #8033 -npm/npmjs/@csstools/media-query-list-parser/2.0.4, MIT, approved, #8067 -npm/npmjs/@csstools/selector-specificity/2.2.0, CC0-1.0, approved, clearlydefined -npm/npmjs/@cucumber/ci-environment/9.1.0, MIT, approved, clearlydefined -npm/npmjs/@cucumber/cucumber-expressions/16.1.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/cucumber/8.11.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin-streams/5.0.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin-utils/8.0.2, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin/24.1.0, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin/25.0.2, MIT, approved, clearlydefined -npm/npmjs/@cucumber/gherkin/26.0.3, MIT, approved, clearlydefined -npm/npmjs/@cucumber/html-formatter/19.2.0, MIT AND (Apache-2.0 AND CC-BY-4.0 AND MIT AND OFL-1.1), approved, #7072 -npm/npmjs/@cucumber/html-formatter/20.2.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/message-streams/4.0.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/messages/19.1.4, MIT, approved, clearlydefined -npm/npmjs/@cucumber/messages/21.0.1, MIT, approved, clearlydefined -npm/npmjs/@cucumber/tag-expressions/4.1.0, MIT, approved, clearlydefined -npm/npmjs/@cucumber/tag-expressions/5.0.1, MIT, approved, clearlydefined -npm/npmjs/@cypress/request/2.88.12, Apache-2.0, approved, #6948 -npm/npmjs/@cypress/schematic/2.5.0, MIT, approved, clearlydefined -npm/npmjs/@cypress/xvfb/1.2.4, MIT, approved, clearlydefined -npm/npmjs/@dabh/diagnostics/2.0.3, MIT, approved, clearlydefined -npm/npmjs/@discoveryjs/json-ext/0.5.7, MIT, approved, clearlydefined -npm/npmjs/@es-joy/jsdoccomment/0.37.1, MIT, approved, #8023 -npm/npmjs/@esbuild/android-arm/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7422 -npm/npmjs/@esbuild/android-arm/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9925 -npm/npmjs/@esbuild/android-arm/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9925 -npm/npmjs/@esbuild/android-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7550 -npm/npmjs/@esbuild/android-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9874 -npm/npmjs/@esbuild/android-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9874 -npm/npmjs/@esbuild/android-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7428 -npm/npmjs/@esbuild/android-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9889 -npm/npmjs/@esbuild/android-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9889 -npm/npmjs/@esbuild/darwin-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7542 -npm/npmjs/@esbuild/darwin-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9890 -npm/npmjs/@esbuild/darwin-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9890 -npm/npmjs/@esbuild/darwin-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7549 -npm/npmjs/@esbuild/darwin-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9873 -npm/npmjs/@esbuild/darwin-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9873 -npm/npmjs/@esbuild/freebsd-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7533 -npm/npmjs/@esbuild/freebsd-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9872 -npm/npmjs/@esbuild/freebsd-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9872 -npm/npmjs/@esbuild/freebsd-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7532 -npm/npmjs/@esbuild/freebsd-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9898 -npm/npmjs/@esbuild/freebsd-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9898 -npm/npmjs/@esbuild/linux-arm/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7534 -npm/npmjs/@esbuild/linux-arm/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9896 -npm/npmjs/@esbuild/linux-arm/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9896 -npm/npmjs/@esbuild/linux-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7525 -npm/npmjs/@esbuild/linux-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9879 -npm/npmjs/@esbuild/linux-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9879 -npm/npmjs/@esbuild/linux-ia32/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7551 -npm/npmjs/@esbuild/linux-ia32/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9918 -npm/npmjs/@esbuild/linux-ia32/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9918 -npm/npmjs/@esbuild/linux-loong64/0.14.54, MIT, approved, clearlydefined -npm/npmjs/@esbuild/linux-loong64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7530 -npm/npmjs/@esbuild/linux-loong64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9922 -npm/npmjs/@esbuild/linux-loong64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9922 -npm/npmjs/@esbuild/linux-mips64el/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7526 -npm/npmjs/@esbuild/linux-mips64el/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9892 -npm/npmjs/@esbuild/linux-mips64el/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9892 -npm/npmjs/@esbuild/linux-ppc64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7552 -npm/npmjs/@esbuild/linux-ppc64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9931 -npm/npmjs/@esbuild/linux-ppc64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9931 -npm/npmjs/@esbuild/linux-riscv64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7545 -npm/npmjs/@esbuild/linux-riscv64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9894 -npm/npmjs/@esbuild/linux-riscv64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9894 -npm/npmjs/@esbuild/linux-s390x/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7544 -npm/npmjs/@esbuild/linux-s390x/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9888 -npm/npmjs/@esbuild/linux-s390x/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9888 -npm/npmjs/@esbuild/linux-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7539 -npm/npmjs/@esbuild/linux-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9915 -npm/npmjs/@esbuild/linux-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9915 -npm/npmjs/@esbuild/netbsd-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7535 -npm/npmjs/@esbuild/netbsd-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9909 -npm/npmjs/@esbuild/netbsd-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9909 -npm/npmjs/@esbuild/openbsd-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7529 -npm/npmjs/@esbuild/openbsd-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9914 -npm/npmjs/@esbuild/openbsd-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9914 -npm/npmjs/@esbuild/sunos-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7528 -npm/npmjs/@esbuild/sunos-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9913 -npm/npmjs/@esbuild/sunos-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9913 -npm/npmjs/@esbuild/win32-arm64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7538 -npm/npmjs/@esbuild/win32-arm64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9929 -npm/npmjs/@esbuild/win32-arm64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9929 -npm/npmjs/@esbuild/win32-ia32/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7536 -npm/npmjs/@esbuild/win32-ia32/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9901 -npm/npmjs/@esbuild/win32-ia32/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9901 -npm/npmjs/@esbuild/win32-x64/0.17.18, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #7547 -npm/npmjs/@esbuild/win32-x64/0.18.17, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9920 -npm/npmjs/@esbuild/win32-x64/0.18.20, Apache-2.0 AND MIT AND BSD-3-Clause AND (BSD-2-Clause AND BSD-3-Clause), approved, #9920 -npm/npmjs/@eslint-community/eslint-utils/4.4.0, MIT, approved, #8032 -npm/npmjs/@eslint-community/regexpp/4.5.0, MIT, approved, clearlydefined -npm/npmjs/@eslint/eslintrc/2.0.2, MIT, approved, #7481 -npm/npmjs/@eslint/js/8.39.0, MIT, approved, clearlydefined -npm/npmjs/@gar/promisify/1.1.3, MIT, approved, clearlydefined -npm/npmjs/@humanwhocodes/config-array/0.11.8, Apache-2.0, approved, #5876 -npm/npmjs/@humanwhocodes/module-importer/1.0.1, Apache-2.0, approved, clearlydefined -npm/npmjs/@humanwhocodes/object-schema/1.2.1, BSD-3-Clause, approved, clearlydefined -npm/npmjs/@istanbuljs/load-nyc-config/1.1.0, ISC, approved, clearlydefined -npm/npmjs/@istanbuljs/schema/0.1.3, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/gen-mapping/0.3.3, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/resolve-uri/3.1.0, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/resolve-uri/3.1.1, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/set-array/1.1.2, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/source-map/0.3.3, MIT, approved, #9304 -npm/npmjs/@jridgewell/source-map/0.3.5, MIT, approved, #9304 -npm/npmjs/@jridgewell/sourcemap-codec/1.4.14, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/sourcemap-codec/1.4.15, MIT, approved, clearlydefined -npm/npmjs/@jridgewell/trace-mapping/0.3.18, MIT, approved, #9904 -npm/npmjs/@jridgewell/trace-mapping/0.3.22, MIT, approved, #9904 -npm/npmjs/@jridgewell/trace-mapping/0.3.9, MIT, approved, #9904 -npm/npmjs/@leichtgewicht/ip-codec/2.0.4, MIT, approved, clearlydefined -npm/npmjs/@material/animation/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/auto-init/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/banner/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/base/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/button/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/card/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/checkbox/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/chips/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/circular-progress/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/data-table/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/density/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/dialog/15.0.0-canary.bc9ae6c9c.0, MIT AND Apache-2.0, approved, #9870 -npm/npmjs/@material/dom/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/drawer/15.0.0-canary.bc9ae6c9c.0, MIT AND Apache-2.0, approved, #7431 -npm/npmjs/@material/elevation/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/fab/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/feature-targeting/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/floating-label/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/focus-ring/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/form-field/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/icon-button/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/image-list/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/layout-grid/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/line-ripple/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/linear-progress/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/list/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/menu-surface/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/menu/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/notched-outline/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/progress-indicator/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/radio/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/ripple/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/rtl/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/segmented-button/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/select/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/shape/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/slider/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/snackbar/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/switch/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tab-bar/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tab-indicator/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tab-scroller/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tab/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/textfield/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/theme/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tokens/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/tooltip/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/top-app-bar/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/touch-target/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@material/typography/15.0.0-canary.bc9ae6c9c.0, MIT, approved, clearlydefined -npm/npmjs/@mswjs/cookies/0.2.2, MIT, approved, clearlydefined -npm/npmjs/@mswjs/interceptors/0.17.6, MIT, approved, clearlydefined -npm/npmjs/@ngtools/webpack/16.2.12, MIT, approved, #13300 -npm/npmjs/@nodelib/fs.scandir/2.1.5, MIT, approved, clearlydefined -npm/npmjs/@nodelib/fs.stat/2.0.5, MIT, approved, clearlydefined -npm/npmjs/@nodelib/fs.walk/1.2.8, MIT, approved, clearlydefined -npm/npmjs/@npmcli/fs/2.1.0, ISC, approved, clearlydefined -npm/npmjs/@npmcli/fs/3.1.0, ISC, approved, clearlydefined -npm/npmjs/@npmcli/git/4.0.3, ISC, approved, #7598 -npm/npmjs/@npmcli/installed-package-contents/2.0.1, ISC, approved, clearlydefined -npm/npmjs/@npmcli/move-file/2.0.0, MIT, approved, clearlydefined -npm/npmjs/@npmcli/node-gyp/3.0.0, ISC, approved, clearlydefined -npm/npmjs/@npmcli/promise-spawn/6.0.2, ISC, approved, #5774 -npm/npmjs/@npmcli/run-script/6.0.0, ISC, approved, #8271 -npm/npmjs/@nrwl/devkit/16.5.1, MIT, approved, #9377 -npm/npmjs/@nrwl/tao/16.5.1, MIT, approved, #9371 -npm/npmjs/@nx/devkit/16.5.1, MIT, approved, #9375 -npm/npmjs/@nx/nx-darwin-arm64/16.5.1, MIT, approved, #9374 -npm/npmjs/@nx/nx-darwin-x64/16.5.1, MIT AND Apache-2.0, approved, #9381 -npm/npmjs/@nx/nx-freebsd-x64/16.5.1, MIT AND Apache-2.0, approved, #9354 -npm/npmjs/@nx/nx-linux-arm-gnueabihf/16.5.1, MIT AND Apache-2.0, approved, #9358 -npm/npmjs/@nx/nx-linux-arm64-gnu/16.5.1, MIT, approved, #9360 -npm/npmjs/@nx/nx-linux-arm64-musl/16.5.1, MIT, approved, #9378 -npm/npmjs/@nx/nx-linux-x64-gnu/16.5.1, MIT, approved, #9366 -npm/npmjs/@nx/nx-linux-x64-musl/16.5.1, MIT, approved, #9361 -npm/npmjs/@nx/nx-win32-arm64-msvc/16.5.1, MIT, approved, #9362 -npm/npmjs/@nx/nx-win32-x64-msvc/16.5.1, MIT, approved, #9373 -npm/npmjs/@open-draft/until/1.0.3, MIT, approved, clearlydefined -npm/npmjs/@parcel/watcher/2.0.4, MIT, approved, clearlydefined -npm/npmjs/@polka/url/1.0.0-next.21, MIT, approved, clearlydefined -npm/npmjs/@schematics/angular/16.2.12, MIT AND Apache-2.0, approved, #13298 -npm/npmjs/@sigstore/bundle/1.1.0, Apache-2.0, approved, clearlydefined -npm/npmjs/@sigstore/protobuf-specs/0.2.1, Apache-2.0, approved, clearlydefined -npm/npmjs/@sigstore/sign/1.0.0, Apache-2.0, approved, clearlydefined -npm/npmjs/@sigstore/tuf/1.0.3, Apache-2.0, approved, #8733 -npm/npmjs/@socket.io/component-emitter/3.1.0, MIT, approved, clearlydefined -npm/npmjs/@teppeis/multimaps/2.0.0, MIT, approved, clearlydefined -npm/npmjs/@testing-library/angular/14.5.1, MIT, approved, #13305 -npm/npmjs/@testing-library/dom/9.3.4, MIT AND (MIT AND WTFPL), approved, #9038 -npm/npmjs/@testing-library/jasmine-dom/1.3.3, MIT, approved, clearlydefined -npm/npmjs/@tootallnate/once/1.1.2, MIT, approved, clearlydefined -npm/npmjs/@tootallnate/once/2.0.0, MIT, approved, clearlydefined -npm/npmjs/@tsconfig/node10/1.0.8, MIT, approved, clearlydefined -npm/npmjs/@tsconfig/node12/1.0.9, MIT, approved, clearlydefined -npm/npmjs/@tsconfig/node14/1.0.1, MIT, approved, clearlydefined -npm/npmjs/@tsconfig/node16/1.0.2, MIT, approved, clearlydefined -npm/npmjs/@tufjs/canonical-json/1.0.0, Apache-2.0 AND MIT, approved, #8047 -npm/npmjs/@tufjs/models/1.0.4, MIT, approved, #7600 -npm/npmjs/@types/aria-query/5.0.4, MIT, approved, #10958 -npm/npmjs/@types/body-parser/1.19.2, MIT, approved, #10831 -npm/npmjs/@types/bonjour/3.5.10, MIT, approved, clearlydefined -npm/npmjs/@types/connect-history-api-fallback/1.5.0, MIT, approved, #8395 -npm/npmjs/@types/connect/3.4.35, MIT, approved, clearlydefined -npm/npmjs/@types/cookie/0.4.1, MIT, approved, clearlydefined -npm/npmjs/@types/cors/2.8.13, MIT, approved, clearlydefined -npm/npmjs/@types/d3-array/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-axis/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-brush/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-chord/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-color/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-contour/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-delaunay/6.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-dispatch/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-drag/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-dsv/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-ease/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-fetch/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-force/3.0.3, MIT, approved, clearlydefined -npm/npmjs/@types/d3-format/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-geo/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-hierarchy/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-interpolate/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-path/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-polygon/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-quadtree/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-random/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-scale-chromatic/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-scale/4.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-selection/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-shape/3.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/d3-time-format/4.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-time/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-timer/3.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/d3-transition/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3-zoom/3.0.1, MIT, approved, clearlydefined -npm/npmjs/@types/d3/7.4.0, MIT, approved, clearlydefined -npm/npmjs/@types/debug/4.1.7, MIT, approved, #10817 -npm/npmjs/@types/eslint-scope/3.7.3, MIT, approved, #10812 -npm/npmjs/@types/eslint/8.4.2, MIT, approved, #2429 -npm/npmjs/@types/estree/0.0.51, MIT, approved, clearlydefined -npm/npmjs/@types/estree/1.0.5, MIT, approved, #8266 -npm/npmjs/@types/express-serve-static-core/4.17.34, MIT, approved, #6020 -npm/npmjs/@types/express/4.17.17, MIT, approved, #5760 -npm/npmjs/@types/geojson/7946.0.8, MIT, approved, #11480 -npm/npmjs/@types/glob/7.2.0, MIT, approved, clearlydefined -npm/npmjs/@types/http-proxy/1.17.11, MIT, approved, #8414 -npm/npmjs/@types/jasmine/4.3.1, MIT, approved, clearlydefined -npm/npmjs/@types/js-levenshtein/1.1.1, MIT, approved, clearlydefined -npm/npmjs/@types/json-schema/7.0.11, MIT, approved, clearlydefined -npm/npmjs/@types/json5/0.0.29, MIT, approved, clearlydefined -npm/npmjs/@types/karma/6.3.3, MIT, approved, clearlydefined -npm/npmjs/@types/lodash-es/4.17.7, MIT, approved, clearlydefined -npm/npmjs/@types/lodash/4.14.182, MIT, approved, #4131 -npm/npmjs/@types/lodash/4.14.194, MIT, approved, #4131 -npm/npmjs/@types/luxon/3.3.0, MIT, approved, clearlydefined -npm/npmjs/@types/mime/1.3.2, MIT, approved, #10834 -npm/npmjs/@types/mime/3.0.1, MIT, approved, #10805 -npm/npmjs/@types/minimatch/5.1.2, MIT, approved, clearlydefined -npm/npmjs/@types/minimist/1.2.2, MIT, approved, #10839 -npm/npmjs/@types/mkdirp/1.0.2, MIT, approved, clearlydefined -npm/npmjs/@types/ms/0.7.31, MIT, approved, #10811 -npm/npmjs/@types/node/16.18.84, MIT, approved, #7082 -npm/npmjs/@types/node/18.16.0, MIT, approved, #9385 -npm/npmjs/@types/node/20.2.3, MIT, approved, clearlydefined -npm/npmjs/@types/normalize-package-data/2.4.1, MIT, approved, #10792 -npm/npmjs/@types/parse-json/4.0.0, MIT, approved, clearlydefined -npm/npmjs/@types/qs/6.9.7, MIT, approved, clearlydefined -npm/npmjs/@types/range-parser/1.2.4, MIT, approved, #10795 -npm/npmjs/@types/retry/0.12.0, MIT, approved, clearlydefined -npm/npmjs/@types/semver/7.3.13, MIT, approved, #4668 -npm/npmjs/@types/send/0.17.1, MIT, approved, #10832 -npm/npmjs/@types/serve-index/1.9.1, MIT, approved, #10976 -npm/npmjs/@types/serve-static/1.15.1, MIT, approved, #9188 -npm/npmjs/@types/set-cookie-parser/2.4.2, MIT, approved, clearlydefined -npm/npmjs/@types/sinonjs__fake-timers/8.1.1, MIT, approved, #11000 -npm/npmjs/@types/sizzle/2.3.3, MIT, approved, clearlydefined -npm/npmjs/@types/sockjs/0.3.33, MIT, approved, #10984 -npm/npmjs/@types/testing-library__jasmine-dom/1.3.0, MIT, approved, clearlydefined -npm/npmjs/@types/uuid/8.3.4, MIT, approved, clearlydefined -npm/npmjs/@types/ws/8.5.10, MIT, approved, #6016 -npm/npmjs/@types/yauzl/2.10.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/eslint-plugin/5.59.1, BSD-2-Clause AND MIT, approved, #8045 -npm/npmjs/@typescript-eslint/parser/5.59.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/@typescript-eslint/scope-manager/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/scope-manager/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/type-utils/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/type-utils/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/types/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/types/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/typescript-estree/5.59.1, BSD-2-Clause, approved, clearlydefined -npm/npmjs/@typescript-eslint/typescript-estree/5.62.0, BSD-2-Clause, approved, clearlydefined -npm/npmjs/@typescript-eslint/utils/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/utils/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/visitor-keys/5.59.1, MIT, approved, clearlydefined -npm/npmjs/@typescript-eslint/visitor-keys/5.62.0, MIT, approved, clearlydefined -npm/npmjs/@vitejs/plugin-basic-ssl/1.0.1, MIT, approved, #12793 -npm/npmjs/@webassemblyjs/ast/1.11.1, MIT, approved, #7953 -npm/npmjs/@webassemblyjs/ast/1.11.6, MIT, approved, #7953 -npm/npmjs/@webassemblyjs/floating-point-hex-parser/1.11.1, MIT, approved, #7959 -npm/npmjs/@webassemblyjs/floating-point-hex-parser/1.11.6, MIT, approved, #7959 -npm/npmjs/@webassemblyjs/helper-api-error/1.11.1, MIT, approved, #7969 -npm/npmjs/@webassemblyjs/helper-api-error/1.11.6, MIT, approved, #7969 -npm/npmjs/@webassemblyjs/helper-buffer/1.11.1, MIT, approved, #7955 -npm/npmjs/@webassemblyjs/helper-buffer/1.11.6, MIT, approved, #7955 -npm/npmjs/@webassemblyjs/helper-numbers/1.11.1, MIT, approved, #7954 -npm/npmjs/@webassemblyjs/helper-numbers/1.11.6, MIT, approved, #7954 -npm/npmjs/@webassemblyjs/helper-wasm-bytecode/1.11.1, MIT, approved, #7962 -npm/npmjs/@webassemblyjs/helper-wasm-bytecode/1.11.6, MIT, approved, #7962 -npm/npmjs/@webassemblyjs/helper-wasm-section/1.11.1, MIT, approved, #7960 -npm/npmjs/@webassemblyjs/helper-wasm-section/1.11.6, MIT, approved, #7960 -npm/npmjs/@webassemblyjs/ieee754/1.11.1, MIT, approved, #7961 -npm/npmjs/@webassemblyjs/ieee754/1.11.6, MIT, approved, #7961 -npm/npmjs/@webassemblyjs/leb128/1.11.1, Apache-2.0, approved, #7958 -npm/npmjs/@webassemblyjs/leb128/1.11.6, Apache-2.0, approved, #7958 -npm/npmjs/@webassemblyjs/utf8/1.11.1, MIT, approved, #7966 -npm/npmjs/@webassemblyjs/utf8/1.11.6, MIT, approved, #7966 -npm/npmjs/@webassemblyjs/wasm-edit/1.11.1, Apache-2.0 AND ISC AND MIT, approved, #2186 -npm/npmjs/@webassemblyjs/wasm-edit/1.11.6, Apache-2.0 AND ISC AND MIT, approved, #2186 -npm/npmjs/@webassemblyjs/wasm-gen/1.11.1, MIT, approved, #7964 -npm/npmjs/@webassemblyjs/wasm-gen/1.11.6, MIT, approved, #7964 -npm/npmjs/@webassemblyjs/wasm-opt/1.11.1, MIT, approved, #7967 -npm/npmjs/@webassemblyjs/wasm-opt/1.11.6, MIT, approved, #7967 -npm/npmjs/@webassemblyjs/wasm-parser/1.11.1, MIT, approved, #7965 -npm/npmjs/@webassemblyjs/wasm-parser/1.11.6, MIT, approved, #7965 -npm/npmjs/@webassemblyjs/wast-printer/1.11.1, MIT, approved, #7957 -npm/npmjs/@webassemblyjs/wast-printer/1.11.6, MIT, approved, #7957 -npm/npmjs/@wessberg/ts-evaluator/0.0.27, MIT, approved, clearlydefined -npm/npmjs/@xmldom/xmldom/0.8.6, MIT, approved, #4866 -npm/npmjs/@xtuc/ieee754/1.2.0, BSD-3-Clause, approved, #123 -npm/npmjs/@xtuc/long/4.2.2, Apache-2.0, approved, clearlydefined -npm/npmjs/@yarnpkg/lockfile/1.1.0, BSD-2-Clause AND MIT, approved, #922 -npm/npmjs/@yarnpkg/parsers/3.0.0-rc.46, BSD-2-Clause, approved, #4660 -npm/npmjs/@zkochan/js-yaml/0.0.6, MIT, approved, clearlydefined -npm/npmjs/@zxing/text-encoding/0.9.0, Apache-2.0 AND Unlicense AND Apache-2.0, approved, #4869 diff --git a/docs/RELEASE.md b/docs/RELEASE.md index b12c01b74c..7fc6841e30 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -4,31 +4,40 @@ ## Release an app + Prerequisite: Make sure eclipse / catena git repositories are in sync 1) Decide which version will be incremented. Following shows example for 1.0.0 -2) Create and Checkout release branch on catena /release/1.0.0 -4) Edit changelog: Align the new version (1.0.0) with the changes and add new UNRELEASED section -5) Edit /charts/traceability-foss/CHANGELOG.md -6) Add an Entry for an incremented (patch) version (1.0.0 -> 1.0.1) -7) Push onto /release/1.0.0 catena and eclipse -8) Open Release App Page Catena: https://github.com/catenax-ng/tx-traceability-foss/releases -9) Draft a new release -10) On dropdown choose a tag - use the version 1.0.0 (Create new tag will appear - select it) -11) On dropdown target use your /release/1.0.0 -12) Title = Version of app -> 1.0.0 -13) Description = Changelog Content of app -14) Checkbox set as latest release -15) Verify that github action [Release](https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/release.yaml) generation has been triggered -16) Verify that an automatic pull request has been opened (Prepare Helm release for next version) -17) Validate that the versions within that pull requests are correct -18) Merge pull request (Prepare Helm release for next version) -19) Merge release branch into main (when merging make sure to restore release branch since it should stay) -20) Open the github action for helm release generation: https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/helm-chart-release.yaml -21) Execute it from main branch -22) Validate that the helm charts release has been generated within the release page -23) Create a new branch from release/1.0.0 and name it release/helm-environments-1.0.0 (helm app version not chart version) -24) Repeat step 8 to 23 for tractus-x: [GitHub Releases page](https://github.com/eclipse-tractusx/traceability-foss/releases) -25) Sync catena and eclipse main branch -26) Create a message in the Trace-X channel of the Eclipse Foundation Chat to notify the community about the new release (add a link to the tractus-x release) +2) Create a release branch in [IRS](https://github.com/eclipse-tractusx/item-relationship-service) named release/trace-x-irs-client-lib-release +3) Click on the [Update irs-registry-client Version workflow](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/update-registry-library.yaml). +4) Select "Run workflow," choose the release branch and select the type of version increment major, minor or patch. Use the Semantic Versioning guidelines to accurately determine the specific type of version increment. [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Don't forget to check the box to remove the snapshot. +5) The irs lib version in (irs)[https://github.com/eclipse-tractusx/item-relationship-service/blob/65a42336b7ec7ae50690ec7590d05d8e3b15555a/pom.xml#L76] should align with the potential (newer one)[https://github.com/catenax-ng/tx-traceability-foss/blob/fb1130d4c1dd4f869e61d334310e99bc191fa0c7/pom.xml#L103] in trace-x main +6) A pull request (name: Update irs-registry-client to "Version") will be generated in which you have to make sure the irs lib version is now correct (change it manually if necessary). Check if Actions finish successfully. (If Dash IP Check fails, update the DEPENDENCIES file with the mvn command on the generated pull request branch) +7) Merge the created Pull request and make sure the release branch is deleted afterward (default behaviour). +8) In [IRS](https://github.com/eclipse-tractusx/item-relationship-service), the gitHub action [Upload to Central Maven Registry ](https://github.com/eclipse-tractusx/item-relationship-service/actions/workflows/maven-deploy.yaml) will release the irs-registry-client library with the version defined in step 3 +9) Create and Checkout release branch on catena /release/1.0.0 +10) Update in the above created release branch to the created one in step 3. +11) Edit changelog: Align the new version (1.0.0) with the changes and add new UNRELEASED section +12) Edit /charts/traceability-foss/CHANGELOG.md +13) Add an Entry for an incremented (patch) version (1.0.0 -> 1.0.1) +14) Push onto /release/1.0.0 catena and eclipse +15) Open Release App Page Catena: https://github.com/catenax-ng/tx-traceability-foss/releases +16) Draft a new release +17) On dropdown choose a tag - use the version 1.0.0 (Create new tag will appear - select it) +18) On dropdown target use your /release/1.0.0 +19) Title = Version of app -> 1.0.0 +20) Description = Changelog Content of app +21) Checkbox set as latest release +22) Verify that github action [Release](https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/release.yaml) generation has been triggered +23) Verify that an automatic pull request has been opened (Prepare Helm release for next version) +24) Validate that the versions within that pull requests are correct +25) Merge pull request (Prepare Helm release for next version) +26) Merge release branch into main (when merging make sure to restore release branch since it should stay) +27) Open the github action for helm release generation: https://github.com/catenax-ng/tx-traceability-foss/actions/workflows/helm-chart-release.yaml +28) Execute it from main branch +29) Validate that the helm charts release has been generated within the release page +30) Create a new branch from release/1.0.0 and name it release/helm-environments-1.0.0 (helm app version not chart version) +31) Repeat step 8 to 23 for tractus-x: [GitHub Releases page](https://github.com/eclipse-tractusx/traceability-foss/releases) +32) Sync catena and eclipse main branch +33) Create a message in the Trace-X channel of the Eclipse Foundation Chat to notify the community about the new release (add a link to the tractus-x release) diff --git a/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md b/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md index d1e86fbd47..f8c0dd050c 100644 --- a/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md +++ b/docs/concept/#578-consistent-null-values/#578-consistent-null-values.md @@ -29,11 +29,11 @@ These should be consistent throughout Trace-X. # Requirements - Whenever a string value is saved or updated in the database and during data consumption from IRS: - - [ ] Leading and trailing whitespace characters are trimmed. - - [ ] Empty strings ("") are all converted to null. -- [ ] Null values are shown *empty* in the frontend. -- [ ] When sorting columns, empty values are shown all the way on the bottom regardless of the sort order. -- [ ] Empty values can be filtered and searched for. They are shown as "(Blank)" (de: "(Leer)") when filtering for them and can be searched by inputting the same term. + - [ ] Leading and trailing whitespace characters are trimmed. + - [ ] Empty strings ("") are all converted to null. +- [ ] Null values are shown as a dash "-" in the frontend. +- [ ] When sorting columns, null values are treated the default way of the database. (Shown at the end for ASC - shown at the beginning for DESC) +- [ ] Null values can be filtered for. They are shown as "-" when filtering for them. This option is always shown at the top of the filter/search box regardless of what the user is searching for. - [ ] Leading and trailing whitespace characters don't count as mandatory values during user input. # Out of scope @@ -47,13 +47,12 @@ Whenever a string is saved or updated in the database and during data consumptio 3. Save/update value in database ### Frontend -Null values should be shown in the frontend as empty: +Null values should be shown in the frontend as a dash: -![null-value-display-empty.png](null-value-display-empty.png) +![null-value-display.png](null-value-display.png) -When sorting the values, empty ones should be always shown at the bottom regardless of the sort order. -Filtering and searching for empty values must be possible. In the filter box (Blank) (de: (Leer)) should be shown at the bottom. -To search for it, the user must type in the term "(Blank)" (de: (Leer)). +When sorting the values, null must be treated the default way of the database. When sorted ascending, they are at the end. When sorted descending, they are at the beginning. +Filtering for empty values must be possible. In the filter box "-" should always be shown at the top regardless of what the user is searching for. ![null-value-filter.png](null-value-filter.png) diff --git a/docs/concept/#578-consistent-null-values/null-value-display-empty.png b/docs/concept/#578-consistent-null-values/null-value-display-empty.png deleted file mode 100644 index 2cb87a989d..0000000000 Binary files a/docs/concept/#578-consistent-null-values/null-value-display-empty.png and /dev/null differ diff --git a/docs/concept/#578-consistent-null-values/null-value-display.png b/docs/concept/#578-consistent-null-values/null-value-display.png new file mode 100644 index 0000000000..561d0687a8 Binary files /dev/null and b/docs/concept/#578-consistent-null-values/null-value-display.png differ diff --git a/docs/concept/#578-consistent-null-values/null-value-filter.png b/docs/concept/#578-consistent-null-values/null-value-filter.png index a2487d4763..9b5dd9c3ed 100644 Binary files a/docs/concept/#578-consistent-null-values/null-value-filter.png and b/docs/concept/#578-consistent-null-values/null-value-filter.png differ diff --git a/docs/src/docs/arc42/runtime-view/data-sovereignty.adoc b/docs/src/docs/arc42/runtime-view/data-sovereignty.adoc new file mode 100644 index 0000000000..3b4322d696 --- /dev/null +++ b/docs/src/docs/arc42/runtime-view/data-sovereignty.adoc @@ -0,0 +1,3 @@ += Data Souvereignty + +include::data-sovereignty/return_asset_contracts.adoc[leveloffset=+1] diff --git a/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc b/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc new file mode 100644 index 0000000000..afe880541b --- /dev/null +++ b/docs/src/docs/arc42/runtime-view/data-sovereignty/return_asset_contracts.adoc @@ -0,0 +1,18 @@ += Scenario 1: Return Asset Contract Agreements + +This section describes functionality and the behavior in case a user requests contract agreements from Trace-X via the Trace-X contracts API (/contracts). + +[plantuml,target=return-all-assets,format=svg] +.... +include::../../../../uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml[] +.... + +==== Overview + +In case a user requests contract agreements, Trace-X checks if the user has required roles ('ROLE_ADMIN', 'ROLE_SUPERVISOR'). +If yes, then the requested assets will be mapped to the related contract agreement id. +These contract agreement ids will be then requested on EDC side via POST (/management/v2/contractagreements/request) and GET (/management/v2/contractagreements/\{ContractAgreementId\}/negotiation) to get the relevant information. + +The contract information is then returned by the endpoint as a pageable result. + +If no asset ids are provided in the request, 50 contract agreement ids are handled by default. diff --git a/docs/src/docs/arc42/runtime-view/full.adoc b/docs/src/docs/arc42/runtime-view/full.adoc index fc9b44a74f..ebeeeb5ca2 100644 --- a/docs/src/docs/arc42/runtime-view/full.adoc +++ b/docs/src/docs/arc42/runtime-view/full.adoc @@ -6,3 +6,4 @@ include::assets.adoc[leveloffset=+1] include::notifications.adoc[leveloffset=+1] include::data-consumption.adoc[leveloffset=+1] include::data-provisioning.adoc[leveloffset=+1] +include::data-sovereignty.adoc[leveloffset=+1] diff --git a/docs/src/docs/user/user-manual.adoc b/docs/src/docs/user/user-manual.adoc index 78dc45f3a7..6591398173 100644 --- a/docs/src/docs/user/user-manual.adoc +++ b/docs/src/docs/user/user-manual.adoc @@ -101,6 +101,14 @@ Navigates to the Catena-X portal. Only applicable for the admin user role. Possibility to check the network status based on logfiles and will provide access to configuration possibilities for the application. +==== Contracts View and export + +In the Contracts View an admin user can view contract agreements and sort them by the contract ID. + +Also, it's possible to select contracts and export/download them as a .csv file + +image::https://raw.githubusercontent.com/eclipse-tractusx/traceability-foss/main/docs/src/images/arc42/user-guide/admin_contract_view.png[] + ==== Data import functionality With the admin user role, you have the ability to import data into the system. diff --git a/docs/src/images/arc42/user-guide/admin_contract_view.png b/docs/src/images/arc42/user-guide/admin_contract_view.png new file mode 100644 index 0000000000..0396ac0a45 Binary files /dev/null and b/docs/src/images/arc42/user-guide/admin_contract_view.png differ diff --git a/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml b/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml new file mode 100644 index 0000000000..2413a2a9bf --- /dev/null +++ b/docs/src/uml-diagrams/arc42/runtime-view/data-sovereignty/get-all-contracts-sequenceflow.puml @@ -0,0 +1,50 @@ +@startuml +title + ==POST api/contracts/request +end title + +autonumber "[00]" + +participant "Trace-X Frontend" as FE order 0 +participant "Trace-X Backend" as BE order 1 +participant "Trace-X Database" as DB order 2 +participant "EDC" as EDC order 3 + +FE -> BE: POST api/contracts/request (limit, offset, sort, filter) + +activate BE +BE -> DB: Fetch requested distinct contractAgreementIds +activate DB +autonumber stop +DB --> BE: List(contractAgreementIds) +autonumber resume +deactivate DB + +BE -> EDC: POST tx-edc/management/v2/contractagreements/request \nfiltered by contractAgreementIds +activate EDC +autonumber stop +EDC --> BE: List of ContractAgreement objects +autonumber resume +deactivate EDC +BE -> BE: Extract contractSigningDate, policy +activate BE +deactivate BE + +loop for all contractAgreementIds +BE -> EDC: GET tx-edc/management/v2/contractagreements/{contractAgreementId}/negotiation +activate EDC +autonumber stop +EDC --> BE: ContractAgreementNegotiation object +autonumber resume +deactivate EDC +BE -> BE: Extractattributes of response (id, counterPartyAddress, state) +activate BE +deactivate BE +end + +autonumber stop +BE --> FE: Pageable Result of ContractResponse objects +autonumber resume +deactivate BE + +@enduml diff --git a/frontend/cypress/integration/pages/AdminPage.ts b/frontend/cypress/integration/pages/AdminPage.ts new file mode 100644 index 0000000000..317548e64e --- /dev/null +++ b/frontend/cypress/integration/pages/AdminPage.ts @@ -0,0 +1,50 @@ + + export enum AdminViewTab { + BPN_CONFIGURATION_VIEW = 'bpn', + IMPORT_VIEW = 'import', + CONTRACT_VIEW = 'contracts' +} + +export class AdminPage { + + static visit() { + cy.get('[data-testid="user-menu"]').click(); + cy.get('[data-testid="user-menu-administration-button"]').click(); + } + + static navigateToTab(tab: AdminViewTab) { + let sectionTestId: string; + switch (tab) { + case AdminViewTab.BPN_CONFIGURATION_VIEW: + sectionTestId = '/admin/configure-bpn' + break; + case AdminViewTab.IMPORT_VIEW: + sectionTestId = '/admin/configure-import' + break; + case AdminViewTab.CONTRACT_VIEW: + sectionTestId = '/admin/contracts' + break; + default: { + throw new Error("The view tab " + tab + " does not exist in the administration view. valid views are [bpn, import, contracts]'"); + } + } + cy.get(`[data-testid="${sectionTestId}"]`).click(); + } + + static getHeaderOfTabView(tab: AdminViewTab) { + return cy.get(`[data-testid="admin_${tab}_view_header"`) + } + + static clickCheckBoxForContractId(contractId: string) { + return cy.get('td').contains(contractId).parent('tr').find('td mat-checkbox').click(); + } + + static clickExportContractsButton() { + return cy.get('[data-testid="export-contracts-button"]').click(); + } + + static getExportedContractsFileData() { + return cy.readFile('cypress/downloads/Exported_Contracts.csv', 'utf-8'); + } + +} diff --git a/frontend/cypress/support/step_definitions/admin-contracts.ts b/frontend/cypress/support/step_definitions/admin-contracts.ts new file mode 100644 index 0000000000..b403bc36d3 --- /dev/null +++ b/frontend/cypress/support/step_definitions/admin-contracts.ts @@ -0,0 +1,46 @@ +import { Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { AdminPage, AdminViewTab } from '../../integration/pages/AdminPage'; + +let currentContractId: string; + +When('navigate to administration view tab {string}', (tabName: AdminViewTab) => { + AdminPage.navigateToTab(tabName); + const header = AdminPage.getHeaderOfTabView(tabName); + switch (tabName) { + case AdminViewTab.BPN_CONFIGURATION_VIEW: + header.contains('BPN - EDC Konfiguration').should('be.visible'); + break; + case AdminViewTab.IMPORT_VIEW: + header.contains('Trace-X Datenimport').should('be.visible'); + break; + case AdminViewTab.CONTRACT_VIEW: + header.contains('Verträge').should('be.visible'); + break; + default: { + throw new Error(`The View Tab header ${ tabName } did not load or is not existing`); + } + } +}); + +When('select contract with contract-id {string}', function(contractId: string) { + currentContractId = contractId; + AdminPage.clickCheckBoxForContractId(contractId).should('have.class', 'mat-mdc-checkbox-checked'); +}); + +When('export selected contracts', function() { + AdminPage.clickExportContractsButton().should('be.visible'); +}); + +Then('exported contracts csv file is existing', function() { + AdminPage.getExportedContractsFileData().then((data) => { + expect(data).to.not.be.null; + }); + +}); + +Then('exported csv file has correct content', function() { + AdminPage.getExportedContractsFileData().then((data) => { + expect(data).to.equal(`contractId,counterpartyAddress,creationDate,endDate,state\n${ currentContractId },https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp,Thu Mar 07 2024,Thu Jan 01 1970,FINALIZED`); + }); + +}); diff --git a/frontend/cypress/support/step_definitions/menu.ts b/frontend/cypress/support/step_definitions/menu.ts index 2edfa5fc41..fedb98b826 100644 --- a/frontend/cypress/support/step_definitions/menu.ts +++ b/frontend/cypress/support/step_definitions/menu.ts @@ -19,7 +19,8 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { Given, Then, When } from '@badeball/cypress-cucumber-preprocessor'; +import { When } from '@badeball/cypress-cucumber-preprocessor'; +import { AdminPage } from '../../integration/pages/AdminPage'; When("user navigate to {string}", function(desiredMenu) { @@ -48,10 +49,13 @@ When("user navigate to {string}", function(desiredMenu) { cy.get('[href="/about"]').click(); break; } - default: { - throw new Error("Set header menu '" + desiredMenu + "' is not one of valid status [Dashboard, Parts, Other parts, Quality investigations, Quality alerts, About]."); + case 'Administration': { + AdminPage.visit(); break; } + default: { + throw new Error("Set header menu '" + desiredMenu + "' is not one of valid status [Dashboard, Parts, Other parts, Quality investigations, Quality alerts, About, Administration]."); + } } }); diff --git a/frontend/src/app/mocks/services/admin-mock/admin.handler.ts b/frontend/src/app/mocks/services/admin-mock/admin.handler.ts index 857ce9f684..b995495863 100644 --- a/frontend/src/app/mocks/services/admin-mock/admin.handler.ts +++ b/frontend/src/app/mocks/services/admin-mock/admin.handler.ts @@ -21,7 +21,7 @@ import { environment } from '@env'; import { rest } from 'msw'; -import { getBpnConfig, getImportReport } from './admin.model'; +import { getBpnConfig, getContracts, getImportReport } from './admin.model'; export const adminHandler = (_ => { @@ -45,6 +45,10 @@ export const adminHandler = (_ => { rest.post(`*${ environment.apiUrl }/assets/import`, (req, res, ctx) => { return res(ctx.status(200), ctx.json(getImportReport())); + }), + + rest.post(`*${ environment.apiUrl }/contracts`, (req, res, ctx) => { + return res(ctx.status(200), ctx.json(getContracts())); }) ]; diff --git a/frontend/src/app/mocks/services/admin-mock/admin.model.ts b/frontend/src/app/mocks/services/admin-mock/admin.model.ts index 282a1f5779..7adaae7153 100644 --- a/frontend/src/app/mocks/services/admin-mock/admin.model.ts +++ b/frontend/src/app/mocks/services/admin-mock/admin.model.ts @@ -19,7 +19,8 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { BpnConfigResponse } from '@page/admin/core/admin.model'; +import {PaginationResponse} from '@core/model/pagination.model'; +import {BpnConfigResponse, ContractResponse, ContractState} from '@page/admin/core/admin.model'; export const getBpnConfig = (): BpnConfigResponse[] => [ @@ -109,102 +110,206 @@ export const getBpnConfig = (): BpnConfigResponse[] => [ }, ]; -export const getImportReport = (): any => { return { - "importStateMessage": [ - { - "catenaXId": "urn:uuid:0733946c-59c6-41ae-9570-cb43a6e4da01", - "persistedOrUpdated": false +export const getImportReport = (): any => { + return { + 'importStateMessage': [ + { + 'catenaXId': 'urn:uuid:0733946c-59c6-41ae-9570-cb43a6e4da01', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:aad27ddb-43aa-4e42-98c2-01e529ef127c', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:e5c96ab5-896a-482c-8761-efd74777ca98', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:4f7b1cf2-a598-4027-bc78-63f6d8e55699', + 'persistedOrUpdated': true, + }, + { + 'catenaXId': 'urn:uuid:bee5614f-9e46-4c98-9209-61a6f2b2a7fc', + 'persistedOrUpdated': true, + }, + { + 'catenaXId': 'urn:uuid:4518c080-14fb-4252-b8de-4362d615868d', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:3cdd2826-5df0-4c7b-b540-9eeccecb2301', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:68904173-ad59-4a77-8412-3e73fcafbd8b', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:6b2296cc-26c0-4f38-8a22-092338c36e22', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:d8030bbf-a874-49fb-b2e1-7610f0ccad12', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:4e390dab-707f-446e-bfbe-653f6f5b1f37', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:7c7d5aec-b15d-491c-8fbd-c61c6c02c69a', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:4a5e9ff6-2d5c-4510-a90e-d55af3ba502f', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:6ec3f1db-2798-454b-a73f-0d21a8966c74', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa01', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa02', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa03', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:0733946c-59c6-41ae-9570-cb43a6e43842', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:44347dec-21d1-47aa-b2a7-f959bf9d424b', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:1233b405-5ac8-4867-93f8-6fdf37733737', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:bcfae197-40fa-4be0-821d-5c1873a1b7c2', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:254604ab-2153-45fb-8cad-54ef09f4070e', + 'persistedOrUpdated': false, + }, + { + 'catenaXId': 'urn:uuid:e3b2f5e2-5be5-4ea6-98f0-6876de0fca4f', + 'persistedOrUpdated': false, + }, + ], + 'validationResult': { + 'validationErrors': [], }, - { - "catenaXId": "urn:uuid:aad27ddb-43aa-4e42-98c2-01e529ef127c", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:e5c96ab5-896a-482c-8761-efd74777ca98", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:4f7b1cf2-a598-4027-bc78-63f6d8e55699", - "persistedOrUpdated": true - }, - { - "catenaXId": "urn:uuid:bee5614f-9e46-4c98-9209-61a6f2b2a7fc", - "persistedOrUpdated": true - }, - { - "catenaXId": "urn:uuid:4518c080-14fb-4252-b8de-4362d615868d", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:3cdd2826-5df0-4c7b-b540-9eeccecb2301", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:68904173-ad59-4a77-8412-3e73fcafbd8b", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:6b2296cc-26c0-4f38-8a22-092338c36e22", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:d8030bbf-a874-49fb-b2e1-7610f0ccad12", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:4e390dab-707f-446e-bfbe-653f6f5b1f37", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:7c7d5aec-b15d-491c-8fbd-c61c6c02c69a", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:4a5e9ff6-2d5c-4510-a90e-d55af3ba502f", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:6ec3f1db-2798-454b-a73f-0d21a8966c74", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa01", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa02", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:1be6ec59-40fb-4993-9836-acb0e284fa03", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:0733946c-59c6-41ae-9570-cb43a6e43842", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:44347dec-21d1-47aa-b2a7-f959bf9d424b", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:1233b405-5ac8-4867-93f8-6fdf37733737", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:bcfae197-40fa-4be0-821d-5c1873a1b7c2", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:254604ab-2153-45fb-8cad-54ef09f4070e", - "persistedOrUpdated": false - }, - { - "catenaXId": "urn:uuid:e3b2f5e2-5be5-4ea6-98f0-6876de0fca4f", - "persistedOrUpdated": false - } - ], - "validationResult": { - "validationErrors": [] - } -}} + }; +}; + +export const getContracts = (): PaginationResponse => { + return { + page: 0, + pageSize: 10, + totalItems: 12, + pageCount: 2, + content: [ + { + "contractId": "abc1", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2024-02-26T13:38:07+01:00", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc2", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc3", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc4", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc5", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc6", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc7", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc8", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc9", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc10", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc11", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc12", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + }, + { + "contractId": "abc13", + "counterpartyAddress": "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", + "creationDate": "2022-05-01T12:34:12", + "endDate": null, + "state": ContractState.FINALIZED + } + ], + }; +}; diff --git a/frontend/src/app/mocks/services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts b/frontend/src/app/mocks/services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts index 073a91e323..6aa32496ca 100644 --- a/frontend/src/app/mocks/services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts +++ b/frontend/src/app/mocks/services/parts-mock/partsAsBuilt/partsAsBuilt.model.ts @@ -66,7 +66,7 @@ export const mockBmwAssets = [ 'receivedQualityAlertIdsInStatusActive': [], 'sentQualityInvestigationIdsInStatusActive': [], 'receivedQualityInvestigationIdsInStatusActive': [], - 'importState': 'TRANSIENT', + 'importState': 'PUBLISHED_TO_CX', 'importNote': 'This is a test import note.' }, { diff --git a/frontend/src/app/modules/core/api/http-error.interceptor.ts b/frontend/src/app/modules/core/api/http-error.interceptor.ts index b323614348..1e43486265 100644 --- a/frontend/src/app/modules/core/api/http-error.interceptor.ts +++ b/frontend/src/app/modules/core/api/http-error.interceptor.ts @@ -19,10 +19,10 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; -import { Observable, throwError } from 'rxjs'; -import { catchError, retry } from 'rxjs/operators'; -import { ToastService } from 'src/app/modules/shared/components/toasts/toast.service'; +import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http'; +import {Observable, throwError} from 'rxjs'; +import {catchError, retry} from 'rxjs/operators'; +import {ToastService} from 'src/app/modules/shared/components/toasts/toast.service'; export class HttpErrorInterceptor implements HttpInterceptor { diff --git a/frontend/src/app/modules/core/layout/header/user-navigation/user-menu.component.html b/frontend/src/app/modules/core/layout/header/user-navigation/user-menu.component.html index 6a87a453c7..827e8c4295 100644 --- a/frontend/src/app/modules/core/layout/header/user-navigation/user-menu.component.html +++ b/frontend/src/app/modules/core/layout/header/user-navigation/user-menu.component.html @@ -89,6 +89,7 @@ [class.user-menu-items--disabled] = "!isAuthorized" [routerLink]="isAuthorized ? ['/' + route] : null" [class.user-menu-items--selected]="route === activeItem" + data-testid="user-menu-administration-button" >

{{ 'pageAdmin.bpnConfig.title' | i18n }}

{{ 'pageAdmin.bpnConfig.title' | i18n }}

diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html new file mode 100644 index 0000000000..a673ac22e0 --- /dev/null +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.html @@ -0,0 +1,55 @@ + + +

{{"pageAdmin.contracts.contracts" | i18n}}

+
+ + +
+
+ {{'pageAdmin.contracts.exportAsCSV' | i18n}} +
+
+ + + + + + + + + + + + + + + +
+ +
diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts new file mode 100644 index 0000000000..679f7c3a80 --- /dev/null +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.spec.ts @@ -0,0 +1,126 @@ +import {TestBed} from '@angular/core/testing'; +import {AdminModule} from '@page/admin/admin.module'; +import {AdminFacade} from '@page/admin/core/admin.facade'; +import {AdminService} from '@page/admin/core/admin.service'; +import {TableHeaderSort} from '@shared/components/table/table.model'; +import {renderComponent} from '@tests/test-render.utils'; +import {of} from 'rxjs'; +import {getContracts} from '../../../../../mocks/services/admin-mock/admin.model'; + +import {ContractTableComponent} from './contract-table.component'; +import {assembleContract} from "@page/admin/core/admin.model"; + +describe('ContractTableComponent', () => { + + const mockAdminFacade = { + getContracts: jasmine.createSpy().and.returnValue(of(getContracts)) + }; + + const renderContractTableComponent = () => renderComponent(ContractTableComponent, {imports: [AdminModule], providers: [{provide: AdminFacade, useValue: mockAdminFacade}]}) + let createElementSpy: jasmine.Spy + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ContractTableComponent], + providers: [AdminFacade, AdminService] + }); + createElementSpy = spyOn(document, 'createElement').and.callThrough(); + + }); + + it('should create', async () => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + expect(componentInstance).toBeTruthy(); + }); + + it('should filter and change table config', async () => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + + const mockFilter = { + contractId: ["hello"], + counterpartyAddress: [], + creationDate: [], + endDate: [], + state: [] + } + const myPagination = {page: 0, pageSize: 10, sorting: ['', null] as TableHeaderSort} + componentInstance.onTableConfigChange(myPagination) + expect(componentInstance.pagination.pageSize).toEqual(10); + + componentInstance.filterActivated(mockFilter); + expect(componentInstance.adminFacade.getContracts).toHaveBeenCalledWith(myPagination.page, myPagination.pageSize, [myPagination.sorting], mockFilter); + + + expect(JSON.stringify(componentInstance.contractFilter)).toContain("hello"); + + }); + + it('select a contract', async () => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + let mockSelectedContract = assembleContract(getContracts().content[0]); + componentInstance.multiSelection([mockSelectedContract]); + expect(componentInstance.selectedContracts.length).toEqual(1); + expect(componentInstance.selectedContracts[0].contractId).toEqual(mockSelectedContract.contractId) + }); + + it('should export contracts as csv', async () => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + + let mockSelectedContract = assembleContract(getContracts().content[0]); + componentInstance.multiSelection([mockSelectedContract]); + + let convertSpy = spyOn(componentInstance, 'convertArrayOfObjectsToCSV'); + let downloadSpy = spyOn(componentInstance, 'downloadCSV') + componentInstance.exportContractsAsCSV(); + expect(convertSpy).toHaveBeenCalledWith([assembleContract(getContracts().content[0])]); + expect(downloadSpy).toHaveBeenCalled(); + + }); + + it('should convert data to csv', async () => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + + let result = componentInstance.convertArrayOfObjectsToCSV([getContracts().content[0]]) + + expect(result).toEqual("contractId,counterpartyAddress,creationDate,endDate,state\n" + + "abc1,https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp,2024-02-26T13:38:07+01:00,,Finalized"); + + }); + it('should download CSV file', async () => { + const {fixture} = await renderContractTableComponent(); + const {componentInstance} = fixture; + const csvContent = 'header1,header2\nvalue1,value2\nvalue3,value4'; // Sample CSV content + const fileName = 'test.csv'; + + + // Mock the required browser APIs + const link = document.createElement('a'); + spyOn(link, 'setAttribute'); + spyOn(link, 'click'); + spyOn(document.body, 'appendChild').and.callThrough(); + spyOn(document.body, 'removeChild').and.callThrough(); + + createElementSpy.and.returnValue(link); + + componentInstance.downloadCSV(csvContent, fileName); + + // Check if a link was created with correct attributes + expect(createElementSpy).toHaveBeenCalledWith('a'); + expect(link.setAttribute).toHaveBeenCalledWith('href', jasmine.any(String)); + expect(link.setAttribute).toHaveBeenCalledWith('download', fileName); + expect(link.style.visibility).toBe('hidden'); + + // Check if the link was appended to the document body + expect(document.body.appendChild).toHaveBeenCalledWith(link); + + // Check if the link was clicked + expect(link.click).toHaveBeenCalled(); + + // Ensure that the link is removed from the document body after being clicked + expect(document.body.removeChild).toHaveBeenCalledWith(link); + }); +}); diff --git a/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts new file mode 100644 index 0000000000..f32926b2d6 --- /dev/null +++ b/frontend/src/app/modules/page/admin/presentation/contract-table/contract-table.component.ts @@ -0,0 +1,108 @@ +import {Component} from '@angular/core'; +import {Pagination} from '@core/model/pagination.model'; +import {AdminFacade} from '@page/admin/core/admin.facade'; +import {Contract} from '@page/admin/core/admin.model'; +import {TableType} from '@shared/components/multi-select-autocomplete/table-type.model'; +import {CreateHeaderFromColumns, TableConfig, TableEventConfig} from '@shared/components/table/table.model'; +import {View} from '@shared/model/view.model'; +import {NotificationAction} from '@shared/modules/notification/notification-action.enum'; +import {Observable} from 'rxjs'; +import {map} from 'rxjs/operators'; + +@Component({ + selector: 'app-contract-table', + templateUrl: './contract-table.component.html', + styleUrls: [], +}) +export class ContractTableComponent { + contracts: Observable>; + contractsView$: Observable>>; + tableConfig: TableConfig; + selectedContracts: Contract[]; + contractFilter: any; + pagination: TableEventConfig; + + constructor(public readonly adminFacade: AdminFacade) { + this.pagination = { page: 0, pageSize: 10, sorting: [ '', null ] }; + this.tableConfig = { + displayedColumns: [ 'select', 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], + header: CreateHeaderFromColumns([ 'contractId', 'counterpartyAddress', 'creationDate', 'endDate', 'state' ], 'pageAdmin.contracts'), + menuActionsConfig: [], + sortableColumns: { + select: false, + contractId: true, + counterpartyAddress: false, + creationDate: false, + endDate: false, + state: false, + }, + hasPagination: true, + }; + + } + + public ngOnInit() { + this.contracts = this.adminFacade.getContracts(0, 50, null, null); + this.contractsView$ = this.contracts.pipe(map(pagination => { + return { data: pagination }; + })); + } + + filterActivated(contractFilter: any): void { + this.contractFilter = contractFilter; + this.contracts = this.adminFacade.getContracts(this.pagination.page, this.pagination.pageSize, [ this.pagination.sorting ], contractFilter); + this.contractsView$ = this.contracts.pipe(map(pagination => { + return { data: pagination }; + })); + } + + public onTableConfigChange(pagination: TableEventConfig): void { + this.pagination = pagination; + this.contracts = this.adminFacade.getContracts(pagination.page, pagination.pageSize, [ pagination.sorting ], this.contractFilter); + this.contractsView$ = this.contracts.pipe(map(pagination => { + return { data: pagination }; + })); + + } + + multiSelection(selectedContracts: Contract[]) { + this.selectedContracts = selectedContracts; + } + + exportContractsAsCSV() { + const csvContent = this.convertArrayOfObjectsToCSV(this.selectedContracts); + this.downloadCSV(csvContent, 'Exported_Contracts.csv'); + } + + convertArrayOfObjectsToCSV(data: any[]) { + const csvArray = []; + const headers = Object.keys(data[0]); + csvArray.push(headers.join(',')); + + data.forEach(item => { + const values = headers.map(header => item[header]); + csvArray.push(values.join(',')); + }); + + return csvArray.join('\n'); + } + + downloadCSV(csvContent: string, fileName: string) { + const blob = new Blob([ csvContent ], { type: 'text/csv;charset=utf-8;' }); + + const link = document.createElement('a'); + const url = URL.createObjectURL(blob); + link.setAttribute('href', url); + link.setAttribute('download', fileName); + link.style.visibility = 'hidden'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + + + } + + + protected readonly NotificationAction = NotificationAction; + protected readonly TableType = TableType; +} diff --git a/frontend/src/app/modules/page/admin/presentation/import-json/import-json.component.html b/frontend/src/app/modules/page/admin/presentation/import-json/import-json.component.html index 59a400598d..831188b21c 100644 --- a/frontend/src/app/modules/page/admin/presentation/import-json/import-json.component.html +++ b/frontend/src/app/modules/page/admin/presentation/import-json/import-json.component.html @@ -20,7 +20,7 @@

{{ 'pageAdmin.importJson.title' | i18n }}

{{ 'pageAdmin.importJson.title' | i18n }}

diff --git a/frontend/src/app/modules/page/parts/model/parts.model.ts b/frontend/src/app/modules/page/parts/model/parts.model.ts index 0247cda5cc..b2c8159212 100644 --- a/frontend/src/app/modules/page/parts/model/parts.model.ts +++ b/frontend/src/app/modules/page/parts/model/parts.model.ts @@ -175,7 +175,8 @@ export enum ImportState { PERSISTENT = "PERSISTENT", IN_SYNCHRONIZATION = "IN_SYNCHRONIZATION", ERROR = "ERROR", - UNSET = "UNSET" + UNSET = "UNSET", + PUBLISHED_TO_CX="PUBLISHED_TO_CX" } export enum ImportStateInCamelCase { @@ -183,7 +184,8 @@ export enum ImportStateInCamelCase { PERSISTENT = "Persistent", IN_SYNCHRONIZATION = "In Synchronization", ERROR = "Error", - UNSET = "Unset" + UNSET = "Unset", + PUBLISHED_TO_CX="Published to CX" } export enum FilterOperator { diff --git a/frontend/src/app/modules/shared/components/chip/chip.component.scss b/frontend/src/app/modules/shared/components/chip/chip.component.scss index 9a50021b93..0dabeaaff6 100644 --- a/frontend/src/app/modules/shared/components/chip/chip.component.scss +++ b/frontend/src/app/modules/shared/components/chip/chip.component.scss @@ -23,6 +23,10 @@ background-color: rgb(255,236,189); } + &__PUBLISHED_TO_CX { + background-color: rgb(218, 245, 255); + } + &__ERROR { background-color: rgb(254,231,226); } diff --git a/frontend/src/app/modules/shared/components/multi-select-autocomplete/autocomplete-strategy.ts b/frontend/src/app/modules/shared/components/multi-select-autocomplete/autocomplete-strategy.ts index 8054019448..2a3fc4da18 100644 --- a/frontend/src/app/modules/shared/components/multi-select-autocomplete/autocomplete-strategy.ts +++ b/frontend/src/app/modules/shared/components/multi-select-autocomplete/autocomplete-strategy.ts @@ -17,6 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ import { Injectable } from '@angular/core'; +import { AdminService } from '@page/admin/core/admin.service'; import { Owner } from '@page/parts/model/owner.enum'; import { NotificationChannel, TableType } from '@shared/components/multi-select-autocomplete/table-type.model'; import { NotificationService } from '@shared/service/notification.service'; @@ -93,6 +94,25 @@ export class AlertStrategy extends AutocompleteStrategy { } } +@Injectable({ + providedIn: 'any', +}) +export class ContractsStrategy extends AutocompleteStrategy { + adminService: AdminService; + + constructor(adminService: AdminService) { + super(); + this.adminService = adminService; + } + + retrieveSuggestionValues(tableType: TableType, filterColumns: string, searchElement: string): any { + return this.adminService.getDistinctFilterValues( + filterColumns, + searchElement, + ); + } +} + export const AutocompleteStrategyMap = new Map([ [ TableType.AS_BUILT_OWN, PartsStrategy ], [ TableType.AS_BUILT_SUPPLIER, PartsStrategy ], @@ -104,6 +124,7 @@ export const AutocompleteStrategyMap = new Map([ [ TableType.CREATED_INVESTIGATION, InvestigationStrategy ], [ TableType.RECEIVED_ALERT, AlertStrategy ], [ TableType.CREATED_ALERT, AlertStrategy ], + [ TableType.CONTRACTS, ContractsStrategy] ]); export function getOwnerOfTable(tableType: TableType): Owner { diff --git a/frontend/src/app/modules/shared/components/multi-select-autocomplete/table-type.model.ts b/frontend/src/app/modules/shared/components/multi-select-autocomplete/table-type.model.ts index 6870340148..a87d2e271c 100644 --- a/frontend/src/app/modules/shared/components/multi-select-autocomplete/table-type.model.ts +++ b/frontend/src/app/modules/shared/components/multi-select-autocomplete/table-type.model.ts @@ -28,6 +28,7 @@ export enum TableType { CREATED_INVESTIGATION = 'CREATED_INVESTIGATION', RECEIVED_ALERT = 'RECEIVED_ALERT', CREATED_ALERT = 'CREATED_ALERT', + CONTRACTS='CONTRACTS' } export enum NotificationChannel { diff --git a/frontend/src/app/modules/shared/components/table/table.component.html b/frontend/src/app/modules/shared/components/table/table.component.html index 047bddbbcb..47c4dbab2a 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.html +++ b/frontend/src/app/modules/shared/components/table/table.component.html @@ -24,7 +24,7 @@
{{tableHeader | i18n}}
-
+

{{tableHeader | i18n }}

@@ -73,7 +73,7 @@ *ngFor="let filter of tableViewConfig.displayFilterColumnMappings"> - {{ 'table.noResultFound' | i18n }} - + {{ 'table.noResultFound' | i18n }} *ngIf="tableConfig.hasPagination" [length]="totalItems" [pageIndex]="pageIndex" - [pageSizeOptions]="[50, 100, 200]" + [pageSizeOptions]="labelId === 'contracts' ? [10,20,50] : [50,100,200]" [attr.aria-label]="'table.selectPageSize' | i18n" [attr.data-testId]="'table.selectPageSize' | i18n" (page)="onPaginationChange($event)" diff --git a/frontend/src/app/modules/shared/components/table/table.component.scss b/frontend/src/app/modules/shared/components/table/table.component.scss index 980c6d9a86..1180f44cd6 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.scss +++ b/frontend/src/app/modules/shared/components/table/table.component.scss @@ -231,3 +231,23 @@ tr.error { } } +.rows-dashboard { + + @media screen and (max-height: 1049px) { + height: 48vh !important; + max-height: 48vh !important; + } + + @media screen and (min-height: 1050px) { + height: 30vh !important; + max-height: 30vh !important; + } + +} + +.max-width-column { + max-width: 450px; + overflow: hidden; + word-break: break-all; +} + diff --git a/frontend/src/app/modules/shared/components/table/table.component.ts b/frontend/src/app/modules/shared/components/table/table.component.ts index 44fefc18bb..29e2f3af08 100644 --- a/frontend/src/app/modules/shared/components/table/table.component.ts +++ b/frontend/src/app/modules/shared/components/table/table.component.ts @@ -86,7 +86,12 @@ export class TableComponent { @Input() tableHeader: string; @Input() multiSortList: TableHeaderSort[]; - @Input() set paginationData({ page, pageSize, totalItems, content }: Pagination) { + @Input() set paginationData(paginationData: Pagination) { + if (!paginationData) { + return; + } + + const { page, pageSize, totalItems, content } = paginationData; this.totalItems = totalItems; this.pageSize = pageSize; this.dataSource.data = content; @@ -164,12 +169,21 @@ export class TableComponent { } ngOnInit(): void { + + const displayFilterColumnMappings = this.tableType === TableType.CONTRACTS ? + PartsTableConfigUtils.generateFilterColumnsMapping(this.tableConfig?.sortableColumns, [ 'creationDate', 'endDate' ], [], true, false) + : PartsTableConfigUtils.generateFilterColumnsMapping(this.tableConfig?.sortableColumns, [ 'createdDate', 'targetDate' ], [], false, true); + + const filterColumns = this.tableType === TableType.CONTRACTS ? + PartsTableConfigUtils.createFilterColumns(this.tableConfig?.displayedColumns, true, false) + : PartsTableConfigUtils.createFilterColumns(this.tableConfig?.displayedColumns, false, true); + this.tableViewConfig = { displayedColumns: Object.keys(this.tableConfig.sortableColumns), filterFormGroup: PartsTableConfigUtils.createFormGroup(this.tableConfig?.displayedColumns), - filterColumns: PartsTableConfigUtils.createFilterColumns(this.tableConfig?.displayedColumns, false, true), + filterColumns: filterColumns, sortableColumns: this.tableConfig?.sortableColumns, - displayFilterColumnMappings: PartsTableConfigUtils.generateFilterColumnsMapping(this.tableConfig?.sortableColumns, [ 'createdDate', 'targetDate' ], [], false, true), + displayFilterColumnMappings: displayFilterColumnMappings, }; for (const controlName in this.tableViewConfig.filterFormGroup) { @@ -214,7 +228,7 @@ export class TableComponent { this.emitMultiSelect(); this.sorting = !direction ? null : ([ active, direction ] as TableHeaderSort); this.isDataLoading = true; - if (this.pageSize === 0){ + if (this.pageSize === 0) { this.pageSize = EmptyPagination.pageSize; } this.configChanged.emit({ page: 0, pageSize: this.pageSize, sorting: this.sorting }); @@ -241,6 +255,22 @@ export class TableComponent { return !!this.selection.selected.find(data => JSON.stringify(data) === JSON.stringify(row)); } + shouldDisplayFilter(filterKey: string) { + switch (filterKey) { + case 'filtercreationDate': + case 'filtercounterpartyAddress': + case 'filterendDate': + case 'filterstate': + case 'Menu': + case 'Filter': + return false; + + default: + return true; + + } + } + private addSelectedValues(newData: unknown[]): void { addSelectedValues(this.selection, newData); } diff --git a/frontend/src/app/modules/shared/helper/filter-helper.ts b/frontend/src/app/modules/shared/helper/filter-helper.ts index 8796da8ce7..3a4b4e8a62 100644 --- a/frontend/src/app/modules/shared/helper/filter-helper.ts +++ b/frontend/src/app/modules/shared/helper/filter-helper.ts @@ -16,16 +16,16 @@ * * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -import { HttpParams } from '@angular/common/http'; +import {HttpParams} from '@angular/common/http'; import { AssetAsBuiltFilter, AssetAsPlannedFilter, FilterOperator, getFilterOperatorValue, } from '@page/parts/model/parts.model'; -import { NotificationFilter } from '../../../mocks/services/investigations-mock/investigations.model'; +import {NotificationFilter} from '../../../mocks/services/investigations-mock/investigations.model'; -export const DATE_FILTER_KEYS = [ 'manufacturingDate', 'functionValidFrom', 'functionValidUntil', 'validityPeriodFrom', 'validityPeriodTo', 'createdDate', 'targetDate' ]; +export const DATE_FILTER_KEYS = [ 'manufacturingDate', 'functionValidFrom', 'functionValidUntil', 'validityPeriodFrom', 'validityPeriodTo', 'createdDate', 'targetDate', 'creationDate', 'endDate' ]; // TODO: Refactor function export function enrichFilterAndGetUpdatedParams(filter: AssetAsBuiltFilter, params: HttpParams, filterOperator: string): HttpParams { diff --git a/frontend/src/assets/locales/de/common.json b/frontend/src/assets/locales/de/common.json index 43dae35630..a99dc08603 100644 --- a/frontend/src/assets/locales/de/common.json +++ b/frontend/src/assets/locales/de/common.json @@ -17,7 +17,8 @@ "notAllowedForAsPlanned": "Diese Funktion ist für Produkte im Lebenszyklus \"AsPlanned\" nicht verfügbar.", "noChildPartsForInvestigation": "Diese Funktion ist für Produkte ohne Bauteile nicht verfügbar.", "noCustomerAsPlannedParts": "Produkte von Kunden im Lebenszyklus \"AsPlanned\" sind nicht verfügbar.", - "nonTransientPart": "Ein oder mehrere ausgewählte Produkte befinden sich nicht im erforderlichen Importstatus \"TRANSIENT\"." + "nonTransientPart": "Ein oder mehrere ausgewählte Produkte befinden sich nicht im erforderlichen Importstatus \"TRANSIENT\".", + "adminContract": "Verträge" }, "pageTitle": { "dashboard": "Dashboard", @@ -143,7 +144,8 @@ "TRANSIENT": "TRANSIENT", "IN_SYNCHRONIZATION": "IN SYNCHRONISATION", "ERROR": "FEHLER", - "UNSET": "UNDEFINIERT" + "UNSET": "UNDEFINIERT", + "PUBLISHED_TO_CX": "VERÖFFENTLICHT" }, "severity": { "MINOR": "Gering", @@ -333,7 +335,8 @@ "PERSISTENT": "Persistent", "IN_SYNCHRONIZATION": "In Synchronisation", "ERROR": "Fehler", - "UNSET": "Undefiniert" + "UNSET": "Undefiniert", + "PUBLISHED_TO_CX": "Veröffentlicht" } }, "parts": { diff --git a/frontend/src/assets/locales/de/page.admin.json b/frontend/src/assets/locales/de/page.admin.json index 404dc38f48..1171ec8065 100644 --- a/frontend/src/assets/locales/de/page.admin.json +++ b/frontend/src/assets/locales/de/page.admin.json @@ -40,6 +40,17 @@ "description": "Beschreibung", "uploadMore": "Mehr Hochladen", "noImportStateMessage": "Der Server hat keine weitere Information zurückgegeben." + }, + "contracts": { + "contracts": "Verträge", + "contractId": "Vertrags-ID", + "counterpartyAddress": "Vertragspartner Adresse", + "creationDate": "Erstelldatum", + "endDate": "Ablaufdatum", + "state": "Status", + "policies": "Richtlinie", + "selectAtleastOne": "Selektieren Sie mindestens einen Vertrag um exportieren zu können.", + "exportAsCSV": ".CSV-Datei Export" } } } diff --git a/frontend/src/assets/locales/en/common.json b/frontend/src/assets/locales/en/common.json index 4b8dab2d62..db7074999e 100644 --- a/frontend/src/assets/locales/en/common.json +++ b/frontend/src/assets/locales/en/common.json @@ -17,7 +17,8 @@ "notAllowedForAsPlanned": "This function is not available for Parts in the Lifecycle \"AsPlanned\".", "noChildPartsForInvestigation": "This function is not available for Parts without components.", "noCustomerAsPlannedParts": "Customer parts in lifecycle \"AsPlanned\" are not available.", - "nonTransientPart": "One or more selected parts are not in the required import state \"TRANSIENT\"." + "nonTransientPart": "One or more selected parts are not in the required import state \"TRANSIENT\".", + "adminContract": "Contracts" }, "pageTitle": { "dashboard": "Dashboard", @@ -141,7 +142,8 @@ "TRANSIENT": "TRANSIENT", "IN_SYNCHRONIZATION": "IN SYNCHRONIZATION", "ERROR": "ERROR", - "UNSET": "UNSET" + "UNSET": "UNSET", + "PUBLISHED_TO_CX": "PUBLISHED" }, "severity": { "MINOR": "Minor", @@ -335,7 +337,8 @@ "PERSISTENT": "Persistent", "IN_SYNCHRONIZATION": "In Synchronization", "ERROR": "Error", - "UNSET": "Unset" + "UNSET": "Unset", + "PUBLISHED_TO_CX": "Veröffentlicht" } }, diff --git a/frontend/src/assets/locales/en/page.admin.json b/frontend/src/assets/locales/en/page.admin.json index 6b156175b4..cd9dadebcd 100644 --- a/frontend/src/assets/locales/en/page.admin.json +++ b/frontend/src/assets/locales/en/page.admin.json @@ -40,6 +40,17 @@ "description": "Description", "uploadMore": "Upload more", "noImportStateMessage": "No additional information was returned by the server." + }, + "contracts": { + "contracts": "Contracts", + "contractId": "Contract ID", + "counterpartyAddress": "Counterparty address", + "creationDate": "Creation date", + "endDate": "End date", + "state": "State", + "policies": "Policies", + "selectAtleastOne": "Select atleast one contract to use the export functionality.", + "exportAsCSV": ".CSV-File Export" } } } diff --git a/frontend/src/theme/base.scss b/frontend/src/theme/base.scss index b36ab4afdd..365dd6d360 100644 --- a/frontend/src/theme/base.scss +++ b/frontend/src/theme/base.scss @@ -172,13 +172,61 @@ app-parts-table { } as-split { - height: 61vh !important; + + @media screen and (max-height: 1049px) { + height: 66vh !important + } + + @media screen and (min-height: 1050px) { + height: 75vh !important + } + +} + +app-parts, app-other-parts { + .table-wrapper { + @media screen and (max-height: 1049px) { + height: 52vh !important; + max-height: 52vh !important; + } + + @media screen and (min-height: 1050px) { + height: 60vh !important; + max-height: 60vh !important; + } + } + + .mat-mdc-paginator-page-size { + margin-bottom: 3px !important; + } } app-other-parts { .table-wrapper { background-color: white; - height: 40.5vh; + @media screen and (max-height: 1049px) { + height: 33vh !important; + max-height: 56vh !important + } + + @media screen and (min-height: 1050px) { + height: 56vh !important; + max-height: 56vh !important; + } + } +} + +app-notifications-tab { + .table-wrapper { + background-color: white; + @media screen and (max-height: 1049px) { + height: 56vh ; + } + + @media screen and (min-height: 1050px) { + height: 70vh ; + max-height: 70vh ; + } } } @@ -239,7 +287,6 @@ app-parts, app-other-parts, app-notifications-tab { } .table-wrapper { - max-height: 52vh; overflow: auto; } @@ -289,3 +336,9 @@ app-textarea { padding-top: 14px !important; } } + +app-admin { + .table-wrapper { + overflow-x: auto; + } +} diff --git a/tx-backend/openapi/traceability-foss-backend.json b/tx-backend/openapi/traceability-foss-backend.json index bedc0e26e6..61451dd2da 100644 --- a/tx-backend/openapi/traceability-foss-backend.json +++ b/tx-backend/openapi/traceability-foss-backend.json @@ -37,23 +37,18 @@ "description" : "The endpoint returns a result of BPN EDC URL mappings.", "operationId" : "getBpnEdcs", "responses" : { - "200" : { - "description" : "Returns the paged result found", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -72,8 +67,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -82,8 +77,8 @@ } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -92,8 +87,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -102,18 +97,23 @@ } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns the paged result found", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -154,18 +154,23 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -174,23 +179,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -199,8 +199,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -209,8 +209,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -229,8 +229,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -271,18 +271,23 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "200" : { + "description" : "Returns the paged result found for BpnEdcMapping", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/BpnEdcMappingResponse" + } } } } }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -291,23 +296,18 @@ } } }, - "200" : { - "description" : "Returns the paged result found for BpnEdcMapping", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/BpnEdcMappingResponse" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -316,8 +316,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -326,8 +326,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -346,8 +346,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -385,18 +385,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -405,8 +395,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -415,8 +405,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -441,6 +431,16 @@ "application/json" : {} } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -451,8 +451,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -504,8 +504,8 @@ "application/json" : {} } }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -514,8 +514,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -524,14 +524,8 @@ } } }, - "200" : { - "description" : "Ok.", - "content" : { - "application/json" : {} - } - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -540,8 +534,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -550,8 +544,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -570,8 +564,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -579,6 +573,12 @@ } } } + }, + "200" : { + "description" : "Ok.", + "content" : { + "application/json" : {} + } } }, "security" : [ @@ -609,8 +609,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -619,8 +619,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -629,8 +629,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -639,8 +639,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -649,8 +649,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -659,28 +659,28 @@ } } }, - "201" : { - "description" : "Created.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -729,11 +729,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -742,8 +739,14 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -752,11 +755,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -765,8 +765,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -775,8 +775,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -795,8 +795,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -845,11 +845,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -858,8 +855,14 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -868,11 +871,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -881,8 +881,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -891,8 +891,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -911,8 +911,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -951,18 +951,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -974,8 +964,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -984,8 +974,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1007,6 +997,16 @@ "204" : { "description" : "No content." }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -1017,8 +1017,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1057,18 +1057,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1080,8 +1070,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1090,8 +1080,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1113,6 +1103,16 @@ "204" : { "description" : "No content." }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -1123,8 +1123,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1162,26 +1162,6 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -1322,8 +1302,117 @@ } } }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + } + }, + "security" : [ + { + "oAuth2" : [ + "profile email" + ] + } + ] + } + }, + "/edc/notification/contract" : { + "post" : { + "tags" : [ + "Notifications" + ], + "summary" : "Triggers EDC notification contract", + "description" : "The endpoint Triggers EDC notification contract based on notification type and method", + "operationId" : "createNotificationContract", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreateNotificationContractRequest" + } + } + }, + "required" : true + }, + "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1332,8 +1421,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1352,6 +1441,16 @@ } } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -1362,8 +1461,18 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "201" : { + "description" : "Created.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/CreateNotificationContractResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1382,31 +1491,35 @@ ] } }, - "/edc/notification/contract" : { + "/contracts" : { "post" : { "tags" : [ - "Notifications" + "getContracts", + "Contracts" ], - "summary" : "Triggers EDC notification contract", - "description" : "The endpoint Triggers EDC notification contract based on notification type and method", - "operationId" : "createNotificationContract", + "summary" : "All contract agreements for all assets", + "description" : "This endpoint returns all contract agreements for alls assets in Trace-X", + "operationId" : "contracts", "requestBody" : { "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/CreateNotificationContractRequest" + "$ref" : "#/components/schemas/PageableFilterRequest" } } }, "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Too many requests." + } } } } @@ -1416,67 +1529,91 @@ "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Internal server error." + } } } } }, - "400" : { - "description" : "Bad request.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Not found." + } } } } }, - "404" : { - "description" : "Not found.", + "200" : { + "description" : "Ok.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "description" : "PageResults", + "items" : { + "$ref" : "#/components/schemas/PageResultContractResponse" + } } } } }, - "429" : { - "description" : "Too many requests.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Authorization failed." + } } } } }, - "201" : { - "description" : "Created.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/CreateNotificationContractResponse" + "type" : "string", + "example" : { + "message" : "Forbidden." + } } } } }, - "403" : { - "description" : "Forbidden.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Bad request." + } } } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "type" : "string", + "example" : { + "message" : "Unsupported media type." + } } } } @@ -1514,8 +1651,8 @@ "204" : { "description" : "No Content." }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1524,8 +1661,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1534,14 +1671,8 @@ } } }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} - } - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1550,8 +1681,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1560,8 +1691,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1580,8 +1711,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1589,6 +1720,12 @@ } } } + }, + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} + } } }, "security" : [ @@ -1630,8 +1767,8 @@ "204" : { "description" : "No Content." }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1640,8 +1777,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1650,14 +1787,8 @@ } } }, - "200" : { - "description" : "OK.", - "content" : { - "application/json" : {} - } - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1666,8 +1797,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1676,8 +1807,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1696,8 +1827,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1705,6 +1836,12 @@ } } } + }, + "200" : { + "description" : "OK.", + "content" : { + "application/json" : {} + } } }, "security" : [ @@ -1735,8 +1872,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1745,8 +1882,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1755,8 +1892,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -1765,8 +1902,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -1775,8 +1912,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -1785,9 +1922,6 @@ } } }, - "201" : { - "description" : "Created." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -1798,8 +1932,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "201" : { + "description" : "Created." + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -1837,18 +1974,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -1857,8 +1984,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -1867,8 +1994,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2066,6 +2193,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -2074,6 +2205,16 @@ } } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -2084,8 +2225,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2123,8 +2264,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2133,8 +2274,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2143,8 +2284,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2153,8 +2294,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2163,8 +2304,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2173,9 +2314,6 @@ } } }, - "201" : { - "description" : "Created." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -2186,8 +2324,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "201" : { + "description" : "Created." + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2225,8 +2366,18 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2245,6 +2396,46 @@ } } }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -2424,6 +2615,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -2431,56 +2626,6 @@ } } } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -2511,8 +2656,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2521,8 +2666,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2531,8 +2676,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2541,8 +2686,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2551,8 +2696,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2561,28 +2706,28 @@ } } }, - "201" : { - "description" : "Created.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/QualityNotificationIdResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", + "201" : { + "description" : "Created.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/QualityNotificationIdResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2631,11 +2776,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2644,8 +2786,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2654,8 +2799,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2664,8 +2809,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2674,8 +2819,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2694,8 +2839,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2744,11 +2889,8 @@ "required" : true }, "responses" : { - "204" : { - "description" : "No content." - }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2757,8 +2899,14 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "204" : { + "description" : "No content." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2767,11 +2915,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2780,8 +2925,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2790,8 +2935,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2810,8 +2955,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2850,8 +2995,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2860,8 +3005,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2870,11 +3018,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -2883,8 +3028,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -2893,8 +3038,11 @@ } } }, - "429" : { - "description" : "Too many requests.", + "204" : { + "description" : "No content." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -2903,9 +3051,6 @@ } } }, - "204" : { - "description" : "No content." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -2916,8 +3061,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -2956,18 +3101,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -2979,8 +3114,8 @@ "200" : { "description" : "Ok." }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -2989,8 +3124,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -3012,6 +3147,16 @@ "204" : { "description" : "No content." }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -3022,8 +3167,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3061,8 +3206,18 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3215,18 +3370,8 @@ } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -3235,8 +3380,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -3255,8 +3400,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3294,8 +3439,18 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -3314,6 +3469,16 @@ } } }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the assets found", "content" : { @@ -3489,6 +3654,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -3506,26 +3675,6 @@ } } }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "403" : { "description" : "Forbidden.", "content" : { @@ -3536,8 +3685,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3583,6 +3732,56 @@ "required" : true }, "responses" : { + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the updated asset", "content" : { @@ -3739,78 +3938,32 @@ "format" : "int64", "example" : 2 } - }, - "importState" : { - "type" : "string", - "example" : "TRANSIENT", - "enum" : [ - "TRANSIENT", - "PERSISTENT", - "ERROR", - "IN_SYNCHRONIZATION", - "UNSET" - ] - }, - "importNote" : { - "type" : "string", - "example" : "Asset created successfully in transient state" - }, - "tombstone" : { - "type" : "string", - "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" - } - } - } - } - } - } - }, - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + }, + "importState" : { + "type" : "string", + "example" : "TRANSIENT", + "enum" : [ + "TRANSIENT", + "PERSISTENT", + "ERROR", + "IN_SYNCHRONIZATION", + "UNSET" + ] + }, + "importNote" : { + "type" : "string", + "example" : "Asset created successfully in transient state" + }, + "tombstone" : { + "type" : "string", + "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" + } + } + } } } } @@ -3825,8 +3978,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -3864,56 +4017,6 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the assets found", "content" : { @@ -4089,6 +4192,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -4096,8 +4203,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4115,6 +4222,56 @@ } } } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, "security" : [ @@ -4153,18 +4310,8 @@ "required" : true }, "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4173,8 +4320,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4183,8 +4330,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4378,6 +4525,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -4385,6 +4536,16 @@ } } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -4395,8 +4556,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4424,8 +4585,8 @@ "description" : "The endpoint Triggers reload of shell descriptors.", "operationId" : "reload", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4434,8 +4595,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4444,11 +4605,8 @@ } } }, - "202" : { - "description" : "Created registry reload job." - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4457,8 +4615,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4467,8 +4625,11 @@ } } }, - "429" : { - "description" : "Too many requests.", + "202" : { + "description" : "Created registry reload job." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4487,8 +4648,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4516,8 +4677,8 @@ "description" : "The endpoint returns all policies .", "operationId" : "policy", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4526,8 +4687,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4536,8 +4697,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4546,8 +4707,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4556,8 +4717,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4566,28 +4727,28 @@ } } }, - "200" : { - "description" : "Returns the policies", + "403" : { + "description" : "Forbidden.", "content" : { - "*/*" : { + "application/json" : { "schema" : { - "$ref" : "#/components/schemas/PolicyResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", + "200" : { + "description" : "Returns the policies", "content" : { - "application/json" : { + "*/*" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/PolicyResponse" } } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4624,20 +4785,10 @@ "format" : "int64" } } - ], - "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + ], + "responses" : { + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4662,8 +4813,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4672,8 +4823,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4692,6 +4843,16 @@ } } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -4702,8 +4863,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4771,23 +4932,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -4806,18 +4962,23 @@ } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4826,8 +4987,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4846,8 +5007,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4875,8 +5036,8 @@ "description" : "The endpoint can return limited data based on the user role", "operationId" : "dashboard", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4885,28 +5046,28 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Returns dashboard data", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/DashboardResponse" } } } }, - "200" : { - "description" : "Returns dashboard data", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/DashboardResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -4915,8 +5076,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -4925,8 +5086,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -4945,8 +5106,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -4988,8 +5149,8 @@ "204" : { "description" : "No Content." }, - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -4998,28 +5159,28 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "OK.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "$ref" : "#/components/schemas/ImportReportResponse" } } } }, - "200" : { - "description" : "OK.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ImportReportResponse" + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -5028,8 +5189,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5038,8 +5199,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5058,8 +5219,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5105,8 +5266,18 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5125,6 +5296,36 @@ } } }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -5304,6 +5505,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -5312,48 +5517,8 @@ } } }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5423,23 +5588,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5458,18 +5618,23 @@ } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5478,8 +5643,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5498,8 +5663,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5537,8 +5702,18 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -5557,8 +5732,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -5567,8 +5742,8 @@ } } }, - "404" : { - "description" : "Not found.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -5577,8 +5752,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -5762,6 +5937,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -5769,18 +5948,8 @@ } } }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -5826,56 +5995,6 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "400" : { - "description" : "Bad request.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "404" : { - "description" : "Not found.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "429" : { - "description" : "Too many requests.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, "200" : { "description" : "Returns the paged result found for Asset", "content" : { @@ -6055,6 +6174,10 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } @@ -6063,8 +6186,8 @@ } } }, - "403" : { - "description" : "Forbidden.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6082,6 +6205,56 @@ } } } + }, + "500" : { + "description" : "Internal server error.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "403" : { + "description" : "Forbidden.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "415" : { + "description" : "Unsupported media type", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } } }, "security" : [ @@ -6144,23 +6317,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6179,18 +6347,23 @@ } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6199,8 +6372,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6219,8 +6392,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6248,8 +6421,8 @@ "description" : "The endpoint returns a map for assets consumed by the map.", "operationId" : "assetsCountryMap", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6258,8 +6431,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6268,8 +6441,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6278,8 +6451,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6288,8 +6461,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6298,23 +6471,18 @@ } } }, - "200" : { - "description" : "Returns the assets found", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "403" : { - "description" : "Forbidden.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6323,12 +6491,17 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "200" : { + "description" : "Returns the assets found", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } @@ -6362,8 +6535,18 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6382,6 +6565,16 @@ } } }, + "429" : { + "description" : "Too many requests.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "400" : { "description" : "Bad request.", "content" : { @@ -6392,8 +6585,8 @@ } } }, - "404" : { - "description" : "Not found.", + "403" : { + "description" : "Forbidden.", "content" : { "application/json" : { "schema" : { @@ -6402,8 +6595,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6587,32 +6780,16 @@ "tombstone" : { "type" : "string", "example" : " {\n \"catenaXId\": \"urn:uuid:7e4541ea-bb0f-464c-8cb3-021abccbfaf5\",\n \"endpointURL\": \"https://irs-provider-dataplane3.dev.demo.catena-x.net/api/public/data/urn:uuid:c7b3ea3d-97ea-41e4-960d-12fb166e1da1\",\n \"processingError\": {\n \"processStep\": \"SubmodelRequest\",\n \"errorDetail\": \"org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 : \"{\"errors\":[]}\"\",\n \"lastAttempt\": \"2024-02-07T12:06:34.400493282Z\",\n \"retryCounter\": 0\n },\n \"policy\": null\n }\n" + }, + "contractAgreementId" : { + "type" : "string", + "example" : "TODO" } } } } } } - }, - "403" : { - "description" : "Forbidden.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "401" : { - "description" : "Authorization failed.", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } } }, "security" : [ @@ -6644,18 +6821,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" - } - } - } - }, - "500" : { - "description" : "Internal server error.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6679,8 +6846,8 @@ } } }, - "400" : { - "description" : "Bad request.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6689,8 +6856,8 @@ } } }, - "404" : { - "description" : "Not found.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6709,6 +6876,16 @@ } } }, + "400" : { + "description" : "Bad request.", + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ErrorResponse" + } + } + } + }, "403" : { "description" : "Forbidden.", "content" : { @@ -6719,8 +6896,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6788,23 +6965,18 @@ } ], "responses" : { - "200" : { - "description" : "Returns a distinct filter values for given fieldName.", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { - "maxItems" : 2147483647, - "minItems" : 0, - "type" : "array", - "items" : { - "type" : "string" - } + "$ref" : "#/components/schemas/ErrorResponse" } } } }, - "415" : { - "description" : "Unsupported media type", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6823,18 +6995,23 @@ } } }, - "400" : { - "description" : "Bad request.", + "200" : { + "description" : "Returns a distinct filter values for given fieldName.", "content" : { "application/json" : { "schema" : { - "$ref" : "#/components/schemas/ErrorResponse" + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "items" : { + "type" : "string" + } } } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6843,8 +7020,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6863,8 +7040,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6892,8 +7069,8 @@ "description" : "Deletes all submodels from the system.", "operationId" : "deleteSubmodels", "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -6902,8 +7079,11 @@ } } }, - "500" : { - "description" : "Internal server error.", + "200" : { + "description" : "Ok." + }, + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -6912,11 +7092,8 @@ } } }, - "200" : { - "description" : "Ok." - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -6925,8 +7102,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -6935,8 +7112,8 @@ } } }, - "429" : { - "description" : "Too many requests.", + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -6945,9 +7122,6 @@ } } }, - "204" : { - "description" : "No Content." - }, "403" : { "description" : "Forbidden.", "content" : { @@ -6958,8 +7132,11 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "204" : { + "description" : "No Content." + }, + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -6997,8 +7174,8 @@ } ], "responses" : { - "415" : { - "description" : "Unsupported media type", + "404" : { + "description" : "Not found.", "content" : { "application/json" : { "schema" : { @@ -7007,8 +7184,8 @@ } } }, - "500" : { - "description" : "Internal server error.", + "401" : { + "description" : "Authorization failed.", "content" : { "application/json" : { "schema" : { @@ -7017,11 +7194,8 @@ } } }, - "204" : { - "description" : "Deleted." - }, - "400" : { - "description" : "Bad request.", + "500" : { + "description" : "Internal server error.", "content" : { "application/json" : { "schema" : { @@ -7030,8 +7204,8 @@ } } }, - "404" : { - "description" : "Not found.", + "429" : { + "description" : "Too many requests.", "content" : { "application/json" : { "schema" : { @@ -7040,8 +7214,11 @@ } } }, - "429" : { - "description" : "Too many requests.", + "204" : { + "description" : "Deleted." + }, + "400" : { + "description" : "Bad request.", "content" : { "application/json" : { "schema" : { @@ -7050,9 +7227,6 @@ } } }, - "200" : { - "description" : "Okay" - }, "403" : { "description" : "Forbidden.", "content" : { @@ -7063,8 +7237,8 @@ } } }, - "401" : { - "description" : "Authorization failed.", + "415" : { + "description" : "Unsupported media type", "content" : { "application/json" : { "schema" : { @@ -7072,6 +7246,9 @@ } } } + }, + "200" : { + "description" : "Okay" } }, "security" : [ @@ -7106,18 +7283,6 @@ } } }, - "ErrorResponse" : { - "type" : "object", - "properties" : { - "message" : { - "maxLength" : 1000, - "minLength" : 0, - "pattern" : "^.*$", - "type" : "string", - "example" : "Access Denied" - } - } - }, "BpnEdcMappingResponse" : { "type" : "object", "properties" : { @@ -7131,6 +7296,18 @@ } } }, + "ErrorResponse" : { + "type" : "object", + "properties" : { + "message" : { + "maxLength" : 1000, + "minLength" : 0, + "pattern" : "^.*$", + "type" : "string", + "example" : "Access Denied" + } + } + }, "StartQualityNotificationRequest" : { "required" : [ "severity" @@ -7532,6 +7709,77 @@ } } }, + "ContractResponse" : { + "type" : "object", + "properties" : { + "contractId" : { + "maxLength" : 255, + "type" : "string", + "example" : "66" + }, + "counterpartyAddress" : { + "maxLength" : 255, + "type" : "string", + "example" : "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp" + }, + "creationDate" : { + "maxLength" : 255, + "type" : "string", + "format" : "date-time", + "example" : "2023-02-21T21:27:10.73495Z" + }, + "endDate" : { + "maxLength" : 255, + "type" : "string", + "format" : "date-time", + "example" : "2023-02-21T21:27:10.73495Z" + }, + "state" : { + "maxLength" : 255, + "type" : "string", + "example" : "FINALIZED" + }, + "policy" : { + "maxLength" : 255, + "type" : "string", + "example" : "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}" + } + } + }, + "PageResultContractResponse" : { + "type" : "object", + "properties" : { + "content" : { + "maxItems" : 2147483647, + "minItems" : 0, + "type" : "array", + "description" : "Content of PageResults", + "items" : { + "$ref" : "#/components/schemas/ContractResponse" + } + }, + "page" : { + "type" : "integer", + "format" : "int32", + "example" : 1 + }, + "pageCount" : { + "type" : "integer", + "format" : "int32", + "example" : 15 + }, + "pageSize" : { + "type" : "integer", + "format" : "int32", + "example" : 10 + }, + "totalItems" : { + "type" : "integer", + "format" : "int64", + "example" : 2 + } + } + }, "RegisterAssetRequest" : { "required" : [ "assetIds", @@ -7923,13 +8171,9 @@ "ISNONEOF" ] }, - "rightOperands" : { - "type" : "array", - "example" : "ID Trace 3.1", - "items" : { - "type" : "string", - "example" : "ID Trace 3.1" - } + "rightOperand" : { + "type" : "string", + "example" : "ID Trace 3.1" } } }, @@ -7962,10 +8206,7 @@ ] }, "constraints" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/ConstraintsResponse" - } + "$ref" : "#/components/schemas/ConstraintsResponse" } } }, diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/PolicyService.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/PolicyService.java index 7a941921d0..c98abd8213 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/PolicyService.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/PolicyService.java @@ -18,10 +18,10 @@ ********************************************************************************/ package org.eclipse.tractusx.traceability.assets.application.importpoc; -import org.eclipse.tractusx.irs.edc.client.policy.Policy; +import assets.importpoc.PolicyResponse; import java.util.List; public interface PolicyService { - List getAllPolicies(); + List getAllPolicies(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/mapper/PolicyResponseMapper.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/mapper/PolicyResponseMapper.java deleted file mode 100644 index ed8f5e3828..0000000000 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/mapper/PolicyResponseMapper.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2024 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Apache License, Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ -package org.eclipse.tractusx.traceability.assets.application.importpoc.mapper; - -import assets.importpoc.ConstraintResponse; -import assets.importpoc.ConstraintsResponse; -import assets.importpoc.OperatorTypeResponse; -import assets.importpoc.PermissionResponse; -import assets.importpoc.PolicyResponse; -import assets.importpoc.PolicyTypeResponse; -import org.eclipse.tractusx.irs.edc.client.policy.Constraint; -import org.eclipse.tractusx.irs.edc.client.policy.OperatorType; -import org.eclipse.tractusx.irs.edc.client.policy.Permission; -import org.eclipse.tractusx.irs.edc.client.policy.Policy; -import org.eclipse.tractusx.irs.edc.client.policy.PolicyType; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - - -public class PolicyResponseMapper { - - public static List fromList(List allPolicies) { - return allPolicies - .stream() - .map(PolicyResponseMapper::from) - .collect(Collectors.toList()); - } - - public static PolicyResponse from(final Policy policy) { - if (policy == null) { - return null; - } - - List list = policy.getPermissions() - .stream() - .map(PolicyResponseMapper::from) - .collect(Collectors.toList()); - - return new PolicyResponse( - policy.getPolicyId(), - policy.getCreatedOn(), - policy.getValidUntil(), - list - ); - } - - public static PermissionResponse from(final Permission permission) { - List or = permission.getConstraint().getOr(); - List and = permission.getConstraint().getAnd(); - List andResponse = and.stream() - .map(constraint -> new ConstraintResponse(constraint.getLeftOperand(), OperatorTypeResponse.valueOf(constraint.getOperator().getOperatorType().name()), List.of(constraint.getRightOperand())) - ).toList(); - - List orResponse = or.stream() - .map(constraint -> new ConstraintResponse(constraint.getLeftOperand(), OperatorTypeResponse.valueOf(constraint.getOperator().getOperatorType().name()), List.of(constraint.getRightOperand())) - ).toList(); - - ConstraintsResponse constraintsResponse = new ConstraintsResponse(andResponse, orResponse); - - PolicyTypeResponse policyTypeResponse = Optional.ofNullable(permission.getAction()) - .map(PolicyResponseMapper::from) - .orElse(null); - - return new PermissionResponse(policyTypeResponse, List.of(constraintsResponse)); - } - - public static PolicyTypeResponse from(final PolicyType policyType) { - return PolicyTypeResponse.valueOf(policyType.name()); - } - - public static ConstraintResponse from(final Constraint constraint) { - return new ConstraintResponse( - constraint.getLeftOperand(), - from(constraint.getOperator().getOperatorType()), - List.of(constraint.getRightOperand()) - ); - } - - public static OperatorTypeResponse from(final OperatorType operatorType) { - return OperatorTypeResponse.valueOf(operatorType.name()); - } - - -} diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java index aa0596d6ff..d6247aaf0e 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/application/importpoc/rest/PolicyController.java @@ -31,13 +31,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.eclipse.tractusx.traceability.assets.application.importpoc.PolicyService; -import org.eclipse.tractusx.traceability.assets.application.importpoc.mapper.PolicyResponseMapper; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; + @Slf4j @RequiredArgsConstructor @RestController @@ -46,7 +46,7 @@ @RequestMapping(path = "/policies") public class PolicyController { - private final PolicyService policyService; + private final PolicyService policyService; @Operation(operationId = "policy", summary = "Get all policies ", @@ -54,7 +54,9 @@ public class PolicyController { description = "The endpoint returns all policies .", security = @SecurityRequirement(name = "oAuth2", scopes = "profile email")) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Returns the policies", - content = {@Content(schema = @Schema(implementation = PolicyResponse.class))}), + content = {@Content( + mediaType = "application/json", + schema = @Schema(implementation = PolicyResponse.class))}), @ApiResponse( responseCode = "400", description = "Bad request.", @@ -100,6 +102,6 @@ public class PolicyController { schema = @Schema(implementation = ErrorResponse.class)))}) @GetMapping() public List policy() { - return PolicyResponseMapper.fromList(policyService.getAllPolicies()); + return policyService.getAllPolicies(); } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/IrsRepository.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/IrsRepository.java index 636abda3fe..d90dd55e2e 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/IrsRepository.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/base/IrsRepository.java @@ -23,6 +23,7 @@ import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.request.BomLifecycle; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Direction; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; import java.util.List; @@ -39,4 +40,6 @@ public interface IrsRepository { void createIrsPolicyIfMissing(); void handleJobFinishedCallback(String jobId, String jobState); + + List getPolicies(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImpl.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImpl.java index 6f0a4a75c0..7da4c6ac39 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImpl.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImpl.java @@ -18,32 +18,29 @@ ********************************************************************************/ package org.eclipse.tractusx.traceability.assets.domain.importpoc.service; +import assets.importpoc.PolicyResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy; -import org.eclipse.tractusx.irs.edc.client.policy.Policy; import org.eclipse.tractusx.traceability.assets.application.importpoc.PolicyService; +import org.eclipse.tractusx.traceability.assets.domain.base.IrsRepository; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; @Slf4j @RequiredArgsConstructor @Service public class PolicyServiceImpl implements PolicyService { - private final AcceptedPoliciesProvider acceptedPoliciesProvider; + private final IrsRepository irsRepository; @Override - public List getAllPolicies() { - List acceptedPolicies = Optional.ofNullable(acceptedPoliciesProvider.getAcceptedPolicies()) + public List getAllPolicies() { + List allPolicies = Optional.ofNullable(irsRepository.getPolicies()) .orElse(Collections.emptyList()); - return acceptedPolicies.stream() - .map(AcceptedPolicy::policy) - .collect(Collectors.toList()); + return IrsPolicyResponse.toResponse(allPolicies); } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsClient.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsClient.java index bcc3a9e54c..57f983bf2e 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsClient.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsClient.java @@ -30,8 +30,8 @@ import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.request.RegisterPolicyRequest; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Context; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IRSResponse; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Payload; -import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties; import org.jetbrains.annotations.Nullable; import org.springframework.core.ParameterizedTypeReference; @@ -66,8 +66,8 @@ public IrsClient(RestTemplate irsAdminTemplate, this.traceabilityProperties = traceabilityProperties; } - public List getPolicies() { - return irsAdminTemplate.exchange(POLICY_PATH, HttpMethod.GET, null, new ParameterizedTypeReference>() { + public List getPolicies() { + return irsAdminTemplate.exchange(POLICY_PATH, HttpMethod.GET, null, new ParameterizedTypeReference>() { }).getBody(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsRepositoryImpl.java similarity index 92% rename from tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java rename to tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsRepositoryImpl.java index a7ccc422fe..5fde7a5553 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsService.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsRepositoryImpl.java @@ -21,7 +21,6 @@ package org.eclipse.tractusx.traceability.assets.infrastructure.base.irs; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.eclipse.tractusx.irs.edc.client.policy.Constraints; import org.eclipse.tractusx.traceability.assets.domain.base.IrsRepository; @@ -31,8 +30,8 @@ import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.request.RegisterJobRequest; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Direction; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IRSResponse; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.JobStatus; -import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.factory.AssetMapperFactory; import org.eclipse.tractusx.traceability.bpn.domain.service.BpnRepository; import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties; @@ -52,11 +51,10 @@ @Slf4j @Service -public class IrsService implements IrsRepository { +public class IrsRepositoryImpl implements IrsRepository { private final BpnRepository bpnRepository; private final TraceabilityProperties traceabilityProperties; - private final ObjectMapper objectMapper; private final AssetCallbackRepository assetAsBuiltCallbackRepository; private final AssetCallbackRepository assetAsPlannedCallbackRepository; @@ -67,18 +65,16 @@ public class IrsService implements IrsRepository { private final IrsClient irsClient; - public IrsService( + public IrsRepositoryImpl( IrsClient irsClient, BpnRepository bpnRepository, TraceabilityProperties traceabilityProperties, - ObjectMapper objectMapper, @Qualifier("assetAsBuiltRepositoryImpl") AssetCallbackRepository assetAsBuiltCallbackRepository, @Qualifier("assetAsPlannedRepositoryImpl") AssetCallbackRepository assetAsPlannedCallbackRepository, AssetMapperFactory assetMapperFactory) { this.bpnRepository = bpnRepository; this.traceabilityProperties = traceabilityProperties; - this.objectMapper = objectMapper; this.assetAsBuiltCallbackRepository = assetAsBuiltCallbackRepository; this.assetAsPlannedCallbackRepository = assetAsPlannedCallbackRepository; this.irsClient = irsClient; @@ -147,13 +143,13 @@ void saveOrUpdateAssets(AssetCallbackRepository repository, AssetBase asset) { @Override public void createIrsPolicyIfMissing() { log.info("Check if irs policy exists"); - final List irsPolicies = this.irsClient.getPolicies(); + final List irsPolicies = this.irsClient.getPolicies(); final List irsPoliciesIds = irsPolicies.stream().map(policyResponse -> policyResponse.payload().policyId()).toList(); log.info("Irs has following policies: {}", irsPoliciesIds); log.info("Required constraints from application yaml are : {}", traceabilityProperties.getRightOperand()); - PolicyResponse matchingPolicy = findMatchingPolicy(irsPolicies); + IrsPolicyResponse matchingPolicy = findMatchingPolicy(irsPolicies); if (matchingPolicy == null) { createMissingPolicies(); @@ -162,7 +158,7 @@ public void createIrsPolicyIfMissing() { } } - private PolicyResponse findMatchingPolicy(List irsPolicies) { + private IrsPolicyResponse findMatchingPolicy(List irsPolicies) { return irsPolicies.stream() .filter(irsPolicy -> emptyIfNull(irsPolicy.payload().policy().getPermissions()).stream() .flatMap(permission -> { @@ -186,7 +182,7 @@ private void createMissingPolicies() { this.irsClient.registerPolicy(); } - private void checkAndUpdatePolicy(PolicyResponse requiredPolicy) { + private void checkAndUpdatePolicy(IrsPolicyResponse requiredPolicy) { if (isPolicyExpired(requiredPolicy)) { log.info("IRS Policy {} has outdated validity updating new ttl", traceabilityProperties.getRightOperand()); this.irsClient.deletePolicy(); @@ -194,11 +190,12 @@ private void checkAndUpdatePolicy(PolicyResponse requiredPolicy) { } } - private boolean isPolicyExpired(PolicyResponse requiredPolicy) { + private boolean isPolicyExpired(IrsPolicyResponse requiredPolicy) { return traceabilityProperties.getValidUntil().isAfter(requiredPolicy.validUntil()); } - public List getPolicies() { + @Override + public List getPolicies() { return irsClient.getPolicies(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/JobRunning.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/JobRunning.java index 52ce5e182c..4a384ca56d 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/JobRunning.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/JobRunning.java @@ -29,6 +29,6 @@ public class JobRunning implements Predicate { @Override public boolean test(IRSResponse jobResponse) { - return IrsService.jobRunning(jobResponse.jobStatus()); + return IrsRepositoryImpl.jobRunning(jobResponse.jobStatus()); } } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/PolicyResponse.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/IrsPolicyResponse.java similarity index 56% rename from tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/PolicyResponse.java rename to tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/IrsPolicyResponse.java index ad77016b7e..baa28d2082 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/PolicyResponse.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/model/response/IrsPolicyResponse.java @@ -18,18 +18,28 @@ ********************************************************************************/ package org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response; +import assets.importpoc.ConstraintResponse; +import assets.importpoc.ConstraintsResponse; +import assets.importpoc.OperatorTypeResponse; +import assets.importpoc.PermissionResponse; +import assets.importpoc.PolicyResponse; +import assets.importpoc.PolicyTypeResponse; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; +import org.apache.commons.lang3.StringUtils; +import org.eclipse.tractusx.irs.edc.client.policy.Constraint; +import org.eclipse.tractusx.irs.edc.client.policy.Permission; import org.eclipse.tractusx.irs.edc.client.policy.Policy; import java.time.OffsetDateTime; +import java.util.List; /** * Policy representation for get all policies response */ @Builder -@Schema(example = PolicyResponse.EXAMPLE_PAYLOAD) -public record PolicyResponse(OffsetDateTime validUntil, Payload payload) { +@Schema(example = IrsPolicyResponse.EXAMPLE_PAYLOAD) +public record IrsPolicyResponse(OffsetDateTime validUntil, Payload payload) { @SuppressWarnings({"FileTabCharacter", "java:S2479"}) // required to show correctly example payload in open-api @@ -72,14 +82,38 @@ public record PolicyResponse(OffsetDateTime validUntil, Payload payload) { ] """; - public static PolicyResponse fromPolicy(final Policy policy) { - return PolicyResponse.builder() - .validUntil(policy.getValidUntil()) - .payload(Payload.builder() - .policyId(policy.getPolicyId()) - .context(Context.getDefault()) - .policy(policy) - .build()) + public static List toResponse(List allPolicies) { + + return allPolicies.stream().map(pol -> PolicyResponse.builder() + .policyId(pol.payload().policyId()) + .validUntil(pol.payload().policy().getValidUntil()) + .createdOn(pol.payload().policy().getCreatedOn()) + .permissions(map(pol.payload().policy())) + .build()).toList(); + } + + private static List map(Policy policy) { + + return policy.getPermissions().stream().map(permission -> + new PermissionResponse(PolicyTypeResponse.valueOf(permission.getAction().name()), map(permission))) + .toList(); + } + + private static ConstraintsResponse map(Permission permission) { + return ConstraintsResponse.builder() + .and(mapConstraints(permission.getConstraint().getAnd())) + .or(mapConstraints(permission.getConstraint().getOr())) .build(); + + } + + private static List mapConstraints(List constraints) { + return constraints.stream().map(constraint -> ConstraintResponse.builder() + .leftOperand(constraint.getLeftOperand()) + .operatorTypeResponse(OperatorTypeResponse.valueOf(StringUtils.upperCase(constraint.getOperator().getOperatorType().getCode()))) + .rightOperand(constraint.getRightOperand()) + .build()) + .toList(); } + } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ApplicationConfig.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ApplicationConfig.java index d8a64fe3fd..7419216d63 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ApplicationConfig.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/ApplicationConfig.java @@ -21,44 +21,26 @@ package org.eclipse.tractusx.traceability.common.config; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + import io.github.resilience4j.core.registry.EntryAddedEvent; import io.github.resilience4j.core.registry.EntryRemovedEvent; import io.github.resilience4j.core.registry.EntryReplacedEvent; import io.github.resilience4j.core.registry.RegistryEventConsumer; import io.github.resilience4j.retry.Retry; -import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.eclipse.tractusx.irs.edc.client.EdcConfiguration; import org.eclipse.tractusx.irs.edc.client.asset.EdcAssetService; import org.eclipse.tractusx.irs.edc.client.contract.service.EdcContractDefinitionService; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy; -import org.eclipse.tractusx.irs.edc.client.policy.Constraint; -import org.eclipse.tractusx.irs.edc.client.policy.Constraints; -import org.eclipse.tractusx.irs.edc.client.policy.Operator; -import org.eclipse.tractusx.irs.edc.client.policy.OperatorType; -import org.eclipse.tractusx.irs.edc.client.policy.Permission; -import org.eclipse.tractusx.irs.edc.client.policy.Policy; -import org.eclipse.tractusx.irs.edc.client.policy.PolicyType; import org.eclipse.tractusx.irs.edc.client.policy.service.EdcPolicyDefinitionService; import org.eclipse.tractusx.irs.edc.client.transformer.EdcTransformer; -import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.IrsService; -import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; -import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties; -import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Lazy; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -71,10 +53,6 @@ import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; import org.thymeleaf.templateresolver.ITemplateResolver; -import java.time.OffsetDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; @Configuration @ConfigurationPropertiesScan(basePackages = "org.eclipse.tractusx.traceability.*") @@ -86,15 +64,6 @@ @EnableJpaRepositories(basePackages = "org.eclipse.tractusx.traceability.*") public class ApplicationConfig { - @Autowired - TraceabilityProperties traceabilityProperties; - - @Autowired - @Lazy - IrsService irsService; - - - private final AcceptedPoliciesProvider.DefaultAcceptedPoliciesProvider defaultAcceptedPoliciesProvider; @Bean public InternalResourceViewResolver defaultViewResolver() { @@ -140,57 +109,7 @@ public ITemplateResolver textTemplateResolver() { return templateResolver; } - @PostConstruct - public void registerDecentralRegistryPermissions() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - mapper.registerModule(new JavaTimeModule()); - List acceptedPolicy = buildAcceptedPolicies(); - defaultAcceptedPoliciesProvider.addAcceptedPolicies(acceptedPolicy); - log.info("Successfully added permission to irs client lib provider: {}", mapper.writeValueAsString(acceptedPolicy)); - } - - @NotNull - private List buildAcceptedPolicies() { - List acceptedPolicies = new ArrayList<>(createOwnAcceptedPolicies(traceabilityProperties.getValidUntil())); - - //add IRS policies - try { - acceptedPolicies.addAll(createIrsAcceptedPolicies()); - } catch (Exception exception) { - log.error("Failed to create Irs Policies : ", exception); - } - return acceptedPolicies; - } - - private List createIrsAcceptedPolicies() { - List policyResponse = irsService.getPolicies(); - List irsPolicies = policyResponse.stream().map(response -> { - Policy policy = new Policy(response.payload().policyId(), response.payload().policy().getCreatedOn(), response.validUntil(), response.payload().policy().getPermissions()); - return new AcceptedPolicy(policy, response.validUntil()); - }).toList(); - - return new ArrayList<>(irsPolicies); - } - - private List createOwnAcceptedPolicies(OffsetDateTime offsetDateTime) { - List andConstraintList = new ArrayList<>(); - List orConstraintList = new ArrayList<>(); - andConstraintList.add(new Constraint(traceabilityProperties.getLeftOperand(), new Operator(OperatorType.fromValue(traceabilityProperties.getOperatorType())), traceabilityProperties.getRightOperand())); - andConstraintList.add(new Constraint(traceabilityProperties.getLeftOperand(), new Operator(OperatorType.fromValue(traceabilityProperties.getOperatorType())), traceabilityProperties.getRightOperand())); - - List permissions = List.of( - new Permission( - PolicyType.USE, - new Constraints( - andConstraintList, - orConstraintList) - - )); - - Policy ownPolicy = new Policy(UUID.randomUUID().toString(), OffsetDateTime.now(), offsetDateTime, permissions); - return List.of(new AcceptedPolicy(ownPolicy, offsetDateTime)); - } @Bean public RegistryEventConsumer myRetryRegistryEventConsumer() { diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/PolicyStartUpConfig.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/PolicyStartUpConfig.java new file mode 100644 index 0000000000..0e56515b02 --- /dev/null +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/config/PolicyStartUpConfig.java @@ -0,0 +1,128 @@ +/******************************************************************************** + * Copyright (c) 2023, 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +package org.eclipse.tractusx.traceability.common.config; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider; +import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy; +import org.eclipse.tractusx.irs.edc.client.policy.Constraint; +import org.eclipse.tractusx.irs.edc.client.policy.Constraints; +import org.eclipse.tractusx.irs.edc.client.policy.Operator; +import org.eclipse.tractusx.irs.edc.client.policy.OperatorType; +import org.eclipse.tractusx.irs.edc.client.policy.Permission; +import org.eclipse.tractusx.irs.edc.client.policy.Policy; +import org.eclipse.tractusx.irs.edc.client.policy.PolicyType; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.IrsRepositoryImpl; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; +import org.eclipse.tractusx.traceability.common.properties.TraceabilityProperties; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Profile; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import static org.eclipse.tractusx.traceability.common.config.ApplicationProfiles.NOT_INTEGRATION_TESTS; + +@Configuration +@ConfigurationPropertiesScan(basePackages = "org.eclipse.tractusx.traceability.*") +@EnableWebMvc +@EnableAsync(proxyTargetClass = true) +@EnableConfigurationProperties +@RequiredArgsConstructor +@Slf4j +@EnableJpaRepositories(basePackages = "org.eclipse.tractusx.traceability.*") +@Profile(NOT_INTEGRATION_TESTS) +public class PolicyStartUpConfig { + + private final AcceptedPoliciesProvider.DefaultAcceptedPoliciesProvider defaultAcceptedPoliciesProvider; + @Autowired + TraceabilityProperties traceabilityProperties; + @Autowired + @Lazy + IrsRepositoryImpl irsRepositoryImpl; + + @PostConstruct + @ConditionalOnProperty(name = "applicationConfig.registerDecentralRegistryPermissions.enabled", havingValue = "true") + public void registerDecentralRegistryPermissions() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new JavaTimeModule()); + List acceptedPolicy = buildAcceptedPolicies(); + defaultAcceptedPoliciesProvider.addAcceptedPolicies(acceptedPolicy); + log.info("Successfully added permission to irs client lib provider: {}", mapper.writeValueAsString(acceptedPolicy)); + } + + @NotNull + private List buildAcceptedPolicies() { + List acceptedPolicies = new ArrayList<>(createOwnAcceptedPolicies(traceabilityProperties.getValidUntil())); + + //add IRS policies + try { + acceptedPolicies.addAll(createIrsAcceptedPolicies()); + } catch (Exception exception) { + log.error("Failed to create Irs Policies : ", exception); + } + return acceptedPolicies; + } + + private List createIrsAcceptedPolicies() { + + List irsPolicyResponse = irsRepositoryImpl.getPolicies(); + List irsPolicies = irsPolicyResponse.stream().map(response -> { + Policy policy = new Policy(response.payload().policyId(), response.payload().policy().getCreatedOn(), response.validUntil(), response.payload().policy().getPermissions()); + return new AcceptedPolicy(policy, response.validUntil()); + }).toList(); + + return new ArrayList<>(irsPolicies); + } + + private List createOwnAcceptedPolicies(OffsetDateTime offsetDateTime) { + List andConstraintList = new ArrayList<>(); + List orConstraintList = new ArrayList<>(); + andConstraintList.add(new Constraint(traceabilityProperties.getLeftOperand(), new Operator(OperatorType.fromValue(traceabilityProperties.getOperatorType())), traceabilityProperties.getRightOperand())); + andConstraintList.add(new Constraint(traceabilityProperties.getLeftOperand(), new Operator(OperatorType.fromValue(traceabilityProperties.getOperatorType())), traceabilityProperties.getRightOperand())); + + List permissions = List.of( + new Permission( + PolicyType.USE, + new Constraints( + andConstraintList, + orConstraintList) + + )); + + Policy ownPolicy = new Policy(UUID.randomUUID().toString(), OffsetDateTime.now(), offsetDateTime, permissions); + return List.of(new AcceptedPolicy(ownPolicy, offsetDateTime)); + } +} diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/mapper/ContractResponseMapper.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/mapper/ContractResponseMapper.java index 6a8d02b4e3..aceb49adf8 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/mapper/ContractResponseMapper.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/mapper/ContractResponseMapper.java @@ -41,6 +41,7 @@ public static ContractResponse from(Contract contract) { .counterpartyAddress(contract.getCounterpartyAddress()) .endDate(contract.getEndDate()) .creationDate(contract.getCreationDate()) + .policy(contract.getPolicy()) .build(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java index c177b6215b..924e4d1ab8 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/application/rest/ContractController.java @@ -18,7 +18,6 @@ ********************************************************************************/ package org.eclipse.tractusx.traceability.contracts.application.rest; -import assets.importpoc.ErrorResponse; import contract.response.ContractResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -50,53 +49,45 @@ public class ContractController { @Operation(operationId = "contracts", summary = "All contract agreements for all assets", - tags = {"getContracts"}, - description = "This endpoint returns all contract agreements for alls assets in Trace-X", + tags = {"Contracts"}, + description = "This endpoint returns all contract agreements for all assets in Trace-X", security = @SecurityRequirement(name = "oAuth2", scopes = "profile email")) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Ok."), @ApiResponse( responseCode = "400", description = "Bad request.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Bad request.\"}"))), @ApiResponse( responseCode = "401", description = "Authorization failed.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Authorization failed.\"}"))), @ApiResponse( responseCode = "403", description = "Forbidden.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Forbidden.\"}"))), @ApiResponse( responseCode = "404", description = "Not found.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Not found.\"}"))), @ApiResponse( - responseCode = "415", - description = "Unsupported media type", + responseCode = "415", description = "Unsupported media type.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Unsupported media type.\"}"))), @ApiResponse( responseCode = "429", description = "Too many requests.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class))), + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Too many requests.\"}"))), @ApiResponse( responseCode = "500", description = "Internal server error.", content = @Content( - mediaType = "application/json", - schema = @Schema(implementation = ErrorResponse.class)))}) + mediaType = "application/json", schema = @Schema(example = "{\"message\": \"Internal server error.\"}")))}) @PostMapping public PageResult getContracts(@Valid @RequestBody PageableFilterRequest pageableFilterRequest) { PageResult contracts = contractService.getContracts(pageableFilterRequest); diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java index 890e9f6ffe..ca29811a5c 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/domain/model/Contract.java @@ -23,7 +23,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; -import java.time.Instant; +import java.time.OffsetDateTime; @Slf4j @AllArgsConstructor @@ -32,7 +32,9 @@ public class Contract { private String contractId; private String counterpartyAddress; - private Instant creationDate; - private Instant endDate; + private OffsetDateTime creationDate; + private OffsetDateTime endDate; private String state; + private String policy; + } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java index 084d5a7243..22b9ba0102 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/contracts/infrastructure/repository/ContractRepositoryImpl.java @@ -18,6 +18,8 @@ ********************************************************************************/ package org.eclipse.tractusx.traceability.contracts.infrastructure.repository; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.ImmutablePair; @@ -38,6 +40,8 @@ import org.springframework.stereotype.Component; import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -54,6 +58,7 @@ public class ContractRepositoryImpl implements ContractRepository { private final EdcContractAgreementService edcContractAgreementService; private final JpaContractAgreementInfoViewRepository contractAgreementInfoViewRepository; + private final ObjectMapper objectMapper; @Override public PageResult getContractsByPageable(Pageable pageable, SearchCriteria searchCriteria) { @@ -95,12 +100,19 @@ private List fetchEdcContractAgreements(Page co return contractAgreements.stream().map(contractAgreement -> - Contract.builder() - .contractId(contractAgreement.contractAgreementId()) - .counterpartyAddress(contractNegotiations.get(contractAgreement.contractAgreementId()).counterPartyAddress()) - .creationDate(Instant.ofEpochMilli(contractAgreement.contractSigningDate())) - .state(contractNegotiations.get(contractAgreement.contractAgreementId()).state()) - .build() + { + try { + return Contract.builder() + .contractId(contractAgreement.contractAgreementId()) + .counterpartyAddress(contractNegotiations.get(contractAgreement.contractAgreementId()).counterPartyAddress()) + .creationDate(OffsetDateTime.ofInstant(Instant.ofEpochSecond(contractAgreement.contractSigningDate()), ZoneId.systemDefault())) + .state(contractNegotiations.get(contractAgreement.contractAgreementId()).state()) + .policy(objectMapper.writeValueAsString(contractAgreement.policy())) + .build(); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } ).toList(); } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/qualitynotification/domain/base/service/AbstractQualityNotificationService.java b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/qualitynotification/domain/base/service/AbstractQualityNotificationService.java index 00098834af..e3116ff80c 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/qualitynotification/domain/base/service/AbstractQualityNotificationService.java +++ b/tx-backend/src/main/java/org/eclipse/tractusx/traceability/qualitynotification/domain/base/service/AbstractQualityNotificationService.java @@ -19,7 +19,6 @@ package org.eclipse.tractusx.traceability.qualitynotification.domain.base.service; import lombok.extern.slf4j.Slf4j; -import org.eclipse.tractusx.traceability.assets.domain.asbuilt.service.AssetAsBuiltServiceImpl; import org.eclipse.tractusx.traceability.common.model.PageResult; import org.eclipse.tractusx.traceability.common.model.SearchCriteria; import org.eclipse.tractusx.traceability.qualitynotification.application.base.service.QualityNotificationService; diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImplTest.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImplTest.java index 9d41d4c838..7008997821 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImplTest.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/domain/importpoc/service/PolicyServiceImplTest.java @@ -19,9 +19,17 @@ package org.eclipse.tractusx.traceability.assets.domain.importpoc.service; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPoliciesProvider; -import org.eclipse.tractusx.irs.edc.client.policy.AcceptedPolicy; +import assets.importpoc.PolicyResponse; +import org.eclipse.tractusx.irs.edc.client.policy.Constraint; +import org.eclipse.tractusx.irs.edc.client.policy.Constraints; +import org.eclipse.tractusx.irs.edc.client.policy.Operator; +import org.eclipse.tractusx.irs.edc.client.policy.OperatorType; +import org.eclipse.tractusx.irs.edc.client.policy.Permission; import org.eclipse.tractusx.irs.edc.client.policy.Policy; +import org.eclipse.tractusx.irs.edc.client.policy.PolicyType; +import org.eclipse.tractusx.traceability.assets.domain.base.IrsRepository; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Payload; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -35,20 +43,20 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class PolicyServiceImplTest { @InjectMocks private PolicyServiceImpl policyService; @Mock - private AcceptedPoliciesProvider acceptedPoliciesProvider; + private IrsRepository irsRepository; @BeforeEach public void testSetup() { - policyService = new PolicyServiceImpl(acceptedPoliciesProvider); + policyService = new PolicyServiceImpl(irsRepository); } - @Test void testGetPolicyByID() { @@ -56,17 +64,35 @@ void testGetPolicyByID() { // GIVEN String policyId = "policy123"; OffsetDateTime createdOn = OffsetDateTime.parse("2023-07-03T16:01:05.309Z"); - List acceptedPolicies = List.of( - new AcceptedPolicy(new Policy("policy123", createdOn,null, null),null)); + List acceptedPolicies = List.of( + IrsPolicyResponse.builder() + .validUntil(OffsetDateTime.now()) + .payload( + Payload.builder() + .policyId(policyId) + .policy( + Policy.builder() + .createdOn(createdOn) + .permissions(List.of( + Permission.builder() + .action(PolicyType.USE) + .constraint(Constraints.builder() + .and(List.of(new Constraint("", new Operator(OperatorType.EQ), ""))) + .or(List.of(new Constraint("", new Operator(OperatorType.EQ), ""))) + .build()) + .build())) + .build()) + .build()) + .build()); // WHEN - when(acceptedPoliciesProvider.getAcceptedPolicies()).thenReturn(acceptedPolicies); - List result = policyService.getAllPolicies(); + when(irsRepository.getPolicies()).thenReturn(acceptedPolicies); + List allPolicies = policyService.getAllPolicies(); // THEN - assertNotNull(result); - assertEquals(policyId, result.get(0).getPolicyId()); - assertEquals(createdOn, result.get(0).getCreatedOn()); + assertNotNull(allPolicies); + assertEquals(policyId, allPolicies.get(0).policyId()); + assertEquals(createdOn, allPolicies.get(0).createdOn()); } } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsServiceTest.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsRepositoryImplTest.java similarity index 87% rename from tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsServiceTest.java rename to tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsRepositoryImplTest.java index 26f160b751..701979a7bf 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsServiceTest.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/assets/infrastructure/base/irs/IrsRepositoryImplTest.java @@ -19,7 +19,6 @@ package org.eclipse.tractusx.traceability.assets.infrastructure.base.irs; -import com.fasterxml.jackson.databind.ObjectMapper; import org.eclipse.tractusx.irs.edc.client.policy.Constraint; import org.eclipse.tractusx.irs.edc.client.policy.Constraints; import org.eclipse.tractusx.irs.edc.client.policy.Operator; @@ -30,8 +29,8 @@ import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.request.BomLifecycle; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.request.RegisterJobRequest; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Direction; +import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.IrsPolicyResponse; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.Payload; -import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.PolicyResponse; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.factory.AssetMapperFactory; import org.eclipse.tractusx.traceability.assets.infrastructure.base.irs.model.response.relationship.Aspect; import org.eclipse.tractusx.traceability.bpn.domain.service.BpnRepository; @@ -59,14 +58,12 @@ import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) -class IrsServiceTest { - private IrsService irsService; +class IrsRepositoryImplTest { + private IrsRepositoryImpl irsRepositoryImpl; @Mock TraceabilityProperties traceabilityProperties; - final ObjectMapper objectMapper = new ObjectMapper(); - @Mock AssetCallbackRepository assetAsBuiltCallbackRepository; @@ -85,7 +82,7 @@ class IrsServiceTest { @BeforeEach void setUp() { - irsService = new IrsService(irsClient, bpnRepository, traceabilityProperties, objectMapper, assetAsBuiltCallbackRepository, assetAsPlannedCallbackRepository, assetMapperFactory); + irsRepositoryImpl = new IrsRepositoryImpl(irsClient, bpnRepository, traceabilityProperties, assetAsBuiltCallbackRepository, assetAsPlannedCallbackRepository, assetMapperFactory); } @@ -96,7 +93,7 @@ void givenNoPolicyExist_whenCreateIrsPolicyIfMissing_thenCreateIt() { when(traceabilityProperties.getRightOperand()).thenReturn("test"); // when - irsService.createIrsPolicyIfMissing(); + irsRepositoryImpl.createIrsPolicyIfMissing(); // then verify(irsClient, times(1)) @@ -110,13 +107,13 @@ void givenPolicyExist_whenCreateIrsPolicyIfMissing_thenDoNotCreateIt() { OffsetDateTime createdOn = OffsetDateTime.now(); Policy policy = new Policy("1", createdOn, validUntil, List.of(new Permission(PolicyType.USE, new Constraints(List.of(), List.of(new Constraint("leftOperand1", new Operator(OperatorType.EQ), "test")))))); Payload payload = new Payload(null, "1", policy); - final PolicyResponse existingPolicy = new PolicyResponse(validUntil, payload); + final IrsPolicyResponse existingPolicy = new IrsPolicyResponse(validUntil, payload); when(irsClient.getPolicies()).thenReturn(List.of(existingPolicy)); when(traceabilityProperties.getRightOperand()).thenReturn("test"); when(traceabilityProperties.getValidUntil()).thenReturn(OffsetDateTime.parse("2023-07-02T16:01:05.309Z")); // when - irsService.createIrsPolicyIfMissing(); + irsRepositoryImpl.createIrsPolicyIfMissing(); // then verifyNoMoreInteractions(irsClient); @@ -131,13 +128,13 @@ void givenOutdatedPolicyExist_whenCreateIrsPolicyIfMissing_thenUpdateIt() { Policy policy = new Policy("test", createdOn, validUntil, List.of(new Permission(PolicyType.USE, new Constraints(List.of(), List.of(new Constraint("leftOperand1", new Operator(OperatorType.EQ), "test")))))); Payload payload = new Payload(null, "test", policy); - final PolicyResponse existingPolicy = new PolicyResponse(validUntil, payload); + final IrsPolicyResponse existingPolicy = new IrsPolicyResponse(validUntil, payload); when(irsClient.getPolicies()).thenReturn(List.of(existingPolicy)); when(traceabilityProperties.getRightOperand()).thenReturn("test"); when(traceabilityProperties.getValidUntil()).thenReturn(OffsetDateTime.parse("2023-07-04T16:01:05.309Z")); // when - irsService.createIrsPolicyIfMissing(); + irsRepositoryImpl.createIrsPolicyIfMissing(); // then verify(irsClient, times(1)).deletePolicy(); @@ -151,7 +148,7 @@ void testFindAssets_completedJob_returnsConvertedAssets(Direction direction) { when(traceabilityProperties.getBpn()).thenReturn(BPN.of("test")); // When - irsService.createJobToResolveAssets("1", direction, Aspect.downwardAspectsForAssetsAsBuilt(), BomLifecycle.AS_BUILT); + irsRepositoryImpl.createJobToResolveAssets("1", direction, Aspect.downwardAspectsForAssetsAsBuilt(), BomLifecycle.AS_BUILT); // Then verify(irsClient, times(1)).registerJob(any(RegisterJobRequest.class)); @@ -178,15 +175,15 @@ void test_getPolicyConstraints() { Policy policy = new Policy("test", createdOn, validUntil, List.of(new Permission(PolicyType.USE, constraints))); Payload payload = new Payload(null, "test", policy); - final PolicyResponse existingPolicy = new PolicyResponse(validUntil, payload); + final IrsPolicyResponse existingPolicy = new IrsPolicyResponse(validUntil, payload); when(irsClient.getPolicies()).thenReturn(List.of(existingPolicy)); //WHEN - List policyResponse = irsClient.getPolicies(); + List irsPolicyResponse = irsClient.getPolicies(); //THEN - assertThat(policyResponse).hasSize(1); + assertThat(irsPolicyResponse).hasSize(1); } } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/IntegrationTestSpecification.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/IntegrationTestSpecification.java index bfdccd54db..bac6eb493b 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/IntegrationTestSpecification.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/IntegrationTestSpecification.java @@ -41,7 +41,6 @@ import java.util.concurrent.TimeUnit; import static org.awaitility.Awaitility.await; - @ActiveProfiles("integration-spring-boot") @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) @AutoConfigureMockMvc diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/IrsApiSupport.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/IrsApiSupport.java index b90cc35ca3..d07db595c5 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/IrsApiSupport.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/common/support/IrsApiSupport.java @@ -94,4 +94,15 @@ public void irsJobDetailsApiFailed() { restitoProvider.jsonResponseFromFile("./stubs/irs/get/jobs/id/response_200.json") ); } + + public void irsApiReturnsPolicies() { + whenHttp(restitoProvider.stubServer()).match( + get("/irs/policies") + ) + .then( + status(HttpStatus.OK_200), + header("Content-Type", "application/json"), + restitoProvider.jsonResponseFromFile("./stubs/irs/policies/response_200_get_policies.json") + ); + } } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java index d30e7e7381..c43af62c09 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/contracts/ContractControllerIT.java @@ -65,10 +65,11 @@ void shouldReturnContracts() throws JoseException { .then() .log().all() .statusCode(200) - .extract().body().as(new TypeRef>() { + .extract().body().as(new TypeRef<>() { }); //THEN assertThat(contractResponsePageResult.content()).isNotEmpty(); + assertThat(contractResponsePageResult.content().get(0).getPolicy()).isNotEmpty(); } @Test @@ -89,7 +90,7 @@ void shouldReturnNextPageOfPaginatedContracts() throws JoseException { .then() .log().all() .statusCode(200) - .extract().body().as(new TypeRef>() { + .extract().body().as(new TypeRef<>() { }); @@ -103,7 +104,7 @@ void shouldReturnNextPageOfPaginatedContracts() throws JoseException { .then() .log().all() .statusCode(200) - .extract().body().as(new TypeRef>() { + .extract().body().as(new TypeRef<>() { }); //THEN List firstContractagreementIds = List.of("abc1", "abc2", "abc3", "abc4", "abc5"); @@ -134,7 +135,7 @@ void shouldReturnOnlyOneContract() throws JoseException { .then() .log().all() .statusCode(200) - .extract().body().as(new TypeRef>() { + .extract().body().as(new TypeRef<>() { }); //THEN assertThat(contractResponsePageResult.content()).isNotEmpty(); diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/policy/PolicyControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/policy/PolicyControllerIT.java index 34c4cab848..fd2c0c3a19 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/policy/PolicyControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/policy/PolicyControllerIT.java @@ -20,17 +20,23 @@ import io.restassured.http.ContentType; import org.eclipse.tractusx.traceability.integration.IntegrationTestSpecification; +import org.eclipse.tractusx.traceability.integration.common.support.IrsApiSupport; import org.jose4j.lang.JoseException; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import static io.restassured.RestAssured.given; import static org.eclipse.tractusx.traceability.common.security.JwtRole.ADMIN; class PolicyControllerIT extends IntegrationTestSpecification { - + @Autowired + IrsApiSupport irsApiSupport; @Test void shouldReturnPolicy() throws JoseException { + //GIVEN + irsApiSupport.irsApiReturnsPolicies(); + // when/then given() .header(oAuth2Support.jwtAuthorization(ADMIN)) diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/alert/ReceiverAlertsControllerIT.java b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/alert/ReceiverAlertsControllerIT.java index ce3dc73923..e9f7a407d1 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/alert/ReceiverAlertsControllerIT.java +++ b/tx-backend/src/test/java/org/eclipse/tractusx/traceability/integration/qualitynotification/alert/ReceiverAlertsControllerIT.java @@ -20,7 +20,6 @@ package org.eclipse.tractusx.traceability.integration.qualitynotification.alert; import io.restassured.http.ContentType; -import org.eclipse.tractusx.traceability.assets.infrastructure.asbuilt.model.AssetAsBuiltEntity; import org.eclipse.tractusx.traceability.common.request.OwnPageable; import org.eclipse.tractusx.traceability.common.request.PageableFilterRequest; import org.eclipse.tractusx.traceability.common.request.SearchCriteriaRequestParam; diff --git a/tx-backend/src/test/resources/stubs/irs/policies/response_200_get_policies.json b/tx-backend/src/test/resources/stubs/irs/policies/response_200_get_policies.json new file mode 100644 index 0000000000..1d00283d88 --- /dev/null +++ b/tx-backend/src/test/resources/stubs/irs/policies/response_200_get_policies.json @@ -0,0 +1,97 @@ +[ + { + "validUntil" : "2029-03-11T11:04:52.771949893Z", + "payload" : { + "@context" : { + "odrl" : "http://www.w3.org/ns/odrl/2/" + }, + "@id" : "default-policy", + "policy" : { + "policyId" : "default-policy", + "createdOn" : "2024-03-11T11:04:52.771906693Z", + "validUntil" : "2029-03-11T11:04:52.771949893Z", + "permissions" : [ + { + "action" : "USE", + "constraint" : { + "and" : [ + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "ID 3.0 Trace" + }, + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "ID 3.1 Trace" + }, + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "R2_Traceability" + }, + { + "leftOperand" : "FrameworkAgreement.traceability", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "active" + }, + { + "leftOperand" : "Membership", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "active" + } + ], + "or" : [ + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "ID 3.0 Trace" + }, + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "ID 3.1 Trace" + }, + { + "leftOperand" : "PURPOSE", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "R2_Traceability" + }, + { + "leftOperand" : "FrameworkAgreement.traceability", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "active" + }, + { + "leftOperand" : "Membership", + "operator" : { + "@id" : "eq" + }, + "odrl:rightOperand" : "active" + } + ] + } + } + ] + } + } + } +] diff --git a/tx-models/pom.xml b/tx-models/pom.xml index db74e7db81..e8a3ab1199 100644 --- a/tx-models/pom.xml +++ b/tx-models/pom.xml @@ -87,6 +87,11 @@ SPDX-License-Identifier: Apache-2.0 logback-core 1.4.14 + + org.mockito + mockito-core + test + diff --git a/tx-models/src/main/java/assets/importpoc/ConstraintResponse.java b/tx-models/src/main/java/assets/importpoc/ConstraintResponse.java index 31b1c2e1f4..d4979f4905 100644 --- a/tx-models/src/main/java/assets/importpoc/ConstraintResponse.java +++ b/tx-models/src/main/java/assets/importpoc/ConstraintResponse.java @@ -19,9 +19,9 @@ package assets.importpoc; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; -import java.util.List; - +@Builder public record ConstraintResponse( @Schema(example = "PURPOSE") String leftOperand, @@ -29,5 +29,5 @@ public record ConstraintResponse( @Schema OperatorTypeResponse operatorTypeResponse, @Schema(example = "ID Trace 3.1") - List rightOperands) { + String rightOperand) { } diff --git a/tx-models/src/main/java/assets/importpoc/ConstraintsResponse.java b/tx-models/src/main/java/assets/importpoc/ConstraintsResponse.java index 2ef99ab63b..8e9947f939 100644 --- a/tx-models/src/main/java/assets/importpoc/ConstraintsResponse.java +++ b/tx-models/src/main/java/assets/importpoc/ConstraintsResponse.java @@ -18,8 +18,11 @@ ********************************************************************************/ package assets.importpoc; +import lombok.Builder; + import java.util.List; +@Builder public record ConstraintsResponse( List and, List or diff --git a/tx-models/src/main/java/assets/importpoc/PermissionResponse.java b/tx-models/src/main/java/assets/importpoc/PermissionResponse.java index 4a1d71c9aa..855fe4e6ff 100644 --- a/tx-models/src/main/java/assets/importpoc/PermissionResponse.java +++ b/tx-models/src/main/java/assets/importpoc/PermissionResponse.java @@ -20,11 +20,9 @@ import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; - public record PermissionResponse( @Schema(example = "USE") PolicyTypeResponse action, - List constraints + ConstraintsResponse constraints ) { } diff --git a/tx-models/src/main/java/assets/importpoc/PolicyResponse.java b/tx-models/src/main/java/assets/importpoc/PolicyResponse.java index 620340ba80..c41c615d76 100644 --- a/tx-models/src/main/java/assets/importpoc/PolicyResponse.java +++ b/tx-models/src/main/java/assets/importpoc/PolicyResponse.java @@ -19,15 +19,22 @@ package assets.importpoc; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import common.CustomOffsetDateTimeSerializer; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; import java.time.OffsetDateTime; import java.util.List; +@Builder public record PolicyResponse( @Schema(example = "5a00bb50-0253-405f-b9f1-1a3150b9d51d") String policyId, + + @JsonSerialize(using = CustomOffsetDateTimeSerializer.class) OffsetDateTime createdOn, + @JsonSerialize(using = CustomOffsetDateTimeSerializer.class) OffsetDateTime validUntil, List permissions) { } diff --git a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializer.java b/tx-models/src/main/java/common/CustomOffsetDateTimeSerializer.java similarity index 93% rename from tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializer.java rename to tx-models/src/main/java/common/CustomOffsetDateTimeSerializer.java index 301db223de..750c810d8c 100644 --- a/tx-backend/src/main/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializer.java +++ b/tx-models/src/main/java/common/CustomOffsetDateTimeSerializer.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2023 Contributors to the Eclipse Foundation + * Copyright (c) 2024 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. @@ -16,7 +16,7 @@ * * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -package org.eclipse.tractusx.traceability.common.date; +package common; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/tx-models/src/main/java/contract/response/ContractResponse.java b/tx-models/src/main/java/contract/response/ContractResponse.java index 4ecb53a664..39e125a6f1 100644 --- a/tx-models/src/main/java/contract/response/ContractResponse.java +++ b/tx-models/src/main/java/contract/response/ContractResponse.java @@ -18,13 +18,15 @@ ********************************************************************************/ package contract.response; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import common.CustomOffsetDateTimeSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import java.time.Instant; +import java.time.OffsetDateTime; @Data @NoArgsConstructor @@ -36,10 +38,14 @@ public class ContractResponse { @Schema(example = "https://trace-x-edc-e2e-a.dev.demo.catena-x.net/api/v1/dsp", maxLength = 255) private String counterpartyAddress; @Schema(example = "2023-02-21T21:27:10.734950Z", maxLength = 255) - private Instant creationDate; + @JsonSerialize(using = CustomOffsetDateTimeSerializer.class) + private OffsetDateTime creationDate; @Schema(example = "2023-02-21T21:27:10.734950Z", maxLength = 255) - private Instant endDate; + @JsonSerialize(using = CustomOffsetDateTimeSerializer.class) + private OffsetDateTime endDate; @Schema(example = "FINALIZED", maxLength = 255) private String state; + @Schema(example = "{\\\"@id\\\":\\\"eb0c8486-914a-4d36-84c0-b4971cbc52e4\\\",\\\"@type\\\":\\\"odrl:Set\\\",\\\"odrl:permission\\\":{\\\"odrl:target\\\":\\\"registry-asset\\\",\\\"odrl:action\\\":{\\\"odrl:type\\\":\\\"USE\\\"},\\\"odrl:constraint\\\":{\\\"odrl:or\\\":{\\\"odrl:leftOperand\\\":\\\"PURPOSE\\\",\\\"odrl:operator\\\":{\\\"@id\\\":\\\"odrl:eq\\\"},\\\"odrl:rightOperand\\\":\\\"ID 3.0 Trace\\\"}}},\\\"odrl:prohibition\\\":[],\\\"odrl:obligation\\\":[],\\\"odrl:target\\\":\\\"registry-asset\\\"}", maxLength = 255) + private String policy; } diff --git a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java b/tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java similarity index 82% rename from tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java rename to tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java index ba17cb0146..87b05a7c7e 100644 --- a/tx-backend/src/test/java/org/eclipse/tractusx/traceability/common/date/CustomOffsetDateTimeSerializerTest.java +++ b/tx-models/src/test/common/CustomOffsetDateTimeSerializerTest.java @@ -1,4 +1,4 @@ -/******************************************************************************** +package common; /******************************************************************************** * Copyright (c) 2023 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional @@ -16,7 +16,6 @@ * * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -package org.eclipse.tractusx.traceability.common.date; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; @@ -27,9 +26,12 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +class CustomOffsetDateTimeSerializerTest { -public class CustomOffsetDateTimeSerializerTest { private CustomOffsetDateTimeSerializer serializer; private JsonGenerator jsonGenerator; @@ -43,13 +45,16 @@ public void setup() { } @Test - public void testSerialize() throws IOException { + public void test_serialize() throws IOException { + //GIVEN OffsetDateTime offsetDateTime = OffsetDateTime.of(2023, 10, 13, 14, 30, 45, 0, ZoneOffset.UTC); String expectedFormattedDateTime = "2023-10-13T14:30:45Z"; + //WHEN serializer.serialize(offsetDateTime, jsonGenerator, serializerProvider); - // Verify that the custom serializer correctly formats the OffsetDateTime and writes it to the JsonGenerator + //THEN verify(jsonGenerator, times(1)).writeString(expectedFormattedDateTime); } + }