diff --git a/.docker/.env b/.docker/.env index 7c9b6e1b99cba36d3523561ec5c9fe567935d80c..821b16a5c08b6577f7aa1728baded9960c24b311 100644 --- a/.docker/.env +++ b/.docker/.env @@ -1,11 +1,13 @@ APP_VERSION=1.8 +FLUENTBIT_VERSION=4.0.0 +GRAFANA_VERSION=11.4.0 MARIADB_VERSION=11.3.2 -POSTGRES_VERSION=17.0.0 -KEYCLOAK_VERSION=26.2.2 -RABBITMQ_VERSION=3.13.7 -OPENSEARCH_VERSION=2.10.0 -NGINX_VERSION=1.27.3-alpine3.20-slim +KEYCLOAK_VERSION=26.2.4 +MYSQLD_EXPORTER_VERSION=0.15.1 +NGINX_VERSION=1.28.0 OPENLDAP_VERSION=2.6.8 -SEAWEEDFS_VERSION=3.71.0 +OPENSEARCH_VERSION=2.18.0 +POSTGRES_VERSION=17.0.0 PROMETHEUS_VERSION=2.54.1 -MYSQLD_EXPORTER_VERSION=0.15.1 +RABBITMQ_VERSION=3.13.1 +SEAWEEDFS_VERSION=3.87.0 diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index e801c4dc9c7c60d5c95d2a1b9da4bbab9aef390c..4e2a940f8ecf5f8e08f844dfdae3b822fcbccc82 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -1,57 +1,3 @@ -x-resources-nano: &resources-nano - resources: - reservations: - cpus: '0.1' - memory: 128M - limits: - cpus: '0.15' - memory: 192M - -x-resources-micro: &resources-micro - resources: - reservations: - cpus: '0.25' - memory: 256M - limits: - cpus: '0.375' - memory: 384M - -x-resources-small: &resources-small - resources: - reservations: - cpus: '0.5' - memory: 512M - limits: - cpus: '0.75' - memory: 768M - -x-resources-medium: &resources-medium - resources: - reservations: - cpus: '0.5' - memory: 1024M - limits: - cpus: '0.75' - memory: 1536M - -x-resources-large: &resources-large - resources: - reservations: - cpus: '1' - memory: 2048M - limits: - cpus: '1.5' - memory: 3072M - -x-resources-xlarge: &resources-xlarge - resources: - reservations: - cpus: '1.5' - memory: 3072M - limits: - cpus: '2' - memory: 6144M - x-healthcheck-params: &healthcheck-params interval: 30s timeout: 10s @@ -90,8 +36,6 @@ services: healthcheck: test: /opt/bitnami/scripts/mariadb-galera/healthcheck.sh --connect --innodb_initialized <<: *healthcheck-params - deploy: - <<: *resources-xlarge logging: driver: json-file @@ -104,12 +48,10 @@ services: - --mysqld.address=metadata-db:3306 - --config.my-cnf=/.my.cnf volumes: - - ./dbrepo-metadata-db/metrics.cnf:/.my.cnf + - ./config/metrics.cnf:/.my.cnf healthcheck: test: -h <<: *healthcheck-params - deploy: - <<: *resources-nano depends_on: dbrepo-metadata-db: condition: service_healthy @@ -123,7 +65,7 @@ services: image: docker.io/bitnami/mariadb-galera:${MARIADB_VERSION} volumes: - data-db-data:/var/lib/mysql - - ./dbrepo-data-db/1_grant-user.sql:/docker-entrypoint-initdb.d/1_grant-user.sql + - ./config/1_grant-user.sql:/docker-entrypoint-initdb.d/1_grant-user.sql ports: - "3307:3306" environment: @@ -135,8 +77,6 @@ services: healthcheck: test: /opt/bitnami/scripts/mariadb-galera/healthcheck.sh --connect --innodb_initialized <<: *healthcheck-params - deploy: - <<: *resources-xlarge logging: driver: json-file @@ -153,8 +93,6 @@ services: healthcheck: test: -h <<: *healthcheck-params - deploy: - <<: *resources-nano depends_on: dbrepo-data-db: condition: service_healthy @@ -176,8 +114,6 @@ services: healthcheck: test: "psql -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak} -c 'select version();'" <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -195,8 +131,6 @@ services: healthcheck: test: "psql -U ${DASHBOARD_DB_USERNAME:-grafana} -h 127.0.0.1 -p 5432 -d ${DASHBOARD_DB_NAME:-grafana} -c 'select version();'" <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -231,8 +165,6 @@ services: healthcheck: test: curl -fsS localhost:8080/realms/master <<: *healthcheck-params - deploy: - <<: *resources-medium depends_on: dbrepo-identity-service: condition: service_healthy @@ -245,7 +177,7 @@ services: init: true restart: "no" container_name: dbrepo-auth-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/auth-service-init:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/auth-service-init:1.8.2 environment: AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080} METADATA_DB: "${METADATA_DB:-dbrepo}" @@ -254,8 +186,6 @@ services: READONLY_USERNAME: "${READONLY_USERNAME:-readonly}" SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: ${SYSTEM_PASSWORD:-admin} - deploy: - <<: *resources-nano depends_on: dbrepo-auth-service: condition: service_healthy @@ -270,7 +200,7 @@ services: restart: "no" container_name: dbrepo-metadata-service hostname: metadata-service - image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.8.2 environment: ADMIN_EMAIL: "${ADMIN_EMAIL:-noreply@localhost}" ANALYSE_SERVICE_ENDPOINT: "${ANALYSE_SERVICE_ENDPOINT:-http://analyse-service:8080}" @@ -312,8 +242,6 @@ services: healthcheck: test: curl -sSL localhost:8080/actuator/health/liveness | grep 'UP' || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-small depends_on: dbrepo-auth-service: condition: service_healthy @@ -334,7 +262,7 @@ services: restart: "no" container_name: dbrepo-analyse-service hostname: analyse-service - image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.8.2 environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -351,8 +279,6 @@ services: healthcheck: test: curl -sSL localhost:8080/health | grep 'UP' || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -378,8 +304,6 @@ services: healthcheck: test: rabbitmq-diagnostics -q is_running | grep 'is fully booted and running' <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -395,8 +319,6 @@ services: healthcheck: test: curl -sSL 127.0.0.1:9200 <<: *healthcheck-params - deploy: - <<: *resources-medium logging: driver: json-file @@ -404,7 +326,7 @@ services: restart: "no" container_name: dbrepo-search-service hostname: search-service - image: registry.datalab.tuwien.ac.at/dbrepo/search-service:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.8.2 environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -419,8 +341,6 @@ services: healthcheck: test: curl -sSL localhost:8080/health | grep 'UP' || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -428,7 +348,7 @@ services: restart: "no" container_name: dbrepo-ui hostname: ui - image: registry.datalab.tuwien.ac.at/dbrepo/ui:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.8.2 environment: NUXT_PUBLIC_API_CLIENT: "${BASE_URL:-http://localhost}" NUXT_PUBLIC_API_SERVER: "${BASE_URL:-http://gateway-service}" @@ -445,8 +365,6 @@ services: healthcheck: test: curl -fsSL 127.0.0.1:3000 && curl -fsSL 127.0.0.1:3000/health <<: *healthcheck-params - deploy: - <<: *resources-micro depends_on: dbrepo-search-service: condition: service_healthy @@ -459,16 +377,14 @@ services: restart: "no" container_name: dbrepo-gateway-service hostname: gateway-service - image: docker.io/nginx:${NGINX_VERSION} + image: docker.io/bitnami/nginx:${NGINX_VERSION} ports: - "80:8080" volumes: - - ./config/dbrepo.conf:/etc/nginx/conf.d/default.conf + - ./dbrepo-gateway-service/dbrepo.conf:/opt/bitnami/nginx/conf/server_blocks/dbrepo.conf:ro healthcheck: - test: lsof -i TCP:80 || exit 1 + test: wget -O- http://127.0.0.1:8080 <<: *healthcheck-params - deploy: - <<: *resources-nano depends_on: dbrepo-analyse-service: condition: service_healthy @@ -505,8 +421,6 @@ services: healthcheck: test: "ldapwhoami -H ldap://localhost:1389 -D ${IDENTITY_SERVICE_ADMIN_DN:-cn=admin,dc=dbrepo,dc=at} -w ${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin} || exit 1" <<: *healthcheck-params - deploy: - <<: *resources-nano logging: driver: json-file @@ -515,7 +429,7 @@ services: init: true container_name: dbrepo-search-service-init hostname: search-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.8.2 environment: LOG_LEVEL: ${LOG_LEVEL:-info} METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} @@ -523,8 +437,6 @@ services: OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" - deploy: - <<: *resources-nano depends_on: dbrepo-search-db: condition: service_healthy @@ -538,15 +450,13 @@ services: init: true container_name: dbrepo-dashboard-service-init hostname: search-dashboard-init - image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service-init:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service-init:1.8.2 environment: LOG_LEVEL: ${LOG_LEVEL:-info} DASHBOARD_UI_ENDPOINT: "${DASHBOARD_UI_ENDPOINT:-http://dashboard-ui:3000}" METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" - deploy: - <<: *resources-nano depends_on: dbrepo-dashboard-ui: condition: service_healthy @@ -569,8 +479,6 @@ services: healthcheck: test: echo "cluster.check" | weed shell | grep "checking master.*ok" || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-nano logging: driver: json-file @@ -585,8 +493,6 @@ services: healthcheck: test: promtool check healthy <<: *healthcheck-params - deploy: - <<: *resources-nano logging: driver: json-file @@ -595,14 +501,12 @@ services: init: true container_name: dbrepo-storage-service-init hostname: storage-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.8.2 environment: S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-seaweedfsadmin} S3_BUCKET: "${S3_BUCKET:-dbrepo}" S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-seaweedfsadmin} STORAGE_ENDPOINT: ${STORAGE_ENDPOINT:-http://storage-service:9000} - deploy: - <<: *resources-nano depends_on: dbrepo-storage-service: condition: service_healthy @@ -613,7 +517,7 @@ services: restart: "no" container_name: dbrepo-data-service hostname: data-service - image: registry.datalab.tuwien.ac.at/dbrepo/data-service:${APP_VERSION} + image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.8.2 environment: AUTH_SERVICE_CLIENT: "${AUTH_SERVICE_CLIENT:-dbrepo-client}" AUTH_SERVICE_CLIENT_SECRET: "${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}" @@ -648,8 +552,6 @@ services: healthcheck: test: curl -sSL localhost:8080/actuator/health/liveness | grep 'UP' || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-large depends_on: dbrepo-data-db: condition: service_healthy @@ -660,7 +562,7 @@ services: restart: "no" container_name: dbrepo-dashboard-ui hostname: dashboard-ui - image: docker.io/bitnami/grafana:11.5.3 + image: docker.io/bitnami/grafana:${GRAFANA_VERSION} ports: - "3000:3000" volumes: @@ -670,6 +572,7 @@ services: - ./config/provisioning/dashboards/provider.yaml:/opt/bitnami/grafana/conf/provisioning/dashboards/provider.yaml - ./config/provisioning/datasources/infinity.yaml:/opt/bitnami/grafana/conf/provisioning/datasources/infinity.yaml - ./config/provisioning/datasources/prometheus.yaml:/opt/bitnami/grafana/conf/provisioning/datasources/prometheus.yaml + - ./config/provisioning/datasources/opensearch.yaml:/opt/bitnami/grafana/conf/provisioning/datasources/opensearch.yaml environment: BASE_URL: "${BASE_URL:-http://localhost}" DASHBOARD_DB_NAME: "${DASHBOARD_DB_NAME:-grafana}" @@ -684,8 +587,6 @@ services: healthcheck: test: curl -fsSL --head 127.0.0.1:3000 <<: *healthcheck-params - deploy: - <<: *resources-nano extra_hosts: - "localhost:host-gateway" logging: @@ -695,9 +596,7 @@ services: restart: "no" container_name: dbrepo-dashboard-service hostname: dashboard-service - image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:${APP_VERSION} - ports: - - "4070:8080" + image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.8.2 environment: AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080} BASE_URL: "${BASE_URL:-http://localhost}" @@ -707,8 +606,6 @@ services: healthcheck: test: curl -fsSL --head 127.0.0.1:8080/health <<: *healthcheck-params - deploy: - <<: *resources-micro depends_on: dbrepo-dashboard-ui: condition: service_healthy diff --git a/.docs/.openapi/api-analyse.yaml b/.docs/.openapi/api-analyse-service.yaml similarity index 100% rename from .docs/.openapi/api-analyse.yaml rename to .docs/.openapi/api-analyse-service.yaml diff --git a/.docs/.openapi/api-dashboard-service.yaml b/.docs/.openapi/api-dashboard-service.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a5f61af6c080dcde0d8908da20ac9e53e3e4b0dd --- /dev/null +++ b/.docs/.openapi/api-dashboard-service.yaml @@ -0,0 +1,231 @@ +{ + "components": { + "schemas": { + "ApiError": { + "properties": { + "code": { + "example": "error.dashboard.create", + "type": "string" + }, + "message": { + "example": "Message", + "type": "string" + }, + "status": { + "example": "BAD_REQUEST", + "type": "string" + } + }, + "type": "object" + } + }, + "securitySchemes": { + "basicAuth": { + "in": "header", + "scheme": "basic", + "type": "http" + }, + "bearerAuth": { + "bearerFormat": "JWT", + "in": "header", + "scheme": "bearer", + "type": "http" + } + } + }, + "externalDocs": { + "description": "Sourcecode Documentation", + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.7/" + }, + "info": { + "contact": { + "email": "andreas.rauber@tuwien.ac.at", + "name": "Prof. Andreas Rauber" + }, + "description": "Service that manages the dashboards", + "license": { + "name": "Apache 2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0" + }, + "title": "Database Repository Dashboard Service API", + "version": "1.8.1" + }, + "openapi": "3.0.0", + "paths": { + "/api/dashboard": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Creates a dashboard in the Dashboard UI. Requires role `system`.", + "operationId": "create_dashboard", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "database_name": { + "example": "some_database", + "type": "string" + }, + "is_public": { + "example": true, + "type": "boolean" + }, + "is_schema_public": { + "example": true, + "type": "boolean" + }, + "owner_username": { + "example": "foobar", + "type": "string" + } + }, + "required": [ + "is_public", + "is_schema_public", + "database_name", + "owner_username" + ], + "type": "object" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Created dashboard successfully" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Dashboard exists with same name" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Unexpected system error" + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ], + "summary": "Create dashboard", + "tags": [ + "dashboard-endpoint" + ] + } + }, + "/api/dashboard/{uid}": { + "put": { + "consumes": [ + "application/json" + ], + "description": "Updates a dashboard in the Dashboard UI. Requires role `system`.", + "operationId": "update_dashboard", + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "type": "object" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "202": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "Updated dashboard successfully" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Dashboard not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Unexpected system error" + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ], + "summary": "Update dashboard", + "tags": [ + "dashboard-endpoint" + ] + } + } + }, + "servers": [ + { + "description": "Generated server url", + "url": "http://localhost" + }, + { + "description": "Sandbox", + "url": "https://test.dbrepo.tuwien.ac.at" + } + ] +} diff --git a/.docs/.openapi/api-dashboard.yaml b/.docs/.openapi/api-dashboard.yaml deleted file mode 100644 index 54a27444f68e0760fded5be2a5b9d1770a1d8c39..0000000000000000000000000000000000000000 --- a/.docs/.openapi/api-dashboard.yaml +++ /dev/null @@ -1 +0,0 @@ -"<!doctype html> <html lang=en> <title>500 Internal Server Error</title> <h1>Internal Server Error</h1> <p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>" diff --git a/.docs/.openapi/api-data-service.yaml b/.docs/.openapi/api-data-service.yaml new file mode 100644 index 0000000000000000000000000000000000000000..826cd46410b65d281c1b52a1c222bc7ad072d0d9 --- /dev/null +++ b/.docs/.openapi/api-data-service.yaml @@ -0,0 +1,3884 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Database Repository Data Service API", + "description": "Service that manages the data", + "contact": { + "name": "Prof. Andreas Rauber", + "email": "andreas.rauber@tuwien.ac.at" + }, + "license": { + "name": "Apache 2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0" + }, + "version": "1.8.2" + }, + "externalDocs": { + "description": "Sourcecode Documentation", + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8.2/system-services-metadata/" + }, + "servers": [ + { + "url": "http://localhost", + "description": "Development instance" + }, + { + "url": "https://test.dbrepo.tuwien.ac.at", + "description": "Staging instance" + } + ], + "paths": { + "/api/database/{databaseId}/view/{viewId}/data": { + "get": { + "tags": [ + "view-endpoint" + ], + "summary": "Get view data", + "description": "Gets data from a view of a database. For private databases, the user needs at least *READ* access to the associated database.", + "operationId": "getData", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "viewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "timestamp", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Retrieved view data", + "headers": { + "Access-Control-Expose-Headers": { + "description": "Expose `X-Count` custom header", + "required": true, + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Count": { + "description": "Number of rows", + "required": true, + "style": "simple", + "schema": { + "type": "integer", + "format": "int64" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "string" + } + }, + "text/csv": {} + } + }, + "400": { + "description": "Request pagination is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to retrieve view data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find view in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to format data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "409": { + "description": "View schema could not be mapped", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + }, + "head": { + "tags": [ + "view-endpoint" + ], + "summary": "Get view data", + "description": "Gets data from a view of a database. For private databases, the user needs at least *READ* access to the associated database.", + "operationId": "getData_1", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "viewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "timestamp", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Retrieved view data", + "headers": { + "Access-Control-Expose-Headers": { + "description": "Expose `X-Count` custom header", + "required": true, + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Count": { + "description": "Number of rows", + "required": true, + "style": "simple", + "schema": { + "type": "integer", + "format": "int64" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "string" + } + }, + "text/csv": {} + } + }, + "400": { + "description": "Request pagination is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to retrieve view data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find view in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to format data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "409": { + "description": "View schema could not be mapped", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table/{tableId}/data": { + "get": { + "tags": [ + "table-endpoint" + ], + "summary": "Get table data", + "description": "Gets data from a table with id. For a table in a private database, the user needs to have at least *READ* access to the associated database. Requests with HTTP method **GET** return the full dataset, requests with HTTP method **HEAD** only the number of tuples in the `X-Count` header.", + "operationId": "getData_2", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "timestamp", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Get table data", + "headers": { + "Access-Control-Expose-Headers": { + "description": "Expose `X-Count` custom header", + "required": true, + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Count": { + "description": "Number of rows", + "required": true, + "style": "simple", + "schema": { + "type": "integer", + "format": "int64" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "string" + } + }, + "text/csv": {} + } + }, + "400": { + "description": "Request pagination or table data select query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to get table data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find table in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to format data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + }, + "put": { + "tags": [ + "table-endpoint" + ], + "summary": "Update tuple", + "description": "Updates a data tuple into a table, then the table statistics are updated. The user needs to have at least *WRITE_OWN* access to the associated database. Requires role `insert-table-data`.", + "operationId": "updateRawTuple", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TupleUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Updated table data" + }, + "400": { + "description": "Request pagination or table data select query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Update table data not allowed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find table in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "table-endpoint" + ], + "summary": "Insert tuple", + "description": "Inserts a data tuple into a table, then the table statistics are updated. The user needs to have at least *WRITE_OWN* access to the associated database. Requires role `insert-table-data`.", + "operationId": "insertRawTuple", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TupleDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created table data" + }, + "400": { + "description": "Request pagination or table data select query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Create table data not allowed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find table in metadata database or blob in storage service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service or storage service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + }, + "delete": { + "tags": [ + "table-endpoint" + ], + "summary": "Delete tuple", + "description": "Deletes a data tuple into a table, then the table statistics are updated. The user needs to have at least *WRITE_OWN* access to the associated database. Requires role `delete-table-data`.", + "operationId": "deleteRawTuple", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TupleDeleteDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Deleted table data" + }, + "400": { + "description": "Request pagination or table data select query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Delete table data not allowed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find table in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + }, + "head": { + "tags": [ + "table-endpoint" + ], + "summary": "Get table data", + "description": "Gets data from a table with id. For a table in a private database, the user needs to have at least *READ* access to the associated database. Requests with HTTP method **GET** return the full dataset, requests with HTTP method **HEAD** only the number of tuples in the `X-Count` header.", + "operationId": "getData_3", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "timestamp", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Get table data", + "headers": { + "Access-Control-Expose-Headers": { + "description": "Expose `X-Count` custom header", + "required": true, + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Count": { + "description": "Number of rows", + "required": true, + "style": "simple", + "schema": { + "type": "integer", + "format": "int64" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "string" + } + }, + "text/csv": {} + } + }, + "400": { + "description": "Request pagination or table data select query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to get table data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find table in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to format data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/subset/{subsetId}/data": { + "get": { + "tags": [ + "subset-endpoint" + ], + "summary": "Get subset data", + "description": "Gets data of subset with id. For private databases, the user needs at least *READ* access to the associated database. Requests with HTTP method **GET** return the subset dataset, requests with HTTP method **HEAD** only the number of rows in the subset dataset in the `X-Count` header", + "operationId": "getData_4", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "subsetId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timestamp", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Retrieved subset data", + "headers": { + "Access-Control-Expose-Headers": { + "description": "Reverse proxy exposing of custom headers", + "required": true, + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Count": { + "description": "Number of rows", + "style": "simple", + "schema": { + "type": "string", + "format": "uuid" + } + }, + "X-Id": { + "description": "The subset id", + "required": true, + "style": "simple", + "schema": { + "type": "string", + "format": "uuid" + } + }, + "X-Headers": { + "description": "The list of headers separated by comma", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "string" + } + }, + "text/csv": {} + } + }, + "400": { + "description": "Invalid pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to retrieve subset data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database in metadata database or query in query store of the data database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to format data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to communicate with database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "head": { + "tags": [ + "subset-endpoint" + ], + "summary": "Get subset data", + "description": "Gets data of subset with id. For private databases, the user needs at least *READ* access to the associated database. Requests with HTTP method **GET** return the subset dataset, requests with HTTP method **HEAD** only the number of rows in the subset dataset in the `X-Count` header", + "operationId": "getData_5", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "subsetId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "timestamp", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Retrieved subset data", + "headers": { + "Access-Control-Expose-Headers": { + "description": "Reverse proxy exposing of custom headers", + "required": true, + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Count": { + "description": "Number of rows", + "style": "simple", + "schema": { + "type": "string", + "format": "uuid" + } + }, + "X-Id": { + "description": "The subset id", + "required": true, + "style": "simple", + "schema": { + "type": "string", + "format": "uuid" + } + }, + "X-Headers": { + "description": "The list of headers separated by comma", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "string" + } + }, + "text/csv": {} + } + }, + "400": { + "description": "Invalid pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to retrieve subset data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database in metadata database or query in query store of the data database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to format data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to communicate with database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/subset/{queryId}": { + "put": { + "tags": [ + "subset-endpoint" + ], + "summary": "Persist subset", + "description": "Persists a subset with id. Requires role `persist-query`.", + "operationId": "persist", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "queryId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryPersistDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Persisted subset", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryDto" + } + } + } + }, + "400": { + "description": "Malformed select query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to persist subset", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database in metadata database or query in query store of the data database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "417": { + "description": "Failed to persist subset", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to communicate with database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/upload": { + "post": { + "tags": [ + "upload-endpoint" + ], + "summary": "Uploads a multipart file", + "description": "Uploads a multipart file to the Storage Service. Requires role `upload-file`.", + "operationId": "create", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary" + } + }, + "required": [ + "file" + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Uploaded the file", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ViewDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the storage service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table/{tableId}/data/import": { + "post": { + "tags": [ + "table-endpoint" + ], + "summary": "Import dataset", + "description": "Imports a dataset in a table. Then update the table statistics. The user needs to have at least *WRITE_OWN* access to the associated database when importing into a owned table. Otherwise *WRITE_ALL* access in needed. Requires role `insert-table-data`.", + "operationId": "importDataset", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Authorization", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Imported dataset successfully" + }, + "400": { + "description": "Dataset and/or query are malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Import table dataset not allowed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find table in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/subset": { + "get": { + "tags": [ + "subset-endpoint" + ], + "summary": "Find subsets", + "description": "Finds subsets in the query store. When the database schema is marked as hidden, the user needs to be authorized, have at least read-access to the database. The result can be optionally filtered by setting `persisted`. When set to *true*, only persisted queries are returned, otherwise only non-persisted queries are returned.", + "operationId": "list", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "persisted", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Found subsets", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/QueryDto" + } + } + } + } + }, + "403": { + "description": "Not allowed to find subsets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database or user in metadata database or query in query store of the data database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to communicate with database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + }, + "post": { + "tags": [ + "subset-endpoint" + ], + "summary": "Create subset", + "description": "Creates a subset in the query store of the data database. Can also be used without authentication if (and only if) the database is marked as public (i.e. when `is_public` = `is_schema_public` is set to `true`). Otherwise at least read access is required.", + "operationId": "create_1", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "timestamp", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubsetDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created subset", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Malformed select query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to find subset", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database in metadata database or query in query store of the data database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to format data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "417": { + "description": "Failed to insert query into query store of data database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "501": { + "description": "Failed to execute query as it contains non-supported keywords", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to communicate with database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table/{tableId}/history": { + "get": { + "tags": [ + "table-endpoint" + ], + "summary": "Get history", + "description": "Gets the insert/delete operations history performed. For tables in private databases, the user needs to have at least *READ* access to the associated database.", + "operationId": "getHistory", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Found table history", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TableHistoryDto" + } + } + } + } + }, + "400": { + "description": "Invalid pagination size request, must be > 0", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Find table history not allowed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find table history in data database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to establish connection with the metadata service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/subset/{subsetId}": { + "get": { + "tags": [ + "subset-endpoint" + ], + "summary": "Find subset", + "description": "Finds a subset in the data database. When the database schema is marked as hidden, the user needs to be authorized, have at least read-access to the database. Requests with HTTP header `Accept=application/json` return the metadata, requests with HTTP header `Accept=text/csv` return the data as downloadable file.", + "operationId": "findById", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "subsetId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "timestamp", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time" + } + } + ], + "responses": { + "200": { + "description": "Found subset", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryDto" + } + }, + "text/csv": {} + } + }, + "400": { + "description": "Malformed select query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to find subset", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database in metadata database or query in query store of the data database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to find acceptable representation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to communicate with database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "basicAuth": [] + }, + { + "bearerAuth": [] + } + ] + } + } + }, + "components": { + "schemas": { + "ApiErrorDto": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "100 CONTINUE", + "101 SWITCHING_PROTOCOLS", + "102 PROCESSING", + "103 EARLY_HINTS", + "103 CHECKPOINT", + "200 OK", + "201 CREATED", + "202 ACCEPTED", + "203 NON_AUTHORITATIVE_INFORMATION", + "204 NO_CONTENT", + "205 RESET_CONTENT", + "206 PARTIAL_CONTENT", + "207 MULTI_STATUS", + "208 ALREADY_REPORTED", + "226 IM_USED", + "300 MULTIPLE_CHOICES", + "301 MOVED_PERMANENTLY", + "302 FOUND", + "302 MOVED_TEMPORARILY", + "303 SEE_OTHER", + "304 NOT_MODIFIED", + "305 USE_PROXY", + "307 TEMPORARY_REDIRECT", + "308 PERMANENT_REDIRECT", + "400 BAD_REQUEST", + "401 UNAUTHORIZED", + "402 PAYMENT_REQUIRED", + "403 FORBIDDEN", + "404 NOT_FOUND", + "405 METHOD_NOT_ALLOWED", + "406 NOT_ACCEPTABLE", + "407 PROXY_AUTHENTICATION_REQUIRED", + "408 REQUEST_TIMEOUT", + "409 CONFLICT", + "410 GONE", + "411 LENGTH_REQUIRED", + "412 PRECONDITION_FAILED", + "413 PAYLOAD_TOO_LARGE", + "413 REQUEST_ENTITY_TOO_LARGE", + "414 URI_TOO_LONG", + "414 REQUEST_URI_TOO_LONG", + "415 UNSUPPORTED_MEDIA_TYPE", + "416 REQUESTED_RANGE_NOT_SATISFIABLE", + "417 EXPECTATION_FAILED", + "418 I_AM_A_TEAPOT", + "419 INSUFFICIENT_SPACE_ON_RESOURCE", + "420 METHOD_FAILURE", + "421 DESTINATION_LOCKED", + "422 UNPROCESSABLE_ENTITY", + "423 LOCKED", + "424 FAILED_DEPENDENCY", + "425 TOO_EARLY", + "426 UPGRADE_REQUIRED", + "428 PRECONDITION_REQUIRED", + "429 TOO_MANY_REQUESTS", + "431 REQUEST_HEADER_FIELDS_TOO_LARGE", + "451 UNAVAILABLE_FOR_LEGAL_REASONS", + "500 INTERNAL_SERVER_ERROR", + "501 NOT_IMPLEMENTED", + "502 BAD_GATEWAY", + "503 SERVICE_UNAVAILABLE", + "504 GATEWAY_TIMEOUT", + "505 HTTP_VERSION_NOT_SUPPORTED", + "506 VARIANT_ALSO_NEGOTIATES", + "507 INSUFFICIENT_STORAGE", + "508 LOOP_DETECTED", + "509 BANDWIDTH_LIMIT_EXCEEDED", + "510 NOT_EXTENDED", + "511 NETWORK_AUTHENTICATION_REQUIRED" + ], + "example": "NOT_FOUND" + }, + "message": { + "type": "string", + "example": "Error message" + }, + "code": { + "type": "string", + "example": "error.service.code" + } + }, + "required": [ + "code", + "message", + "status" + ] + }, + "TupleUpdateDto": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "example": { + "key": "value" + } + }, + "keys": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "example": { + "id": 1 + } + } + }, + "required": [ + "data", + "keys" + ] + }, + "QueryPersistDto": { + "type": "object", + "properties": { + "persist": { + "type": "boolean", + "example": true + } + }, + "required": [ + "persist" + ] + }, + "CreatorBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "e41f94a6-2b94-4a12-ac0e-678684e1c070" + }, + "affiliation": { + "type": "string", + "example": "Brown University" + }, + "creator_name": { + "type": "string", + "example": "Carberry, Josiah" + }, + "name_type": { + "type": "string", + "enum": [ + "Personal", + "Organizational" + ], + "example": "Personal" + }, + "name_identifier": { + "type": "string", + "example": "0000-0002-1825-0097" + }, + "name_identifier_scheme": { + "type": "string", + "enum": [ + "ORCID", + "ROR", + "ISNI", + "GRID" + ], + "example": "ORCID" + }, + "affiliation_identifier": { + "type": "string", + "example": "https://ror.org/05gq02987" + }, + "affiliation_identifier_scheme": { + "type": "string", + "enum": [ + "ROR", + "GRID", + "ISNI" + ], + "example": "ROR" + } + }, + "required": [ + "creator_name", + "id" + ] + }, + "IdentifierBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "b97cd56b-66ca-4354-9e6c-f47210cfaaec" + }, + "type": { + "type": "string", + "enum": [ + "database", + "subset", + "table", + "view" + ], + "example": "database" + }, + "creators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreatorBriefDto" + } + }, + "titles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierTitleDto" + } + }, + "descriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierDescriptionDto" + } + }, + "doi": { + "type": "string", + "example": "10.1038/nphys1170" + }, + "publisher": { + "type": "string", + "example": "TU Wien" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "published" + ], + "example": "draft" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "fc29f89c-86a8-4020-9e36-4d954736c6cc" + }, + "query_id": { + "type": "string", + "format": "uuid", + "example": 1 + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": 1 + }, + "view_id": { + "type": "string", + "format": "uuid", + "example": 1 + }, + "publication_year": { + "type": "integer", + "format": "int32", + "example": 2022 + }, + "owned_by": { + "type": "string", + "format": "uuid", + "example": "2f45ef7a-7f9b-4667-9156-152c87fe1ca5" + } + }, + "required": [ + "creators", + "database_id", + "descriptions", + "id", + "owned_by", + "publication_year", + "publisher", + "status", + "titles", + "type" + ] + }, + "IdentifierDescriptionDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "e0e9692c-910b-4b60-b53a-fc7c358a917d" + }, + "description": { + "type": "string", + "example": "Air quality reports at Stephansplatz, Vienna" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ], + "example": "en" + }, + "type": { + "type": "string", + "enum": [ + "Abstract", + "Methods", + "SeriesInformation", + "TableOfContents", + "TechnicalInfo", + "Other" + ], + "example": "Abstract" + } + }, + "required": [ + "id" + ] + }, + "IdentifierTitleDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "70ce5164-fd74-413f-8712-f996b91defbf" + }, + "title": { + "type": "string", + "example": "Airquality Demonstrator" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ], + "example": "en" + }, + "type": { + "type": "string", + "enum": [ + "AlternativeTitle", + "Subtitle", + "TranslatedTitle", + "Other" + ] + } + }, + "required": [ + "id" + ] + }, + "QueryDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "83ea2326-f8f6-4263-baf8-cdf88a54efc7" + }, + "owner": { + "$ref": "#/components/schemas/UserBriefDto" + }, + "execution": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + }, + "query": { + "type": "string", + "example": "SELECT `id` FROM `air_quality`" + }, + "type": { + "type": "string", + "enum": [ + "query", + "view" + ], + "example": "query" + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierBriefDto" + } + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "fc29f89c-86a8-4020-9e36-4d954736c6cc" + }, + "query_normalized": { + "type": "string", + "example": "SELECT `id` FROM `air_quality`" + }, + "query_hash": { + "type": "string", + "example": "17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76" + }, + "is_persisted": { + "type": "boolean", + "example": true + }, + "result_hash": { + "type": "string", + "example": "17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76" + }, + "result_number": { + "type": "integer", + "format": "int64", + "example": 1 + } + }, + "required": [ + "database_id", + "execution", + "id", + "identifiers", + "is_persisted", + "owner", + "query", + "query_hash", + "query_normalized" + ] + }, + "UserBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4" + }, + "username": { + "type": "string", + "description": "Only contains lowercase characters", + "example": "jcarberry" + }, + "name": { + "type": "string", + "example": "Josiah Carberry" + }, + "orcid": { + "type": "string", + "example": "0000-0002-1825-0097" + }, + "qualified_name": { + "type": "string", + "example": "Josiah Carberry — @jcarberry" + }, + "given_name": { + "type": "string", + "example": "Josiah" + }, + "family_name": { + "type": "string", + "example": "Carberry" + } + }, + "required": [ + "id", + "username" + ] + }, + "CreatorDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "e41f94a6-2b94-4a12-ac0e-678684e1c070" + }, + "firstname": { + "type": "string", + "example": "Josiah" + }, + "lastname": { + "type": "string", + "example": "Carberry" + }, + "affiliation": { + "type": "string", + "example": "Brown University" + }, + "creator_name": { + "type": "string", + "example": "Carberry, Josiah" + }, + "name_type": { + "type": "string", + "enum": [ + "Personal", + "Organizational" + ], + "example": "Personal" + }, + "name_identifier": { + "type": "string", + "example": "0000-0002-1825-0097" + }, + "name_identifier_scheme": { + "type": "string", + "enum": [ + "ORCID", + "ROR", + "ISNI", + "GRID" + ], + "example": "ORCID" + }, + "name_identifier_scheme_uri": { + "type": "string", + "example": "https://orcid.org/" + }, + "affiliation_identifier": { + "type": "string", + "example": "https://ror.org/05gq02987" + }, + "affiliation_identifier_scheme": { + "type": "string", + "enum": [ + "ROR", + "GRID", + "ISNI" + ], + "example": "ROR" + }, + "affiliation_identifier_scheme_uri": { + "type": "string", + "example": "https://ror.org/" + } + }, + "required": [ + "creator_name", + "id" + ] + }, + "EnumDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "5343bb3d-14d3-4eb7-a86f-b8fc553cb315" + }, + "value": { + "type": "string", + "example": 3 + } + }, + "required": [ + "id", + "value" + ] + }, + "IdentifierDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "b97cd56b-66ca-4354-9e6c-f47210cfaaec" + }, + "links": { + "$ref": "#/components/schemas/LinksDto" + }, + "type": { + "type": "string", + "enum": [ + "database", + "subset", + "table", + "view" + ], + "example": "database" + }, + "titles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierTitleDto" + } + }, + "descriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierDescriptionDto" + } + }, + "funders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierFunderDto" + } + }, + "query": { + "type": "string", + "example": "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location` = \"09:STEF\"" + }, + "execution": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + }, + "doi": { + "type": "string", + "example": "10.1038/nphys1170" + }, + "publisher": { + "type": "string", + "example": "TU Wien" + }, + "owner": { + "$ref": "#/components/schemas/UserBriefDto" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ] + }, + "licenses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LicenseDto" + } + }, + "creators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreatorDto" + } + }, + "status": { + "type": "string", + "enum": [ + "draft", + "published" + ], + "example": "draft" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "query_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "view_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "query_normalized": { + "type": "string", + "example": "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location` = \"09:STEF\"" + }, + "related_identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RelatedIdentifierDto" + } + }, + "query_hash": { + "type": "string", + "description": "query hash in sha512" + }, + "result_hash": { + "type": "string", + "example": "34fe82cda2c53f13f8d90cfd7a3469e3a939ff311add50dce30d9136397bf8e5" + }, + "result_number": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "publication_day": { + "type": "integer", + "format": "int32", + "example": 15 + }, + "publication_month": { + "type": "integer", + "format": "int32", + "example": 12 + }, + "publication_year": { + "type": "integer", + "format": "int32", + "example": 2022 + } + }, + "required": [ + "creators", + "database_id", + "descriptions", + "funders", + "id", + "language", + "licenses", + "links", + "owner", + "publication_year", + "publisher", + "query", + "query_hash", + "query_normalized", + "status", + "titles", + "type" + ] + }, + "IdentifierFunderDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "39693413-e0ce-46da-ad5e-029c0556d439" + }, + "funder_name": { + "type": "string", + "example": "European Commission" + }, + "funder_identifier": { + "type": "string", + "example": "http://doi.org/10.13039/501100000780" + }, + "funder_identifier_type": { + "type": "string", + "enum": [ + "Crossref Funder ID", + "ROR", + "GND", + "ISNI", + "Other" + ], + "example": "Crossref Funder ID" + }, + "scheme_uri": { + "type": "string", + "example": "http://doi.org/" + }, + "award_number": { + "type": "string", + "example": 824087 + }, + "award_title": { + "type": "string", + "example": "EOSC-Life" + } + }, + "required": [ + "funder_name", + "id" + ] + }, + "LicenseDto": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "example": "MIT" + }, + "uri": { + "type": "string", + "example": "https://opensource.org/licenses/MIT" + }, + "description": { + "type": "string", + "example": "A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code." + } + }, + "required": [ + "identifier", + "uri" + ] + }, + "LinksDto": { + "type": "object", + "properties": { + "self": { + "type": "string", + "example": "http://example.com/api/" + }, + "data": { + "type": "string", + "example": "http://example.com" + }, + "self_html": { + "type": "string", + "example": "http://example.com" + }, + "dashboard_html": { + "type": "string", + "example": "http://example.com/d/defi2baxqawaod" + } + }, + "required": [ + "self", + "self_html" + ] + }, + "RelatedIdentifierDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "ce9d11f0-60a2-448d-a3e4-44719a443e8a" + }, + "value": { + "type": "string", + "example": "10.70124/dc4zh-9ce78" + }, + "type": { + "type": "string", + "enum": [ + "DOI", + "URL", + "URN", + "ARK", + "arXiv", + "bibcode", + "EAN13", + "EISSN", + "Handle", + "IGSN", + "ISBN", + "ISTC", + "LISSN", + "LSID", + "PMID", + "PURL", + "UPC", + "w3id" + ], + "example": "DOI" + }, + "relation": { + "type": "string", + "enum": [ + "IsCitedBy", + "Cites", + "IsSupplementTo", + "IsSupplementedBy", + "IsContinuedBy", + "Continues", + "IsDescribedBy", + "Describes", + "HasMetadata", + "IsMetadataFor", + "HasVersion", + "IsVersionOf", + "IsNewVersionOf", + "IsPreviousVersionOf", + "IsPartOf", + "HasPart", + "IsPublishedIn", + "IsReferencedBy", + "References", + "IsDocumentedBy", + "Documents", + "IsCompiledBy", + "Compiles", + "IsVariantFormOf", + "IsOriginalFormOf", + "IsIdenticalTo", + "IsReviewedBy", + "Reviews", + "IsDerivedFrom", + "IsSourceOf", + "IsRequiredBy", + "Requires", + "IsObsoletedBy", + "Obsoletes" + ], + "example": "Cites" + } + }, + "required": [ + "id", + "relation", + "type", + "value" + ] + }, + "SetDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "7eb4eded-bacc-4a91-84db-a9ae6ddafda7" + }, + "value": { + "type": "string", + "example": 3 + } + }, + "required": [ + "id", + "value" + ] + }, + "ViewColumnDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "6aec3a91-2e0b-4e92-a16a-9c3c5e892da1" + }, + "name": { + "type": "string", + "example": "Given Name", + "maxLength": 64, + "minLength": 0 + }, + "size": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "d": { + "type": "integer", + "format": "int64", + "example": 0 + }, + "description": { + "type": "string", + "example": "Column comment", + "maxLength": 2048, + "minLength": 0 + }, + "enums": { + "type": "array", + "description": "enum values, only considered when type = ENUM", + "items": { + "$ref": "#/components/schemas/EnumDto" + } + }, + "sets": { + "type": "array", + "description": "enum values, only considered when type = ENUM", + "items": { + "$ref": "#/components/schemas/SetDto" + } + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "2b5b2b03-fdd0-40d6-afe0-e5d02fd839e4" + }, + "ord": { + "type": "integer", + "format": "int32", + "example": 0 + }, + "internal_name": { + "type": "string", + "example": "given_name", + "maxLength": 64, + "minLength": 0 + }, + "index_length": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "length": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "type": { + "type": "string", + "enum": [ + "char", + "varchar", + "binary", + "varbinary", + "tinyblob", + "tinytext", + "text", + "blob", + "mediumtext", + "mediumblob", + "longtext", + "longblob", + "enum", + "set", + "serial", + "bit", + "tinyint", + "bool", + "smallint", + "mediumint", + "int", + "bigint", + "float", + "double", + "decimal", + "date", + "datetime", + "timestamp", + "time", + "year" + ], + "example": "varchar" + }, + "is_null_allowed": { + "type": "boolean", + "example": false + } + }, + "required": [ + "database_id", + "id", + "internal_name", + "is_null_allowed", + "name", + "ord", + "type" + ] + }, + "ViewDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "787439d0-e85e-400c-a7e6-996a023bfad9" + }, + "name": { + "type": "string", + "example": "Air Quality" + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierDto" + } + }, + "query": { + "type": "string", + "example": "SELECT `id` FROM `air_quality` ORDER BY `value` DESC" + }, + "owner": { + "$ref": "#/components/schemas/UserBriefDto" + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ViewColumnDto" + } + }, + "created": { + "type": "string", + "format": "date-time", + "example": "2022-01-01 08:00:00.000" + }, + "last_retrieved": { + "type": "string", + "format": "date-time", + "example": "2025-01-23T12:09:01" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "fc29f89c-86a8-4020-9e36-4d954736c6cc" + }, + "internal_name": { + "type": "string", + "example": "air_quality" + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + }, + "initial_view": { + "type": "boolean", + "description": "True if it is the default view for the database", + "example": true + }, + "query_hash": { + "type": "string", + "example": "7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916" + } + }, + "required": [ + "columns", + "created", + "database_id", + "id", + "identifiers", + "internal_name", + "name", + "owner", + "query", + "query_hash" + ] + }, + "TupleDto": { + "type": "object", + "properties": { + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "example": { + "key": "value" + } + } + }, + "required": [ + "data" + ] + }, + "ImportDto": { + "type": "object", + "properties": { + "location": { + "type": "string", + "example": "file.csv" + }, + "header": { + "type": "boolean", + "description": "If true, the first line contains the column names, otherwise it contains only data", + "example": true + }, + "separator": { + "type": "string", + "example": "," + }, + "quote": { + "type": "string", + "example": "\"" + }, + "line_termination": { + "type": "string", + "example": "\\r\\n" + } + }, + "required": [ + "header", + "location", + "separator" + ] + }, + "FilterDto": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "where", + "or", + "and" + ], + "example": "where" + }, + "value": { + "type": "string", + "example": 1 + }, + "column_id": { + "type": "string", + "format": "uuid", + "example": "14128033-54b5-4818-a489-21b0dded86e2" + }, + "operator_id": { + "type": "string", + "format": "uuid", + "example": "67c5b54d-2eb0-4f42-8dc1-a504562e9f32" + } + }, + "required": [ + "column_id", + "operator_id", + "type" + ] + }, + "OrderDto": { + "type": "object", + "properties": { + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "example": "asc" + }, + "column_id": { + "type": "string", + "format": "uuid", + "example": "e891ba86-0258-41a6-a8d9-ff58bc10b618" + } + }, + "required": [ + "column_id" + ] + }, + "SubsetDto": { + "type": "object", + "properties": { + "columns": { + "type": "array", + "example": [ + "e891ba86-0258-41a6-a8d9-ff58bc10b618" + ], + "items": { + "type": "string", + "format": "uuid" + } + }, + "filter": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilterDto" + } + }, + "order": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrderDto" + } + }, + "datasource_id": { + "type": "string", + "format": "uuid", + "example": "f7df2a7d-4ade-4c78-97b0-7c744d0893c7" + }, + "datasource_type": { + "type": "string", + "enum": [ + "table", + "view" + ] + } + }, + "required": [ + "columns", + "datasource_id", + "datasource_type" + ] + }, + "TableHistoryDto": { + "type": "object", + "properties": { + "timestamp": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + }, + "event": { + "type": "string", + "enum": [ + "insert", + "delete" + ], + "example": "INSERT" + }, + "total": { + "type": "integer", + "format": "int64", + "example": 1 + } + }, + "required": [ + "event", + "timestamp", + "total" + ] + }, + "TupleDeleteDto": { + "type": "object", + "properties": { + "keys": { + "type": "object", + "additionalProperties": { + "type": "object" + }, + "example": { + "id": 1 + } + } + }, + "required": [ + "keys" + ] + } + }, + "securitySchemes": { + "basicAuth": { + "type": "http", + "scheme": "basic" + }, + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + } +} diff --git a/.docs/.openapi/api-data.yaml b/.docs/.openapi/api-data.yaml deleted file mode 100644 index 60be46ea4a7431b28e45424374fc3390699a62fd..0000000000000000000000000000000000000000 --- a/.docs/.openapi/api-data.yaml +++ /dev/null @@ -1,2872 +0,0 @@ -openapi: 3.1.0 -info: - title: Database Repository Data Service API - description: Service that manages the data - contact: - name: Prof. Andreas Rauber - email: andreas.rauber@tuwien.ac.at - license: - name: Apache 2.0 - url: https://www.apache.org/licenses/LICENSE-2.0 - version: 1.8.2 -externalDocs: - description: Sourcecode Documentation - url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8.1/system-services-metadata/ -servers: -- url: http://localhost - description: Development instance -- url: https://test.dbrepo.tuwien.ac.at - description: Staging instance -paths: - /api/database/{databaseId}/view/{viewId}/data: - get: - tags: - - view-endpoint - summary: Get view data - description: "Gets data from a view of a database. For private databases, the\ - \ user needs at least *READ* access to the associated database." - operationId: getData - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: viewId - in: path - required: true - schema: - type: string - format: uuid - - name: page - in: query - required: false - schema: - type: integer - format: int64 - - name: size - in: query - required: false - schema: - type: integer - format: int64 - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - - name: Accept - in: header - required: true - schema: - type: string - responses: - "200": - description: Retrieved view data - headers: - Access-Control-Expose-Headers: - description: Expose `X-Count` custom header - required: true - style: simple - schema: - type: string - X-Count: - description: Number of rows - required: true - style: simple - schema: - type: integer - format: int64 - content: - application/json: - schema: - type: string - text/csv: {} - "400": - description: Request pagination is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to retrieve view data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find view in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: View schema could not be mapped - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - head: - tags: - - view-endpoint - summary: Get view data - description: "Gets data from a view of a database. For private databases, the\ - \ user needs at least *READ* access to the associated database." - operationId: getData_1 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: viewId - in: path - required: true - schema: - type: string - format: uuid - - name: page - in: query - required: false - schema: - type: integer - format: int64 - - name: size - in: query - required: false - schema: - type: integer - format: int64 - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - - name: Accept - in: header - required: true - schema: - type: string - responses: - "200": - description: Retrieved view data - headers: - Access-Control-Expose-Headers: - description: Expose `X-Count` custom header - required: true - style: simple - schema: - type: string - X-Count: - description: Number of rows - required: true - style: simple - schema: - type: integer - format: int64 - content: - application/json: - schema: - type: string - text/csv: {} - "400": - description: Request pagination is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to retrieve view data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find view in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: View schema could not be mapped - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - /api/database/{databaseId}/table/{tableId}/data: - get: - tags: - - table-endpoint - summary: Get table data - description: "Gets data from a table with id. For a table in a private database,\ - \ the user needs to have at least *READ* access to the associated database.\ - \ Requests with HTTP method **GET** return the full dataset, requests with\ - \ HTTP method **HEAD** only the number of tuples in the `X-Count` header." - operationId: getData_2 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - - name: page - in: query - required: false - schema: - type: integer - format: int64 - - name: size - in: query - required: false - schema: - type: integer - format: int64 - - name: Accept - in: header - required: true - schema: - type: string - responses: - "200": - description: Get table data - headers: - Access-Control-Expose-Headers: - description: Expose `X-Count` custom header - required: true - style: simple - schema: - type: string - X-Count: - description: Number of rows - required: true - style: simple - schema: - type: integer - format: int64 - content: - application/json: - schema: - type: string - text/csv: {} - "400": - description: Request pagination or table data select query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to get table data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - put: - tags: - - table-endpoint - summary: Update tuple - description: "Updates a data tuple into a table, then the table statistics are\ - \ updated. The user needs to have at least *WRITE_OWN* access to the associated\ - \ database. Requires role `insert-table-data`." - operationId: updateRawTuple - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: Authorization - in: header - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/TupleUpdateDto" - required: true - responses: - "202": - description: Updated table data - "400": - description: Request pagination or table data select query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Update table data not allowed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - post: - tags: - - table-endpoint - summary: Insert tuple - description: "Inserts a data tuple into a table, then the table statistics are\ - \ updated. The user needs to have at least *WRITE_OWN* access to the associated\ - \ database. Requires role `insert-table-data`." - operationId: insertRawTuple - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: Authorization - in: header - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/TupleDto" - required: true - responses: - "201": - description: Created table data - "400": - description: Request pagination or table data select query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Create table data not allowed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database or blob in storage - service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service or - storage service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - delete: - tags: - - table-endpoint - summary: Delete tuple - description: "Deletes a data tuple into a table, then the table statistics are\ - \ updated. The user needs to have at least *WRITE_OWN* access to the associated\ - \ database. Requires role `delete-table-data`." - operationId: deleteRawTuple - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: Authorization - in: header - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/TupleDeleteDto" - required: true - responses: - "202": - description: Deleted table data - "400": - description: Request pagination or table data select query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Delete table data not allowed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - head: - tags: - - table-endpoint - summary: Get table data - description: "Gets data from a table with id. For a table in a private database,\ - \ the user needs to have at least *READ* access to the associated database.\ - \ Requests with HTTP method **GET** return the full dataset, requests with\ - \ HTTP method **HEAD** only the number of tuples in the `X-Count` header." - operationId: getData_3 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - - name: page - in: query - required: false - schema: - type: integer - format: int64 - - name: size - in: query - required: false - schema: - type: integer - format: int64 - - name: Accept - in: header - required: true - schema: - type: string - responses: - "200": - description: Get table data - headers: - Access-Control-Expose-Headers: - description: Expose `X-Count` custom header - required: true - style: simple - schema: - type: string - X-Count: - description: Number of rows - required: true - style: simple - schema: - type: integer - format: int64 - content: - application/json: - schema: - type: string - text/csv: {} - "400": - description: Request pagination or table data select query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to get table data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - /api/database/{databaseId}/subset/{subsetId}/data: - get: - tags: - - subset-endpoint - summary: Get subset data - description: "Gets data of subset with id. For private databases, the user needs\ - \ at least *READ* access to the associated database. Requests with HTTP method\ - \ **GET** return the subset dataset, requests with HTTP method **HEAD** only\ - \ the number of rows in the subset dataset in the `X-Count` header" - operationId: getData_4 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: subsetId - in: path - required: true - schema: - type: string - format: uuid - - name: Accept - in: header - required: true - schema: - type: string - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - - name: page - in: query - required: false - schema: - type: integer - format: int64 - - name: size - in: query - required: false - schema: - type: integer - format: int64 - responses: - "200": - description: Retrieved subset data - headers: - Access-Control-Expose-Headers: - description: Reverse proxy exposing of custom headers - required: true - style: simple - schema: - type: string - X-Count: - description: Number of rows - style: simple - schema: - type: string - format: uuid - X-Id: - description: The subset id - required: true - style: simple - schema: - type: string - format: uuid - X-Headers: - description: The list of headers separated by comma - style: simple - schema: - type: string - content: - application/json: - schema: - type: string - text/csv: {} - "400": - description: Invalid pagination - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to retrieve subset data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database or query in query - store of the data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - head: - tags: - - subset-endpoint - summary: Get subset data - description: "Gets data of subset with id. For private databases, the user needs\ - \ at least *READ* access to the associated database. Requests with HTTP method\ - \ **GET** return the subset dataset, requests with HTTP method **HEAD** only\ - \ the number of rows in the subset dataset in the `X-Count` header" - operationId: getData_5 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: subsetId - in: path - required: true - schema: - type: string - format: uuid - - name: Accept - in: header - required: true - schema: - type: string - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - - name: page - in: query - required: false - schema: - type: integer - format: int64 - - name: size - in: query - required: false - schema: - type: integer - format: int64 - responses: - "200": - description: Retrieved subset data - headers: - Access-Control-Expose-Headers: - description: Reverse proxy exposing of custom headers - required: true - style: simple - schema: - type: string - X-Count: - description: Number of rows - style: simple - schema: - type: string - format: uuid - X-Id: - description: The subset id - required: true - style: simple - schema: - type: string - format: uuid - X-Headers: - description: The list of headers separated by comma - style: simple - schema: - type: string - content: - application/json: - schema: - type: string - text/csv: {} - "400": - description: Invalid pagination - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to retrieve subset data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database or query in query - store of the data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/subset/{queryId}: - put: - tags: - - subset-endpoint - summary: Persist subset - description: Persists a subset with id. Requires role `persist-query`. - operationId: persist - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: queryId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/QueryPersistDto" - required: true - responses: - "202": - description: Persisted subset - content: - application/json: - schema: - $ref: "#/components/schemas/QueryDto" - "400": - description: Malformed select query - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to persist subset - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database or query in query - store of the data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "417": - description: Failed to persist subset - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/upload: - post: - tags: - - upload-endpoint - summary: Uploads a multipart file - description: Uploads a multipart file to the Storage Service. Requires role - `upload-file`. - operationId: create - requestBody: - content: - application/json: - schema: - type: object - properties: - file: - type: string - format: binary - required: - - file - required: true - responses: - "201": - description: Uploaded the file - content: - application/json: - schema: - $ref: "#/components/schemas/ViewDto" - "503": - description: Failed to establish connection with the storage service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - /api/database/{databaseId}/table/{tableId}/data/import: - post: - tags: - - table-endpoint - summary: Import dataset - description: Imports a dataset in a table. Then update the table statistics. - The user needs to have at least *WRITE_OWN* access to the associated database - when importing into a owned table. Otherwise *WRITE_ALL* access in needed. - Requires role `insert-table-data`. - operationId: importDataset - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: Authorization - in: header - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ImportDto" - required: true - responses: - "202": - description: Imported dataset successfully - "400": - description: Dataset and/or query are malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Import table dataset not allowed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - /api/database/{databaseId}/subset: - get: - tags: - - subset-endpoint - summary: Find subsets - description: "Finds subsets in the query store. When the database schema is\ - \ marked as hidden, the user needs to be authorized, have at least read-access\ - \ to the database. The result can be optionally filtered by setting `persisted`.\ - \ When set to *true*, only persisted queries are returned, otherwise only\ - \ non-persisted queries are returned." - operationId: list - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: persisted - in: query - required: false - schema: - type: boolean - responses: - "200": - description: Found subsets - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/QueryDto" - "403": - description: Not allowed to find subsets - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database or query in query - store of the data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - post: - tags: - - subset-endpoint - summary: Create subset - description: Creates a subset in the query store of the data database. Can also - be used without authentication if (and only if) the database is marked as - public (i.e. when `is_public` = `is_schema_public` is set to `true`). Otherwise - at least read access is required. - operationId: create_1 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - - name: page - in: query - required: false - schema: - type: integer - format: int64 - - name: size - in: query - required: false - schema: - type: integer - format: int64 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/SubsetDto" - required: true - responses: - "201": - description: Created subset - content: - application/json: - schema: - type: string - "400": - description: Malformed select query - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to find subset - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database or query in query - store of the data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to format data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "417": - description: Failed to insert query into query store of data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "501": - description: Failed to execute query as it contains non-supported keywords - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - /api/database/{databaseId}/table/{tableId}/history: - get: - tags: - - table-endpoint - summary: Get history - description: "Gets the insert/delete operations history performed. For tables\ - \ in private databases, the user needs to have at least *READ* access to the\ - \ associated database." - operationId: getHistory - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: size - in: query - required: false - schema: - type: integer - format: int64 - responses: - "200": - description: Found table history - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/TableHistoryDto" - "400": - description: "Invalid pagination size request, must be > 0" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Find table history not allowed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find table history in data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to establish connection with the metadata service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] - /api/database/{databaseId}/subset/{subsetId}: - get: - tags: - - subset-endpoint - summary: Find subset - description: "Finds a subset in the data database. When the database schema\ - \ is marked as hidden, the user needs to be authorized, have at least read-access\ - \ to the database. Requests with HTTP header `Accept=application/json` return\ - \ the metadata, requests with HTTP header `Accept=text/csv` return the data\ - \ as downloadable file." - operationId: findById - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: subsetId - in: path - required: true - schema: - type: string - format: uuid - - name: timestamp - in: query - required: false - schema: - type: string - format: date-time - responses: - "200": - description: Found subset - content: - application/json: - schema: - $ref: "#/components/schemas/QueryDto" - text/csv: {} - "400": - description: Malformed select query - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to find subset - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database or query in query - store of the data database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to find acceptable representation - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to communicate with database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - basicAuth: [] - - bearerAuth: [] -components: - schemas: - ApiErrorDto: - type: object - properties: - status: - type: string - enum: - - 100 CONTINUE - - 101 SWITCHING_PROTOCOLS - - 102 PROCESSING - - 103 EARLY_HINTS - - 103 CHECKPOINT - - 200 OK - - 201 CREATED - - 202 ACCEPTED - - 203 NON_AUTHORITATIVE_INFORMATION - - 204 NO_CONTENT - - 205 RESET_CONTENT - - 206 PARTIAL_CONTENT - - 207 MULTI_STATUS - - 208 ALREADY_REPORTED - - 226 IM_USED - - 300 MULTIPLE_CHOICES - - 301 MOVED_PERMANENTLY - - 302 FOUND - - 302 MOVED_TEMPORARILY - - 303 SEE_OTHER - - 304 NOT_MODIFIED - - 305 USE_PROXY - - 307 TEMPORARY_REDIRECT - - 308 PERMANENT_REDIRECT - - 400 BAD_REQUEST - - 401 UNAUTHORIZED - - 402 PAYMENT_REQUIRED - - 403 FORBIDDEN - - 404 NOT_FOUND - - 405 METHOD_NOT_ALLOWED - - 406 NOT_ACCEPTABLE - - 407 PROXY_AUTHENTICATION_REQUIRED - - 408 REQUEST_TIMEOUT - - 409 CONFLICT - - 410 GONE - - 411 LENGTH_REQUIRED - - 412 PRECONDITION_FAILED - - 413 PAYLOAD_TOO_LARGE - - 413 REQUEST_ENTITY_TOO_LARGE - - 414 URI_TOO_LONG - - 414 REQUEST_URI_TOO_LONG - - 415 UNSUPPORTED_MEDIA_TYPE - - 416 REQUESTED_RANGE_NOT_SATISFIABLE - - 417 EXPECTATION_FAILED - - 418 I_AM_A_TEAPOT - - 419 INSUFFICIENT_SPACE_ON_RESOURCE - - 420 METHOD_FAILURE - - 421 DESTINATION_LOCKED - - 422 UNPROCESSABLE_ENTITY - - 423 LOCKED - - 424 FAILED_DEPENDENCY - - 425 TOO_EARLY - - 426 UPGRADE_REQUIRED - - 428 PRECONDITION_REQUIRED - - 429 TOO_MANY_REQUESTS - - 431 REQUEST_HEADER_FIELDS_TOO_LARGE - - 451 UNAVAILABLE_FOR_LEGAL_REASONS - - 500 INTERNAL_SERVER_ERROR - - 501 NOT_IMPLEMENTED - - 502 BAD_GATEWAY - - 503 SERVICE_UNAVAILABLE - - 504 GATEWAY_TIMEOUT - - 505 HTTP_VERSION_NOT_SUPPORTED - - 506 VARIANT_ALSO_NEGOTIATES - - 507 INSUFFICIENT_STORAGE - - 508 LOOP_DETECTED - - 509 BANDWIDTH_LIMIT_EXCEEDED - - 510 NOT_EXTENDED - - 511 NETWORK_AUTHENTICATION_REQUIRED - example: NOT_FOUND - message: - type: string - example: Error message - code: - type: string - example: error.service.code - required: - - code - - message - - status - TupleUpdateDto: - type: object - properties: - data: - type: object - additionalProperties: - type: object - example: - key: value - keys: - type: object - additionalProperties: - type: object - example: - id: 1 - required: - - data - - keys - QueryPersistDto: - type: object - properties: - persist: - type: boolean - example: true - required: - - persist - CreatorBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: e41f94a6-2b94-4a12-ac0e-678684e1c070 - affiliation: - type: string - example: Brown University - creator_name: - type: string - example: "Carberry, Josiah" - name_type: - type: string - enum: - - Personal - - Organizational - example: Personal - name_identifier: - type: string - example: 0000-0002-1825-0097 - name_identifier_scheme: - type: string - enum: - - ORCID - - ROR - - ISNI - - GRID - example: ORCID - affiliation_identifier: - type: string - example: https://ror.org/05gq02987 - affiliation_identifier_scheme: - type: string - enum: - - ROR - - GRID - - ISNI - example: ROR - required: - - creator_name - - id - IdentifierBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: b97cd56b-66ca-4354-9e6c-f47210cfaaec - type: - type: string - enum: - - database - - subset - - table - - view - example: database - creators: - type: array - items: - $ref: "#/components/schemas/CreatorBriefDto" - titles: - type: array - items: - $ref: "#/components/schemas/IdentifierTitleDto" - descriptions: - type: array - items: - $ref: "#/components/schemas/IdentifierDescriptionDto" - doi: - type: string - example: 10.1038/nphys1170 - publisher: - type: string - example: TU Wien - status: - type: string - enum: - - draft - - published - example: draft - database_id: - type: string - format: uuid - example: fc29f89c-86a8-4020-9e36-4d954736c6cc - query_id: - type: string - format: uuid - example: 1 - table_id: - type: string - format: uuid - example: 1 - view_id: - type: string - format: uuid - example: 1 - publication_year: - type: integer - format: int32 - example: 2022 - owned_by: - type: string - format: uuid - example: 2f45ef7a-7f9b-4667-9156-152c87fe1ca5 - required: - - creators - - database_id - - descriptions - - id - - owned_by - - publication_year - - publisher - - status - - titles - - type - IdentifierDescriptionDto: - type: object - properties: - id: - type: string - format: uuid - example: e0e9692c-910b-4b60-b53a-fc7c358a917d - description: - type: string - example: "Air quality reports at Stephansplatz, Vienna" - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - example: en - type: - type: string - enum: - - Abstract - - Methods - - SeriesInformation - - TableOfContents - - TechnicalInfo - - Other - example: Abstract - required: - - id - IdentifierTitleDto: - type: object - properties: - id: - type: string - format: uuid - example: 70ce5164-fd74-413f-8712-f996b91defbf - title: - type: string - example: Airquality Demonstrator - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - example: en - type: - type: string - enum: - - AlternativeTitle - - Subtitle - - TranslatedTitle - - Other - required: - - id - QueryDto: - type: object - properties: - id: - type: string - format: uuid - example: 83ea2326-f8f6-4263-baf8-cdf88a54efc7 - owner: - $ref: "#/components/schemas/UserBriefDto" - execution: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - query: - type: string - example: SELECT `id` FROM `air_quality` - type: - type: string - enum: - - query - - view - example: query - identifiers: - type: array - items: - $ref: "#/components/schemas/IdentifierBriefDto" - database_id: - type: string - format: uuid - example: fc29f89c-86a8-4020-9e36-4d954736c6cc - query_normalized: - type: string - example: SELECT `id` FROM `air_quality` - query_hash: - type: string - example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 - is_persisted: - type: boolean - example: true - result_hash: - type: string - example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 - result_number: - type: integer - format: int64 - example: 1 - required: - - database_id - - execution - - id - - identifiers - - is_persisted - - owner - - query - - query_hash - - query_normalized - UserBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 - username: - type: string - description: Only contains lowercase characters - example: jcarberry - name: - type: string - example: Josiah Carberry - orcid: - type: string - example: 0000-0002-1825-0097 - qualified_name: - type: string - example: Josiah Carberry — @jcarberry - given_name: - type: string - example: Josiah - family_name: - type: string - example: Carberry - required: - - id - - username - CreatorDto: - type: object - properties: - id: - type: string - format: uuid - example: e41f94a6-2b94-4a12-ac0e-678684e1c070 - firstname: - type: string - example: Josiah - lastname: - type: string - example: Carberry - affiliation: - type: string - example: Brown University - creator_name: - type: string - example: "Carberry, Josiah" - name_type: - type: string - enum: - - Personal - - Organizational - example: Personal - name_identifier: - type: string - example: 0000-0002-1825-0097 - name_identifier_scheme: - type: string - enum: - - ORCID - - ROR - - ISNI - - GRID - example: ORCID - name_identifier_scheme_uri: - type: string - example: https://orcid.org/ - affiliation_identifier: - type: string - example: https://ror.org/05gq02987 - affiliation_identifier_scheme: - type: string - enum: - - ROR - - GRID - - ISNI - example: ROR - affiliation_identifier_scheme_uri: - type: string - example: https://ror.org/ - required: - - creator_name - - id - EnumDto: - type: object - properties: - id: - type: string - format: uuid - example: 5343bb3d-14d3-4eb7-a86f-b8fc553cb315 - value: - type: string - example: 3 - required: - - id - - value - IdentifierDto: - type: object - properties: - id: - type: string - format: uuid - example: b97cd56b-66ca-4354-9e6c-f47210cfaaec - links: - $ref: "#/components/schemas/LinksDto" - type: - type: string - enum: - - database - - subset - - table - - view - example: database - titles: - type: array - items: - $ref: "#/components/schemas/IdentifierTitleDto" - descriptions: - type: array - items: - $ref: "#/components/schemas/IdentifierDescriptionDto" - funders: - type: array - items: - $ref: "#/components/schemas/IdentifierFunderDto" - query: - type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - execution: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - doi: - type: string - example: 10.1038/nphys1170 - publisher: - type: string - example: TU Wien - owner: - $ref: "#/components/schemas/UserBriefDto" - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - licenses: - type: array - items: - $ref: "#/components/schemas/LicenseDto" - creators: - type: array - items: - $ref: "#/components/schemas/CreatorDto" - status: - type: string - enum: - - draft - - published - example: draft - database_id: - type: string - format: uuid - example: null - query_id: - type: string - format: uuid - example: null - table_id: - type: string - format: uuid - example: null - view_id: - type: string - format: uuid - example: null - query_normalized: - type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - related_identifiers: - type: array - items: - $ref: "#/components/schemas/RelatedIdentifierDto" - query_hash: - type: string - description: query hash in sha512 - result_hash: - type: string - example: 34fe82cda2c53f13f8d90cfd7a3469e3a939ff311add50dce30d9136397bf8e5 - result_number: - type: integer - format: int64 - example: 1 - publication_day: - type: integer - format: int32 - example: 15 - publication_month: - type: integer - format: int32 - example: 12 - publication_year: - type: integer - format: int32 - example: 2022 - required: - - creators - - database_id - - descriptions - - funders - - id - - language - - licenses - - links - - owner - - publication_year - - publisher - - query - - query_hash - - query_normalized - - status - - titles - - type - IdentifierFunderDto: - type: object - properties: - id: - type: string - format: uuid - example: 39693413-e0ce-46da-ad5e-029c0556d439 - funder_name: - type: string - example: European Commission - funder_identifier: - type: string - example: http://doi.org/10.13039/501100000780 - funder_identifier_type: - type: string - enum: - - Crossref Funder ID - - ROR - - GND - - ISNI - - Other - example: Crossref Funder ID - scheme_uri: - type: string - example: http://doi.org/ - award_number: - type: string - example: 824087 - award_title: - type: string - example: EOSC-Life - required: - - funder_name - - id - LicenseDto: - type: object - properties: - identifier: - type: string - example: MIT - uri: - type: string - example: https://opensource.org/licenses/MIT - description: - type: string - example: "A short and simple permissive license with conditions only requiring\ - \ preservation of copyright and license notices. Licensed works, modifications,\ - \ and larger works may be distributed under different terms and without\ - \ source code." - required: - - identifier - - uri - LinksDto: - type: object - properties: - self: - type: string - example: http://example.com/api/ - data: - type: string - example: http://example.com - self_html: - type: string - example: http://example.com - dashboard_html: - type: string - example: http://example.com/d/defi2baxqawaod - required: - - self - - self_html - RelatedIdentifierDto: - type: object - properties: - id: - type: string - format: uuid - example: ce9d11f0-60a2-448d-a3e4-44719a443e8a - value: - type: string - example: 10.70124/dc4zh-9ce78 - type: - type: string - enum: - - DOI - - URL - - URN - - ARK - - arXiv - - bibcode - - EAN13 - - EISSN - - Handle - - IGSN - - ISBN - - ISTC - - LISSN - - LSID - - PMID - - PURL - - UPC - - w3id - example: DOI - relation: - type: string - enum: - - IsCitedBy - - Cites - - IsSupplementTo - - IsSupplementedBy - - IsContinuedBy - - Continues - - IsDescribedBy - - Describes - - HasMetadata - - IsMetadataFor - - HasVersion - - IsVersionOf - - IsNewVersionOf - - IsPreviousVersionOf - - IsPartOf - - HasPart - - IsPublishedIn - - IsReferencedBy - - References - - IsDocumentedBy - - Documents - - IsCompiledBy - - Compiles - - IsVariantFormOf - - IsOriginalFormOf - - IsIdenticalTo - - IsReviewedBy - - Reviews - - IsDerivedFrom - - IsSourceOf - - IsRequiredBy - - Requires - - IsObsoletedBy - - Obsoletes - example: Cites - required: - - id - - relation - - type - - value - SetDto: - type: object - properties: - id: - type: string - format: uuid - example: 7eb4eded-bacc-4a91-84db-a9ae6ddafda7 - value: - type: string - example: 3 - required: - - id - - value - ViewColumnDto: - type: object - properties: - id: - type: string - format: uuid - example: 6aec3a91-2e0b-4e92-a16a-9c3c5e892da1 - name: - type: string - example: Given Name - maxLength: 64 - minLength: 0 - size: - type: integer - format: int64 - example: 255 - d: - type: integer - format: int64 - example: 0 - description: - type: string - example: Column comment - maxLength: 2048 - minLength: 0 - enums: - type: array - description: "enum values, only considered when type = ENUM" - items: - $ref: "#/components/schemas/EnumDto" - sets: - type: array - description: "enum values, only considered when type = ENUM" - items: - $ref: "#/components/schemas/SetDto" - database_id: - type: string - format: uuid - example: 2b5b2b03-fdd0-40d6-afe0-e5d02fd839e4 - ord: - type: integer - format: int32 - example: 0 - internal_name: - type: string - example: given_name - maxLength: 64 - minLength: 0 - index_length: - type: integer - format: int64 - example: 255 - length: - type: integer - format: int64 - example: 255 - type: - type: string - enum: - - char - - varchar - - binary - - varbinary - - tinyblob - - tinytext - - text - - blob - - mediumtext - - mediumblob - - longtext - - longblob - - enum - - set - - serial - - bit - - tinyint - - bool - - smallint - - mediumint - - int - - bigint - - float - - double - - decimal - - date - - datetime - - timestamp - - time - - year - example: varchar - is_null_allowed: - type: boolean - example: false - required: - - database_id - - id - - internal_name - - is_null_allowed - - name - - ord - - type - ViewDto: - type: object - properties: - id: - type: string - format: uuid - example: 787439d0-e85e-400c-a7e6-996a023bfad9 - name: - type: string - example: Air Quality - identifiers: - type: array - items: - $ref: "#/components/schemas/IdentifierDto" - query: - type: string - example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC - owner: - $ref: "#/components/schemas/UserBriefDto" - columns: - type: array - items: - $ref: "#/components/schemas/ViewColumnDto" - created: - type: string - format: date-time - example: 2022-01-01 08:00:00.000 - last_retrieved: - type: string - format: date-time - example: 2025-01-23T12:09:01 - database_id: - type: string - format: uuid - example: fc29f89c-86a8-4020-9e36-4d954736c6cc - internal_name: - type: string - example: air_quality - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - initial_view: - type: boolean - description: True if it is the default view for the database - example: true - query_hash: - type: string - example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 - required: - - columns - - created - - database_id - - id - - identifiers - - internal_name - - name - - owner - - query - - query_hash - TupleDto: - type: object - properties: - data: - type: object - additionalProperties: - type: object - example: - key: value - required: - - data - ImportDto: - type: object - properties: - location: - type: string - example: file.csv - header: - type: boolean - description: "If true, the first line contains the column names, otherwise\ - \ it contains only data" - example: true - separator: - type: string - example: "," - quote: - type: string - example: '"' - line_termination: - type: string - example: \r\n - required: - - header - - location - - separator - FilterDto: - type: object - properties: - type: - type: string - enum: - - where - - or - - and - example: where - value: - type: string - example: 1 - column_id: - type: string - format: uuid - example: 14128033-54b5-4818-a489-21b0dded86e2 - operator_id: - type: string - format: uuid - example: 67c5b54d-2eb0-4f42-8dc1-a504562e9f32 - required: - - column_id - - operator_id - - type - - value - OrderDto: - type: object - properties: - direction: - type: string - enum: - - asc - - desc - example: asc - column_id: - type: string - format: uuid - example: e891ba86-0258-41a6-a8d9-ff58bc10b618 - required: - - column_id - SubsetDto: - type: object - properties: - columns: - type: array - example: - - e891ba86-0258-41a6-a8d9-ff58bc10b618 - items: - type: string - format: uuid - filter: - type: array - items: - $ref: "#/components/schemas/FilterDto" - order: - type: array - items: - $ref: "#/components/schemas/OrderDto" - datasource_id: - type: string - format: uuid - example: f7df2a7d-4ade-4c78-97b0-7c744d0893c7 - datasource_type: - type: string - enum: - - table - - view - required: - - columns - - datasource_id - - datasource_type - TableHistoryDto: - type: object - properties: - timestamp: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - event: - type: string - enum: - - insert - - delete - example: INSERT - total: - type: integer - format: int64 - example: 1 - required: - - event - - timestamp - - total - TupleDeleteDto: - type: object - properties: - keys: - type: object - additionalProperties: - type: object - example: - id: 1 - required: - - keys - securitySchemes: - basicAuth: - type: http - scheme: basic - bearerAuth: - type: http - scheme: bearer - bearerFormat: JWT diff --git a/.docs/.openapi/api-metadata-service.yaml b/.docs/.openapi/api-metadata-service.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8367c4c7b6aae081447758a673f72f7b1233989f --- /dev/null +++ b/.docs/.openapi/api-metadata-service.yaml @@ -0,0 +1,9754 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "Database Repository Metadata Service API", + "description": "Service that manages the metadata", + "contact": { + "name": "Prof. Andreas Rauber", + "email": "andreas.rauber@tuwien.ac.at" + }, + "license": { + "name": "Apache 2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0" + }, + "version": "1.8.2" + }, + "externalDocs": { + "description": "Sourcecode Documentation", + "url": "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8.2/system-services-metadata/" + }, + "servers": [ + { + "url": "http://localhost", + "description": "Development instance" + }, + { + "url": "https://test.dbrepo.tuwien.ac.at", + "description": "Staging instance" + } + ], + "paths": { + "/api/user/{userId}": { + "get": { + "tags": [ + "user-endpoint" + ], + "summary": "Get user", + "description": "Gets own user information from the metadata database. Requires authentication. Foreign user information can only be obtained if additional role `find-foreign-user` is present. Finding information about internal users results in a 404 error.", + "operationId": "find", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Found user", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDto" + } + } + } + }, + "403": { + "description": "Find user is not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "User was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "put": { + "tags": [ + "user-endpoint" + ], + "summary": "Update user", + "description": "Updates user with id. Requires role `modify-user-information`.", + "operationId": "modify", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Modified user information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDto" + } + } + } + }, + "400": { + "description": "Modify user query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to modify user metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database/user in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to modify user at auth service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "head": { + "tags": [ + "user-endpoint" + ], + "summary": "Get user", + "description": "Gets own user information from the metadata database. Requires authentication. Foreign user information can only be obtained if additional role `find-foreign-user` is present. Finding information about internal users results in a 404 error.", + "operationId": "find_1", + "parameters": [ + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Found user", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserDto" + } + } + } + }, + "403": { + "description": "Find user is not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "User was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database": { + "get": { + "tags": [ + "database-endpoint" + ], + "summary": "List databases", + "description": "Lists all databases in the metadata database. Requests with HTTP method **GET** return the list of databases, requests with HTTP method **HEAD** only the number in the `X-Count` header.", + "operationId": "list", + "parameters": [ + { + "name": "internal_name", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of databases", + "headers": { + "Access-Control-Expose-Headers": { + "description": "Expose `X-Count` custom header", + "required": true, + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Count": { + "description": "Number of databases", + "required": true, + "style": "simple", + "schema": { + "type": "integer", + "format": "int64" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "database-endpoint" + ], + "summary": "Create database", + "description": "Creates a database in the container with id. Requires roles `create-database`.", + "operationId": "create", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDatabaseDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created a new database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + }, + "400": { + "description": "Database create query is malformed or image is not supported", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Database create permission is missing or grant permissions at broker service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to fin container/user/database in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "409": { + "description": "Query store could not be created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "423": { + "description": "Database quota exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "head": { + "tags": [ + "database-endpoint" + ], + "summary": "List databases", + "description": "Lists all databases in the metadata database. Requests with HTTP method **GET** return the list of databases, requests with HTTP method **HEAD** only the number in the `X-Count` header.", + "operationId": "list_1", + "parameters": [ + { + "name": "internal_name", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List of databases", + "headers": { + "Access-Control-Expose-Headers": { + "description": "Expose `X-Count` custom header", + "required": true, + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Count": { + "description": "Number of databases", + "required": true, + "style": "simple", + "schema": { + "type": "integer", + "format": "int64" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + } + } + } + } + }, + "/api/database/{databaseId}/access/{userId}": { + "get": { + "tags": [ + "access-endpoint" + ], + "summary": "Find/Check access", + "description": "Finds or checks access of a user with given id to a database with given id. Requests with HTTP method **GET** return the access object, requests with HTTP method **HEAD** only the status. When the user has at least *READ* access, the status 200 is returned, 403 otherwise. Requires role `check-database-access` or `check-foreign-database-access`.", + "operationId": "find_2", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Found database access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseAccessDto" + } + } + } + }, + "403": { + "description": "No access to this database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "put": { + "tags": [ + "access-endpoint" + ], + "summary": "Modify access", + "description": "Modifies access of a user with given id to database with given id. Requires role `update-database-access`.", + "operationId": "update", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAccessDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Modified access" + }, + "400": { + "description": "Modify access query or database connection is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Modify access not permitted when no access is granted in the first place", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database or user not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Access could not be updated due to connection error in the data service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Access could not be updated in the data service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "post": { + "tags": [ + "access-endpoint" + ], + "summary": "Give access", + "description": "Give a user with given id access to some database with given id. Requires role `create-database-access`.", + "operationId": "create_1", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateAccessDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Granting access succeeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseAccessDto" + } + } + } + }, + "400": { + "description": "Granting access query or database connection is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Failed giving access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database or user not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Access could not be created due to connection error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Access could not be created in the data service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "delete": { + "tags": [ + "access-endpoint" + ], + "summary": "Delete access", + "description": "Delete access of a user with id to a database with id. Requires role `delete-database-access`.", + "operationId": "revoke", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Deleted access" + }, + "400": { + "description": "Modify access query or database connection is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Revoke of access not permitted as no access was found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "User, database with access was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Access could not be created due to connection error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Access could not be revoked in the data service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "head": { + "tags": [ + "access-endpoint" + ], + "summary": "Find/Check access", + "description": "Finds or checks access of a user with given id to a database with given id. Requests with HTTP method **GET** return the access object, requests with HTTP method **HEAD** only the status. When the user has at least *READ* access, the status 200 is returned, 403 otherwise. Requires role `check-database-access` or `check-foreign-database-access`.", + "operationId": "find_3", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "userId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Found database access", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseAccessDto" + } + } + } + }, + "403": { + "description": "No access to this database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/ontology/{ontologyId}": { + "get": { + "tags": [ + "ontology-endpoint" + ], + "summary": "Find ontology", + "description": "Finds an ontology with id in the metadata database.", + "operationId": "find_4", + "parameters": [ + { + "name": "ontologyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Find one ontology", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OntologyDto" + } + } + } + }, + "404": { + "description": "Could not find ontology", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + } + }, + "put": { + "tags": [ + "ontology-endpoint" + ], + "summary": "Update ontology", + "description": "Updates an ontology with id. Requires role `update-ontology`.", + "operationId": "update_1", + "parameters": [ + { + "name": "ontologyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OntologyModifyDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Updated ontology successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OntologyDto" + } + } + } + }, + "404": { + "description": "Could not find ontology", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "delete": { + "tags": [ + "ontology-endpoint" + ], + "summary": "Delete ontology", + "description": "Deletes an ontology with given id. Requires role `delete-ontology`.", + "operationId": "delete", + "parameters": [ + { + "name": "ontologyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Deleted ontology successfully", + "content": { + "application/json": {} + } + }, + "404": { + "description": "Could not find ontology", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/message/{messageId}": { + "put": { + "tags": [ + "message-endpoint" + ], + "summary": "Update message", + "description": "Updates a message with id. Requires role `update-maintenance-message`.", + "operationId": "update_2", + "parameters": [ + { + "name": "messageId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BannerMessageUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Updated message", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BannerMessageBriefDto" + } + } + } + }, + "404": { + "description": "Could not find message", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "delete": { + "tags": [ + "message-endpoint" + ], + "summary": "Delete message", + "description": "Deletes a message with id. Requires role `delete-maintenance-message`.", + "operationId": "delete_1", + "parameters": [ + { + "name": "messageId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Deleted message", + "content": { + "application/json": {} + } + }, + "404": { + "description": "Could not find message", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/image/{imageId}": { + "get": { + "tags": [ + "image-endpoint" + ], + "summary": "Find image", + "description": "Finds a container image in the metadata database.", + "operationId": "findById", + "parameters": [ + { + "name": "imageId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Found image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageDto" + } + } + } + }, + "404": { + "description": "Image could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + } + }, + "put": { + "tags": [ + "image-endpoint" + ], + "summary": "Update image", + "description": "Updates container image in the metadata database. Requires role `modify-image`.", + "operationId": "update_3", + "parameters": [ + { + "name": "imageId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageChangeDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Updated image successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageDto" + } + } + } + }, + "404": { + "description": "Image could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "delete": { + "tags": [ + "image-endpoint" + ], + "summary": "Delete image", + "description": "Deletes a container image in the metadata database. Requires role `delete-image`.", + "operationId": "delete_2", + "parameters": [ + { + "name": "imageId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Deleted image successfully" + }, + "404": { + "description": "Image could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/identifier/{identifierId}": { + "get": { + "tags": [ + "identifier-endpoint" + ], + "summary": "Find identifier", + "description": "Finds an identifier with id. The response format depends on the HTTP `Accept` header set on the request.", + "operationId": "find_5", + "parameters": [ + { + "name": "identifierId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Found identifier successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentifierDto" + } + }, + "application/ld+json": { + "schema": { + "$ref": "#/components/schemas/LdDatasetDto" + } + }, + "text/xml": {}, + "text/bibliography": {}, + "text/bibliography; style=apa": {}, + "text/bibliography; style=ieee": {}, + "text/bibliography; style=bibtex": {} + } + }, + "400": { + "description": "Identifier could not be exported, the requested style is not known", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to view identifier", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Identifier could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "406": { + "description": "Failed to find acceptable representation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "409": { + "description": "Exported resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "410": { + "description": "Failed to retrieve from S3 endpoint", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to data service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to find in data service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + } + }, + "put": { + "tags": [ + "identifier-endpoint" + ], + "summary": "Save identifier", + "description": "Saves an identifier with id as a draft identifier. Identifiers can only be created for objects the user has at least *READ* access in the associated database (requires role `create-identifier`) or for any object in any database (requires role `create-foreign-identifier`).", + "operationId": "save", + "parameters": [ + { + "name": "identifierId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentifierSaveDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Saved identifier", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentifierDto" + } + } + } + }, + "400": { + "description": "Identifier form contains invalid request data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Insufficient access rights or authorities", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database, table or view", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "delete": { + "tags": [ + "identifier-endpoint" + ], + "summary": "Delete identifier", + "description": "Deletes an identifier with id. Requires role `delete-identifier`.", + "operationId": "delete_3", + "parameters": [ + { + "name": "identifierId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Deleted identifier" + }, + "403": { + "description": "Deleting identifier not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Identifier or database could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to delete in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/identifier/{identifierId}/publish": { + "put": { + "tags": [ + "identifier-endpoint" + ], + "summary": "Publish identifier", + "description": "Publishes an identifier with id. A published identifier cannot be changed anymore. Requires role `publish-identifier`.", + "operationId": "publish", + "parameters": [ + { + "name": "identifierId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Published identifier", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentifierDto" + } + } + } + }, + "400": { + "description": "Identifier form contains invalid request data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Insufficient access rights or authorities", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database, table or view", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/visibility": { + "put": { + "tags": [ + "database-endpoint" + ], + "summary": "Update database visibility", + "description": "Updates the database with id on the visibility. Only the database owner can perform this operation. Requires role `modify-database-visibility`.", + "operationId": "visibility", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseModifyVisibilityDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Visibility modified successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + }, + "400": { + "description": "The visibility payload is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Visibility modification is not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/view/{viewId}": { + "get": { + "tags": [ + "view-endpoint" + ], + "summary": "Get view", + "description": "Gets a view with id in the metadata database.", + "operationId": "find_6", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "viewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Find view successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ViewDto" + } + } + } + }, + "403": { + "description": "Find view is not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database, view or user could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "put": { + "tags": [ + "view-endpoint" + ], + "summary": "Update view", + "description": "Updates a view with id. This can only be performed by the view owner or database owner. Requires role `create-database-view`.", + "operationId": "update_4", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "viewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ViewUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Update view successfully", + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ViewBriefDto" + } + } + } + }, + "400": { + "description": "Update view query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Update not allowed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database or View could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "delete": { + "tags": [ + "view-endpoint" + ], + "summary": "Delete view", + "description": "Deletes a view with id. Requires role `delete-database-view`.", + "operationId": "delete_4", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "viewId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Delete view successfully" + }, + "400": { + "description": "Delete view query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Deletion not allowed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database, view or user could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "423": { + "description": "Delete view resulted in an invalid query statement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table/{tableId}": { + "get": { + "tags": [ + "table-endpoint" + ], + "summary": "Find table", + "description": "Finds a table with id. When a table is hidden (i.e. when `is_public` is `false`), then the user needs to have at least read access and the role `find-table`. When the `system` role is present, the endpoint responds with additional connection metadata in the header.", + "operationId": "findById_1", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Find table successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TableDto" + } + } + } + }, + "403": { + "description": "Access to the database is forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Table, database or container could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "put": { + "tags": [ + "table-endpoint" + ], + "summary": "Update table", + "description": "Updates a table in the database with id. Requires role `update-table`.", + "operationId": "update_5", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TableUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Updated the table", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TableBriefDto" + } + } + } + }, + "400": { + "description": "Update table visibility payload is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Update table visibility not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Table could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "delete": { + "tags": [ + "table-endpoint" + ], + "summary": "Delete table", + "description": "Deletes a table with id. Only the owner of a table can perform this action (requires role `delete-table`) or anyone can delete a table (requires role `delete-foreign-table`).", + "operationId": "delete_5", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Delete table successfully" + }, + "400": { + "description": "Delete table query resulted in an invalid query statement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Access to the database is forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Table, database or container could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table/{tableId}/statistic": { + "put": { + "tags": [ + "table-endpoint" + ], + "summary": "Update statistics", + "description": "Updates basic statistical properties (min, max, mean, median, std.dev) for numerical columns in a table with id. This action can only be performed by the table owner. Requires role `update-table-statistic`.", + "operationId": "updateStatistic", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Updated table statistics successfully" + }, + "400": { + "description": "Failed to map column statistic to known columns", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not the owner", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database/table in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table/{tableId}/column/{columnId}": { + "put": { + "tags": [ + "table-endpoint" + ], + "summary": "Update semantics", + "description": "Updates column semantics of a table column with id. Only the table owner with at least *READ* access to the associated database can update the column semantics (requires role `modify-table-column-semantics`) or foreign table columns if role `modify-foreign-table-column-semantics`.", + "operationId": "updateColumn", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "columnId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColumnSemanticsUpdateDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Updated column semantics successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ColumnDto" + } + } + } + }, + "400": { + "description": "Update semantic concept query is malformed or update unit of measurement query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Access to the database is forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find user/table/database/ontology in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/owner": { + "put": { + "tags": [ + "database-endpoint" + ], + "summary": "Update database owner", + "description": "Updates the database with id on the owner. Only the database owner can perform this operation. Requires role `modify-database-owner`.", + "operationId": "transfer", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseTransferDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Transfer of ownership was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + }, + "400": { + "description": "Owner payload is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database or user could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Transfer of ownership is not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/metadata/view": { + "put": { + "tags": [ + "database-endpoint" + ], + "summary": "Update database view schemas", + "description": "Updates the database with id with generated metadata from view that are not yet known to the database. Only the database owner can perform this operation. Requires role `find-database`.", + "operationId": "refreshViewMetadata", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Refreshed database views metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + }, + "403": { + "description": "Refresh view metadata is not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/metadata/table": { + "put": { + "tags": [ + "database-endpoint" + ], + "summary": "Update database table schemas", + "description": "Updates the database with id with generated metadata from tables that are not yet known to the database. Only the database owner can perform this operation. Requires role `find-database`.", + "operationId": "refreshTableMetadata", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Refreshed database tables metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + }, + "400": { + "description": "Failed to parse payload at search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not allowed to refresh table metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/image": { + "get": { + "tags": [ + "database-endpoint" + ], + "summary": "Get database preview image", + "description": "Gets the database with id on the preview image.", + "operationId": "findPreviewImage", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "View of image was successful", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "byte" + } + } + } + }, + "404": { + "description": "Database or user could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "put": { + "tags": [ + "database-endpoint" + ], + "summary": "Update database preview image", + "description": "Updates the database with id on the preview image. Only the database owner can perform this operation. Requires role `modify-database-image`.", + "operationId": "modifyImage", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseModifyImageDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Modify of image was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + }, + "403": { + "description": "Modify of image is not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "410": { + "description": "File was not found in the Storage Service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/dashboard": { + "put": { + "tags": [ + "database-endpoint" + ], + "summary": "Update database dashboard uid", + "description": "Updates the dashboard uid for a database with given id. Only the database owner can perform this operation. Requires role `system`.", + "operationId": "modifyDashboard", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseModifyDashboardDto" + } + } + }, + "required": true + }, + "responses": { + "202": { + "description": "Modify of dashboard uid was successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + }, + "400": { + "description": "Malformed payload", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/ontology": { + "get": { + "tags": [ + "ontology-endpoint" + ], + "summary": "List ontologies", + "description": "Lists all ontologies known to the metadata database.", + "operationId": "findAll", + "responses": { + "200": { + "description": "List ontologies", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OntologyBriefDto" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "ontology-endpoint" + ], + "summary": "Create ontology", + "description": "Creates an ontology in the metadata database. Requires role `create-ontology`.", + "operationId": "create_2", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OntologyCreateDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Registered ontology successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OntologyDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/message": { + "get": { + "tags": [ + "message-endpoint" + ], + "summary": "List messages", + "description": "Lists messages known to the metadata database. Messages can be filtered be filtered with the optional `active` parameter. If set to *true*, only active messages (that is, messages whose end time has not been reached) will be returned. Otherwise only inactive messages are returned. If not set, active and inactive messages are returned.", + "operationId": "list_2", + "parameters": [ + { + "name": "active", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "List messages", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BannerMessageDto" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "message-endpoint" + ], + "summary": "Create message", + "description": "Creates a message in the metadata database. Requires role `create-maintenance-message`.", + "operationId": "create_3", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BannerMessageCreateDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created message", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BannerMessageBriefDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/image": { + "get": { + "tags": [ + "image-endpoint" + ], + "summary": "List images", + "description": "Lists all container images known to the metadata database.", + "operationId": "findAll_1", + "responses": { + "200": { + "description": "List images", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImageBriefDto" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "image-endpoint" + ], + "summary": "Create image", + "description": "Creates a container image in the metadata database. Requires role `create-image`.", + "operationId": "create_4", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageCreateDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created image", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageDto" + } + } + } + }, + "400": { + "description": "Image specification is invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "409": { + "description": "Image already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/identifier": { + "get": { + "tags": [ + "identifier-endpoint" + ], + "summary": "List identifiers", + "description": "Lists all identifiers known to the metadata database", + "operationId": "findAll_2", + "parameters": [ + { + "name": "type", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "database", + "subset", + "table", + "view" + ] + } + }, + { + "name": "status", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "draft", + "published" + ] + } + }, + { + "name": "dbid", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "qid", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "vid", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tid", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "Accept", + "in": "header", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Found identifiers successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierBriefDto" + } + } + } + }, + "application/ld+json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LdDatasetDto" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "identifier-endpoint" + ], + "summary": "Create identifier", + "description": "Create an identifier with id to create a draft identifier. Identifiers can only be created for objects the user has at least *READ* access in the associated database (requires role `create-identifier`) or for any object in any database (requires role `create-foreign-identifier`).", + "operationId": "create_5", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateIdentifierDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Drafted identifier", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentifierDto" + } + } + } + }, + "400": { + "description": "Identifier form contains invalid request data", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Insufficient access rights or authorities", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database, table or view", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/view": { + "get": { + "tags": [ + "view-endpoint" + ], + "summary": "List views", + "description": "Lists views known to the metadata database.", + "operationId": "findAll_3", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Find views successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ViewBriefDto" + } + } + } + } + }, + "404": { + "description": "Database or user could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "post": { + "tags": [ + "view-endpoint" + ], + "summary": "Create view", + "description": "Creates a view. This can only be performed by the database owner. Requires role `create-database-view`.", + "operationId": "create_6", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateViewDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Create view successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ViewBriefDto" + } + } + } + }, + "400": { + "description": "Create view query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Credentials missing", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database/user in metadata database.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "409": { + "description": "View exists with name", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "423": { + "description": "Create view resulted in an invalid query statement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table": { + "get": { + "tags": [ + "table-endpoint" + ], + "summary": "List tables", + "description": "Lists all tables known to the metadata database. When a database has a hidden schema (i.e. when `is_schema_public` is `false`), then the user needs to have at least read access and the role `list-tables`.", + "operationId": "list_3", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "List tables", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TableBriefDto" + } + } + } + } + }, + "403": { + "description": "List tables not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + }, + "post": { + "tags": [ + "table-endpoint" + ], + "summary": "Create table", + "description": "Creates a table in the database with id. Requires role `create-table`.", + "operationId": "create_7", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTableDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created a new table", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TableBriefDto" + } + } + } + }, + "400": { + "description": "Create table query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Create table not permitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database, container or user could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "409": { + "description": "Create table conflicts with existing table name", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "502": { + "description": "Connection to search service failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "503": { + "description": "Failed to save in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/container": { + "get": { + "tags": [ + "container-endpoint" + ], + "summary": "List containers", + "description": "List all containers in the metadata database.", + "operationId": "findAll_4", + "parameters": [ + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "List containers", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ContainerBriefDto" + } + } + } + } + } + } + }, + "post": { + "tags": [ + "container-endpoint" + ], + "summary": "Create container", + "description": "Creates a container in the metadata database. Requires role `create-container`.", + "operationId": "create_8", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateContainerDto" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created a new container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerDto" + } + } + } + }, + "400": { + "description": "Container payload malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Create container not permitted, need authority `create-container`", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Container image or user could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "409": { + "description": "Container name already exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/user": { + "get": { + "tags": [ + "user-endpoint" + ], + "summary": "List users", + "description": "Lists users known to the metadata database. Internal users are omitted from the result list. If the optional query parameter `username` is present, the result list can be filtered by matching this exact username.", + "operationId": "findAll_5", + "parameters": [ + { + "name": "username", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "List users", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserBriefDto" + } + } + } + } + } + } + } + }, + "/api/unit": { + "get": { + "tags": [ + "unit-endpoint" + ], + "summary": "List units", + "description": "Lists units known to the metadata database.", + "operationId": "findAll_6", + "responses": { + "200": { + "description": "Find all semantic units", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UnitDto" + } + } + } + } + } + } + } + }, + "/api/ontology/{ontologyId}/entity": { + "get": { + "tags": [ + "ontology-endpoint" + ], + "summary": "Find entities", + "description": "Finds semantic entities by label or uri in an ontology with id. Requires role `execute-semantic-query`.", + "operationId": "find_7", + "parameters": [ + { + "name": "ontologyId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "label", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "uri", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Found entities", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityDto" + } + } + } + } + }, + "400": { + "description": "Filter params are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Could not find ontology", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "417": { + "description": "Generated query or uri is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "422": { + "description": "Ontology does not have rdf or sparql endpoint", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/oai": { + "get": { + "tags": [ + "metadata-endpoint" + ], + "summary": "Get record", + "operationId": "identify", + "parameters": [ + { + "name": "verb", + "in": "query" + }, + { + "name": "parameters", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/OaiListIdentifiersParameters" + } + } + ], + "responses": { + "200": { + "description": "List containers", + "content": { + "text/xml": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/api/message/message/{messageId}": { + "get": { + "tags": [ + "message-endpoint" + ], + "summary": "Find message", + "description": "Finds a message with id in the metadata database.", + "operationId": "find_8", + "parameters": [ + { + "name": "messageId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Get messages", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BannerMessageDto" + } + } + } + }, + "404": { + "description": "Could not find message", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + } + } + }, + "/api/license": { + "get": { + "tags": [ + "license-endpoint" + ], + "summary": "List licenses", + "description": "Lists licenses known to the metadata database.", + "operationId": "list_4", + "responses": { + "200": { + "description": "List of licenses", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LicenseDto" + } + } + } + } + } + } + } + }, + "/api/identifier/retrieve": { + "get": { + "tags": [ + "identifier-endpoint" + ], + "summary": "Retrieve PID metadata", + "description": "Retrieves Persistent Identifier (PID) metadata from external endpoints. Supported PIDs are: ORCID, ROR, DOI.", + "operationId": "retrieve", + "parameters": [ + { + "name": "url", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Retrieved metadata from identifier", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IdentifierDto" + } + } + } + }, + "404": { + "description": "Failed to find metadata for identifier", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + } + } + }, + "/api/database/{databaseId}": { + "get": { + "tags": [ + "database-endpoint" + ], + "summary": "Find database", + "description": "Finds a database with id.", + "operationId": "findById_2", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Database found successfully", + "headers": { + "X-Username": { + "description": "The authentication username", + "style": "simple", + "schema": { + "type": "string" + } + }, + "Access-Control-Expose-Headers": { + "description": "Expose custom headers", + "style": "simple", + "schema": { + "type": "string" + } + }, + "X-Password": { + "description": "The authentication password", + "style": "simple", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseBriefDto" + } + } + } + }, + "403": { + "description": "Not allowed to view database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Database could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table/{tableId}/suggest": { + "get": { + "tags": [ + "table-endpoint" + ], + "summary": "Suggest semantics", + "description": "Suggests semantic concepts for a table. This action can only be performed by the table owner. Requires role `table-semantic-analyse`.", + "operationId": "analyseTable", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Suggested table semantics successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityDto" + } + } + } + } + }, + "400": { + "description": "Failed to parse statistic in search service", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "403": { + "description": "Not the table owner.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database/table in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "417": { + "description": "Generated query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "422": { + "description": "Ontology does not have rdf or sparql endpoint", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/database/{databaseId}/table/{tableId}/column/{columnId}/suggest": { + "get": { + "tags": [ + "table-endpoint" + ], + "summary": "Suggest semantics", + "description": "Suggests column semantics. Requires role `table-semantic-analyse`.", + "operationId": "analyseTableColumn", + "parameters": [ + { + "name": "databaseId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "tableId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "columnId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Suggested table column semantics successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TableColumnEntityDto" + } + } + } + } + }, + "400": { + "description": "Generated query is malformed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Failed to find database/table in metadata database", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "422": { + "description": "Ontology does not have rdf or sparql endpoint", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/container/{containerId}": { + "get": { + "tags": [ + "container-endpoint" + ], + "summary": "Find container", + "description": "Finds a container in the metadata database.", + "operationId": "findById_3", + "parameters": [ + { + "name": "containerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Found container", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContainerDto" + } + } + } + }, + "404": { + "description": "Container image could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + } + }, + "delete": { + "tags": [ + "container-endpoint" + ], + "summary": "Delete container", + "description": "Deletes a container in the metadata database. Requires role `delete-container`.", + "operationId": "delete_6", + "parameters": [ + { + "name": "containerId", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "202": { + "description": "Deleted container" + }, + "403": { + "description": "Create container not permitted, need authority `delete-container`", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + }, + "404": { + "description": "Container not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiErrorDto" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + }, + { + "basicAuth": [] + } + ] + } + }, + "/api/concept": { + "get": { + "tags": [ + "concept-endpoint" + ], + "summary": "List concepts", + "description": "List all semantic concepts known to the metadata database", + "operationId": "findAll_7", + "responses": { + "200": { + "description": "List concepts", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConceptDto" + } + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "UserAttributesDto": { + "type": "object", + "properties": { + "theme": { + "type": "string", + "example": "light" + }, + "orcid": { + "type": "string", + "example": "https://orcid.org/0000-0002-1825-0097" + }, + "affiliation": { + "type": "string", + "example": "Brown University" + }, + "language": { + "type": "string", + "example": "en" + } + }, + "required": [ + "language", + "theme" + ] + }, + "UserDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4" + }, + "name": { + "type": "string", + "example": "Josiah Carberry" + }, + "username": { + "type": "string", + "example": "username" + }, + "password": { + "type": "string", + "example": "p4ssw0rd" + }, + "attributes": { + "$ref": "#/components/schemas/UserAttributesDto" + }, + "last_retrieved": { + "type": "string", + "format": "date-time", + "example": "2025-01-23T12:09:01" + }, + "qualified_name": { + "type": "string", + "example": "Josiah Carberry — @jcarberry" + }, + "given_name": { + "type": "string", + "example": "Josiah" + }, + "family_name": { + "type": "string", + "example": "Carberry" + } + }, + "required": [ + "attributes", + "id", + "password", + "username" + ] + }, + "ApiErrorDto": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "100 CONTINUE", + "101 SWITCHING_PROTOCOLS", + "102 PROCESSING", + "103 EARLY_HINTS", + "103 CHECKPOINT", + "200 OK", + "201 CREATED", + "202 ACCEPTED", + "203 NON_AUTHORITATIVE_INFORMATION", + "204 NO_CONTENT", + "205 RESET_CONTENT", + "206 PARTIAL_CONTENT", + "207 MULTI_STATUS", + "208 ALREADY_REPORTED", + "226 IM_USED", + "300 MULTIPLE_CHOICES", + "301 MOVED_PERMANENTLY", + "302 FOUND", + "302 MOVED_TEMPORARILY", + "303 SEE_OTHER", + "304 NOT_MODIFIED", + "305 USE_PROXY", + "307 TEMPORARY_REDIRECT", + "308 PERMANENT_REDIRECT", + "400 BAD_REQUEST", + "401 UNAUTHORIZED", + "402 PAYMENT_REQUIRED", + "403 FORBIDDEN", + "404 NOT_FOUND", + "405 METHOD_NOT_ALLOWED", + "406 NOT_ACCEPTABLE", + "407 PROXY_AUTHENTICATION_REQUIRED", + "408 REQUEST_TIMEOUT", + "409 CONFLICT", + "410 GONE", + "411 LENGTH_REQUIRED", + "412 PRECONDITION_FAILED", + "413 PAYLOAD_TOO_LARGE", + "413 REQUEST_ENTITY_TOO_LARGE", + "414 URI_TOO_LONG", + "414 REQUEST_URI_TOO_LONG", + "415 UNSUPPORTED_MEDIA_TYPE", + "416 REQUESTED_RANGE_NOT_SATISFIABLE", + "417 EXPECTATION_FAILED", + "418 I_AM_A_TEAPOT", + "419 INSUFFICIENT_SPACE_ON_RESOURCE", + "420 METHOD_FAILURE", + "421 DESTINATION_LOCKED", + "422 UNPROCESSABLE_ENTITY", + "423 LOCKED", + "424 FAILED_DEPENDENCY", + "425 TOO_EARLY", + "426 UPGRADE_REQUIRED", + "428 PRECONDITION_REQUIRED", + "429 TOO_MANY_REQUESTS", + "431 REQUEST_HEADER_FIELDS_TOO_LARGE", + "451 UNAVAILABLE_FOR_LEGAL_REASONS", + "500 INTERNAL_SERVER_ERROR", + "501 NOT_IMPLEMENTED", + "502 BAD_GATEWAY", + "503 SERVICE_UNAVAILABLE", + "504 GATEWAY_TIMEOUT", + "505 HTTP_VERSION_NOT_SUPPORTED", + "506 VARIANT_ALSO_NEGOTIATES", + "507 INSUFFICIENT_STORAGE", + "508 LOOP_DETECTED", + "509 BANDWIDTH_LIMIT_EXCEEDED", + "510 NOT_EXTENDED", + "511 NETWORK_AUTHENTICATION_REQUIRED" + ], + "example": "NOT_FOUND" + }, + "message": { + "type": "string", + "example": "Error message" + }, + "code": { + "type": "string", + "example": "error.service.code" + } + }, + "required": [ + "code", + "message", + "status" + ] + }, + "CreatorBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "e41f94a6-2b94-4a12-ac0e-678684e1c070" + }, + "affiliation": { + "type": "string", + "example": "Brown University" + }, + "creator_name": { + "type": "string", + "example": "Carberry, Josiah" + }, + "name_type": { + "type": "string", + "enum": [ + "Personal", + "Organizational" + ], + "example": "Personal" + }, + "name_identifier": { + "type": "string", + "example": "0000-0002-1825-0097" + }, + "name_identifier_scheme": { + "type": "string", + "enum": [ + "ORCID", + "ROR", + "ISNI", + "GRID" + ], + "example": "ORCID" + }, + "affiliation_identifier": { + "type": "string", + "example": "https://ror.org/05gq02987" + }, + "affiliation_identifier_scheme": { + "type": "string", + "enum": [ + "ROR", + "GRID", + "ISNI" + ], + "example": "ROR" + } + }, + "required": [ + "creator_name", + "id" + ] + }, + "DatabaseBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "fc29f89c-86a8-4020-9e36-4d954736c6cc" + }, + "name": { + "type": "string", + "example": "Air Quality" + }, + "description": { + "type": "string", + "example": "Air Quality" + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierBriefDto" + } + }, + "contact": { + "$ref": "#/components/schemas/UserBriefDto" + }, + "internal_name": { + "type": "string", + "example": "air_quality" + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + }, + "owner_id": { + "type": "string", + "format": "uuid", + "example": "2f45ef7a-7f9b-4667-9156-152c87fe1ca5" + }, + "preview_image": { + "type": "string" + } + }, + "required": [ + "contact", + "id", + "identifiers", + "internal_name", + "is_public", + "is_schema_public", + "name", + "owner_id" + ] + }, + "IdentifierBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "b97cd56b-66ca-4354-9e6c-f47210cfaaec" + }, + "type": { + "type": "string", + "enum": [ + "database", + "subset", + "table", + "view" + ], + "example": "database" + }, + "creators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreatorBriefDto" + } + }, + "titles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierTitleDto" + } + }, + "descriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierDescriptionDto" + } + }, + "doi": { + "type": "string", + "example": "10.1038/nphys1170" + }, + "publisher": { + "type": "string", + "example": "TU Wien" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "published" + ], + "example": "draft" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "fc29f89c-86a8-4020-9e36-4d954736c6cc" + }, + "query_id": { + "type": "string", + "format": "uuid", + "example": 1 + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": 1 + }, + "view_id": { + "type": "string", + "format": "uuid", + "example": 1 + }, + "publication_year": { + "type": "integer", + "format": "int32", + "example": 2022 + }, + "owned_by": { + "type": "string", + "format": "uuid", + "example": "2f45ef7a-7f9b-4667-9156-152c87fe1ca5" + } + }, + "required": [ + "creators", + "database_id", + "descriptions", + "id", + "owned_by", + "publication_year", + "publisher", + "status", + "titles", + "type" + ] + }, + "IdentifierDescriptionDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "e0e9692c-910b-4b60-b53a-fc7c358a917d" + }, + "description": { + "type": "string", + "example": "Air quality reports at Stephansplatz, Vienna" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ], + "example": "en" + }, + "type": { + "type": "string", + "enum": [ + "Abstract", + "Methods", + "SeriesInformation", + "TableOfContents", + "TechnicalInfo", + "Other" + ], + "example": "Abstract" + } + }, + "required": [ + "id" + ] + }, + "IdentifierTitleDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "70ce5164-fd74-413f-8712-f996b91defbf" + }, + "title": { + "type": "string", + "example": "Airquality Demonstrator" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ], + "example": "en" + }, + "type": { + "type": "string", + "enum": [ + "AlternativeTitle", + "Subtitle", + "TranslatedTitle", + "Other" + ] + } + }, + "required": [ + "id" + ] + }, + "UserBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4" + }, + "username": { + "type": "string", + "description": "Only contains lowercase characters", + "example": "jcarberry" + }, + "name": { + "type": "string", + "example": "Josiah Carberry" + }, + "orcid": { + "type": "string", + "example": "0000-0002-1825-0097" + }, + "qualified_name": { + "type": "string", + "example": "Josiah Carberry — @jcarberry" + }, + "given_name": { + "type": "string", + "example": "Josiah" + }, + "family_name": { + "type": "string", + "example": "Carberry" + } + }, + "required": [ + "id", + "username" + ] + }, + "DatabaseAccessDto": { + "type": "object", + "properties": { + "user": { + "$ref": "#/components/schemas/UserBriefDto" + }, + "type": { + "type": "string", + "enum": [ + "read", + "write_own", + "write_all" + ], + "example": "read" + } + }, + "required": [ + "type", + "user" + ] + }, + "UserUpdateDto": { + "type": "object", + "properties": { + "firstname": { + "type": "string", + "example": "Josiah" + }, + "lastname": { + "type": "string", + "example": "Carberry" + }, + "affiliation": { + "type": "string", + "example": "Brown University" + }, + "orcid": { + "type": "string", + "example": "0000-0002-1825-0097" + }, + "theme": { + "type": "string", + "example": "dark" + }, + "language": { + "type": "string", + "example": "en" + } + }, + "required": [ + "language", + "theme" + ] + }, + "OntologyModifyDto": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "example": "Ontology URI" + }, + "prefix": { + "type": "string", + "example": "Ontology prefix" + }, + "sparql_endpoint": { + "type": "string", + "example": "Ontology SPARQL endpoint" + }, + "rdf_path": { + "type": "string", + "example": "rdf/om-2.0.rdf" + } + }, + "required": [ + "prefix", + "uri" + ] + }, + "OntologyDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "7c491e40-082a-47b8-b82c-51d03c520466" + }, + "uri": { + "type": "string", + "example": "http://www.wikidata.org/" + }, + "prefix": { + "type": "string", + "example": "wd" + }, + "sparql": { + "type": "boolean", + "example": true + }, + "rdf": { + "type": "boolean", + "example": false + }, + "uri_pattern": { + "type": "string", + "example": "http://www.wikidata.org/entity/.*" + }, + "sparql_endpoint": { + "type": "string", + "example": "https://query.wikidata.org/sparql" + }, + "rdf_path": { + "type": "string", + "example": "rdf/om-2.0.rdf" + } + }, + "required": [ + "id", + "prefix", + "rdf", + "sparql", + "uri" + ] + }, + "BannerMessageUpdateDto": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "error", + "warning", + "info" + ] + }, + "message": { + "type": "string", + "example": "Maintenance starts on 8am on Monday" + }, + "link": { + "type": "string", + "example": "https://example.com" + }, + "link_text": { + "type": "string", + "example": "More" + }, + "display_start": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + }, + "display_end": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + } + }, + "required": [ + "message", + "type" + ] + }, + "BannerMessageBriefDto": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "error", + "warning", + "info" + ] + }, + "message": { + "type": "string", + "example": "Maintenance starts on 8am on Monday" + }, + "link": { + "type": "string", + "example": "https://example.com" + }, + "link_text": { + "type": "string", + "example": "More" + } + }, + "required": [ + "message", + "type" + ] + }, + "ImageChangeDto": { + "type": "object", + "properties": { + "registry": { + "type": "string", + "example": "docker.io/library" + }, + "defaultPort": { + "type": "integer", + "format": "int32", + "example": 5432, + "maximum": 65535, + "minimum": 1024 + }, + "dialect": { + "type": "string", + "example": "Postgres" + }, + "driver_class": { + "type": "string", + "example": "org.postgresql.Driver" + }, + "jdbc_method": { + "type": "string", + "example": "postgresql" + } + }, + "required": [ + "dialect", + "driver_class", + "jdbc_method", + "registry" + ] + }, + "DataTypeDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "816f55d5-1098-4f60-a4af-c8121c04dcca" + }, + "value": { + "type": "string", + "example": "time" + }, + "documentation": { + "type": "string", + "example": "https://mariadb.com/kb/en/time/" + }, + "display_name": { + "type": "string", + "example": "TIME(fsp)" + }, + "size_min": { + "type": "integer", + "format": "int32", + "example": 0 + }, + "size_max": { + "type": "integer", + "format": "int32", + "example": 6 + }, + "size_default": { + "type": "integer", + "format": "int32", + "example": 0 + }, + "size_required": { + "type": "boolean", + "example": false + }, + "d_min": { + "type": "integer", + "format": "int32" + }, + "d_max": { + "type": "integer", + "format": "int32" + }, + "d_default": { + "type": "integer", + "format": "int32" + }, + "d_required": { + "type": "boolean" + }, + "data_hint": { + "type": "string", + "example": "e.g. HH:MM:SS, HH:MM, HHMMSS, H:M:S" + }, + "type_hint": { + "type": "string", + "example": "fsp=microsecond precision, min. 0, max. 6" + }, + "is_quoted": { + "type": "boolean", + "description": "frontend needs to quote this data type", + "example": false + }, + "is_buildable": { + "type": "boolean", + "description": "frontend can build this data type", + "example": true + } + }, + "required": [ + "display_name", + "documentation", + "id", + "is_buildable", + "is_quoted", + "value" + ] + }, + "ImageDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "816f55d5-1098-4f60-a4af-c8121c04dcce" + }, + "name": { + "type": "string", + "example": "mariadb" + }, + "version": { + "type": "string", + "example": 10.5 + }, + "operators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OperatorDto" + } + }, + "default": { + "type": "boolean", + "example": false + }, + "data_types": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataTypeDto" + } + } + }, + "required": [ + "data_types", + "default", + "id", + "name", + "operators", + "version" + ] + }, + "OperatorDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "816f55d5-1098-4f60-a4af-c8121c04dccf" + }, + "value": { + "type": "string", + "example": "XOR" + }, + "documentation": { + "type": "string", + "example": "https://mariadb.com/kb/en/xor/" + }, + "display_name": { + "type": "string", + "example": "XOR" + } + }, + "required": [ + "display_name", + "documentation", + "id", + "value" + ] + }, + "IdentifierSaveDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "68e11675-1e0f-4d24-a6d9-887ad1c4445d" + }, + "type": { + "type": "string", + "enum": [ + "database", + "subset", + "table", + "view" + ], + "example": "database" + }, + "doi": { + "type": "string", + "example": "10.1111/11111111" + }, + "titles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveIdentifierTitleDto" + } + }, + "descriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveIdentifierDescriptionDto" + } + }, + "funders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveIdentifierFunderDto" + } + }, + "licenses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LicenseDto" + } + }, + "publisher": { + "type": "string", + "example": "TU Wien" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ] + }, + "creators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveIdentifierCreatorDto" + } + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "query_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "view_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "publication_day": { + "type": "integer", + "format": "int32", + "example": 15 + }, + "publication_month": { + "type": "integer", + "format": "int32", + "example": 12 + }, + "publication_year": { + "type": "integer", + "format": "int32", + "example": 2022 + }, + "related_identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveRelatedIdentifierDto" + } + } + }, + "required": [ + "creators", + "database_id", + "id", + "publication_year", + "publisher", + "titles", + "type" + ] + }, + "LicenseDto": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "example": "MIT" + }, + "uri": { + "type": "string", + "example": "https://opensource.org/licenses/MIT" + }, + "description": { + "type": "string", + "example": "A short and simple permissive license with conditions only requiring preservation of copyright and license notices. Licensed works, modifications, and larger works may be distributed under different terms and without source code." + } + }, + "required": [ + "identifier", + "uri" + ] + }, + "SaveIdentifierCreatorDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "da9dd034-00a8-4517-b93d-d1b2adfee418" + }, + "firstname": { + "type": "string", + "example": "Josiah" + }, + "lastname": { + "type": "string", + "example": "Carberry" + }, + "affiliation": { + "type": "string", + "example": "Wesleyan University" + }, + "creator_name": { + "type": "string", + "example": "Carberry, Josiah" + }, + "name_type": { + "type": "string", + "enum": [ + "Personal", + "Organizational" + ], + "example": "Personal" + }, + "name_identifier": { + "type": "string", + "example": "0000-0002-1825-0097" + }, + "name_identifier_scheme": { + "type": "string", + "enum": [ + "ORCID", + "ROR", + "ISNI", + "GRID" + ], + "example": "ORCID" + }, + "affiliation_identifier": { + "type": "string", + "example": "https://ror.org/04d836q62" + }, + "affiliation_identifier_scheme": { + "type": "string", + "enum": [ + "ROR", + "GRID", + "ISNI" + ], + "example": "ROR" + } + }, + "required": [ + "creator_name", + "id" + ] + }, + "SaveIdentifierDescriptionDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "35bd84d8-b181-43c8-b786-4d024e4f843c" + }, + "description": { + "type": "string", + "example": "Air quality reports at Stephansplatz, Vienna" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ], + "example": "en" + }, + "type": { + "type": "string", + "enum": [ + "Abstract", + "Methods", + "SeriesInformation", + "TableOfContents", + "TechnicalInfo", + "Other" + ], + "example": "Abstract" + } + }, + "required": [ + "description", + "id" + ] + }, + "SaveIdentifierFunderDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "1c6b9212-a315-44b9-946c-3682a7a0e517" + }, + "funder_name": { + "type": "string", + "example": "European Commission" + }, + "funder_identifier": { + "type": "string", + "example": "http://doi.org/10.13039/501100000780" + }, + "funder_identifier_type": { + "type": "string", + "enum": [ + "Crossref Funder ID", + "ROR", + "GND", + "ISNI", + "Other" + ], + "example": "Crossref Funder ID" + }, + "scheme_uri": { + "type": "string", + "example": "http://doi.org/" + }, + "award_number": { + "type": "string", + "example": 824087 + }, + "award_title": { + "type": "string", + "example": "EOSC-Life" + } + }, + "required": [ + "funder_name", + "id" + ] + }, + "SaveIdentifierTitleDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "2af9f40e-eaf5-4ea1-861a-1a696587bf29" + }, + "title": { + "type": "string", + "example": "Airquality Demonstrator" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ], + "example": "en" + }, + "type": { + "type": "string", + "enum": [ + "AlternativeTitle", + "Subtitle", + "TranslatedTitle", + "Other" + ], + "example": "Subtitle" + } + }, + "required": [ + "id", + "title" + ] + }, + "SaveRelatedIdentifierDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "5bb272c7-7421-4f74-83ac-0486812d0f44" + }, + "value": { + "type": "string", + "example": "10.70124/dc4zh-9ce78" + }, + "type": { + "type": "string", + "enum": [ + "DOI", + "URL", + "URN", + "ARK", + "arXiv", + "bibcode", + "EAN13", + "EISSN", + "Handle", + "IGSN", + "ISBN", + "ISTC", + "LISSN", + "LSID", + "PMID", + "PURL", + "UPC", + "w3id" + ], + "example": "DOI" + }, + "relation": { + "type": "string", + "enum": [ + "IsCitedBy", + "Cites", + "IsSupplementTo", + "IsSupplementedBy", + "IsContinuedBy", + "Continues", + "IsDescribedBy", + "Describes", + "HasMetadata", + "IsMetadataFor", + "HasVersion", + "IsVersionOf", + "IsNewVersionOf", + "IsPreviousVersionOf", + "IsPartOf", + "HasPart", + "IsPublishedIn", + "IsReferencedBy", + "References", + "IsDocumentedBy", + "Documents", + "IsCompiledBy", + "Compiles", + "IsVariantFormOf", + "IsOriginalFormOf", + "IsIdenticalTo", + "IsReviewedBy", + "Reviews", + "IsDerivedFrom", + "IsSourceOf", + "IsRequiredBy", + "Requires", + "IsObsoletedBy", + "Obsoletes" + ], + "example": "Cites" + } + }, + "required": [ + "id", + "relation", + "type", + "value" + ] + }, + "CreatorDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "e41f94a6-2b94-4a12-ac0e-678684e1c070" + }, + "firstname": { + "type": "string", + "example": "Josiah" + }, + "lastname": { + "type": "string", + "example": "Carberry" + }, + "affiliation": { + "type": "string", + "example": "Brown University" + }, + "creator_name": { + "type": "string", + "example": "Carberry, Josiah" + }, + "name_type": { + "type": "string", + "enum": [ + "Personal", + "Organizational" + ], + "example": "Personal" + }, + "name_identifier": { + "type": "string", + "example": "0000-0002-1825-0097" + }, + "name_identifier_scheme": { + "type": "string", + "enum": [ + "ORCID", + "ROR", + "ISNI", + "GRID" + ], + "example": "ORCID" + }, + "name_identifier_scheme_uri": { + "type": "string", + "example": "https://orcid.org/" + }, + "affiliation_identifier": { + "type": "string", + "example": "https://ror.org/05gq02987" + }, + "affiliation_identifier_scheme": { + "type": "string", + "enum": [ + "ROR", + "GRID", + "ISNI" + ], + "example": "ROR" + }, + "affiliation_identifier_scheme_uri": { + "type": "string", + "example": "https://ror.org/" + } + }, + "required": [ + "creator_name", + "id" + ] + }, + "IdentifierDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "b97cd56b-66ca-4354-9e6c-f47210cfaaec" + }, + "links": { + "$ref": "#/components/schemas/LinksDto" + }, + "type": { + "type": "string", + "enum": [ + "database", + "subset", + "table", + "view" + ], + "example": "database" + }, + "titles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierTitleDto" + } + }, + "descriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierDescriptionDto" + } + }, + "funders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierFunderDto" + } + }, + "query": { + "type": "string", + "example": "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location` = \"09:STEF\"" + }, + "execution": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + }, + "doi": { + "type": "string", + "example": "10.1038/nphys1170" + }, + "publisher": { + "type": "string", + "example": "TU Wien" + }, + "owner": { + "$ref": "#/components/schemas/UserBriefDto" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ] + }, + "licenses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LicenseDto" + } + }, + "creators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreatorDto" + } + }, + "status": { + "type": "string", + "enum": [ + "draft", + "published" + ], + "example": "draft" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "query_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "view_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "query_normalized": { + "type": "string", + "example": "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location` = \"09:STEF\"" + }, + "related_identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RelatedIdentifierDto" + } + }, + "query_hash": { + "type": "string", + "description": "query hash in sha512" + }, + "result_hash": { + "type": "string", + "example": "34fe82cda2c53f13f8d90cfd7a3469e3a939ff311add50dce30d9136397bf8e5" + }, + "result_number": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "publication_day": { + "type": "integer", + "format": "int32", + "example": 15 + }, + "publication_month": { + "type": "integer", + "format": "int32", + "example": 12 + }, + "publication_year": { + "type": "integer", + "format": "int32", + "example": 2022 + } + }, + "required": [ + "creators", + "database_id", + "descriptions", + "funders", + "id", + "language", + "licenses", + "links", + "owner", + "publication_year", + "publisher", + "query", + "query_hash", + "query_normalized", + "status", + "titles", + "type" + ] + }, + "IdentifierFunderDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "39693413-e0ce-46da-ad5e-029c0556d439" + }, + "funder_name": { + "type": "string", + "example": "European Commission" + }, + "funder_identifier": { + "type": "string", + "example": "http://doi.org/10.13039/501100000780" + }, + "funder_identifier_type": { + "type": "string", + "enum": [ + "Crossref Funder ID", + "ROR", + "GND", + "ISNI", + "Other" + ], + "example": "Crossref Funder ID" + }, + "scheme_uri": { + "type": "string", + "example": "http://doi.org/" + }, + "award_number": { + "type": "string", + "example": 824087 + }, + "award_title": { + "type": "string", + "example": "EOSC-Life" + } + }, + "required": [ + "funder_name", + "id" + ] + }, + "LinksDto": { + "type": "object", + "properties": { + "self": { + "type": "string", + "example": "http://example.com/api/" + }, + "data": { + "type": "string", + "example": "http://example.com" + }, + "self_html": { + "type": "string", + "example": "http://example.com" + }, + "dashboard_html": { + "type": "string", + "example": "http://example.com/d/defi2baxqawaod" + } + }, + "required": [ + "self", + "self_html" + ] + }, + "RelatedIdentifierDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "ce9d11f0-60a2-448d-a3e4-44719a443e8a" + }, + "value": { + "type": "string", + "example": "10.70124/dc4zh-9ce78" + }, + "type": { + "type": "string", + "enum": [ + "DOI", + "URL", + "URN", + "ARK", + "arXiv", + "bibcode", + "EAN13", + "EISSN", + "Handle", + "IGSN", + "ISBN", + "ISTC", + "LISSN", + "LSID", + "PMID", + "PURL", + "UPC", + "w3id" + ], + "example": "DOI" + }, + "relation": { + "type": "string", + "enum": [ + "IsCitedBy", + "Cites", + "IsSupplementTo", + "IsSupplementedBy", + "IsContinuedBy", + "Continues", + "IsDescribedBy", + "Describes", + "HasMetadata", + "IsMetadataFor", + "HasVersion", + "IsVersionOf", + "IsNewVersionOf", + "IsPreviousVersionOf", + "IsPartOf", + "HasPart", + "IsPublishedIn", + "IsReferencedBy", + "References", + "IsDocumentedBy", + "Documents", + "IsCompiledBy", + "Compiles", + "IsVariantFormOf", + "IsOriginalFormOf", + "IsIdenticalTo", + "IsReviewedBy", + "Reviews", + "IsDerivedFrom", + "IsSourceOf", + "IsRequiredBy", + "Requires", + "IsObsoletedBy", + "Obsoletes" + ], + "example": "Cites" + } + }, + "required": [ + "id", + "relation", + "type", + "value" + ] + }, + "DatabaseModifyVisibilityDto": { + "type": "object", + "properties": { + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + }, + "is_dashboard_enabled": { + "type": "boolean", + "example": true + } + }, + "required": [ + "is_dashboard_enabled", + "is_public", + "is_schema_public" + ] + }, + "ViewUpdateDto": { + "type": "object", + "properties": { + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + } + }, + "required": [ + "is_public", + "is_schema_public" + ] + }, + "ViewBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "787439d0-e85e-400c-a7e6-996a023bfad9" + }, + "name": { + "type": "string", + "example": "Air Quality" + }, + "query": { + "type": "string", + "example": "SELECT `id` FROM `air_quality` ORDER BY `value` DESC" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "2b5b2b03-fdd0-40d6-afe0-e5d02fd839e4" + }, + "internal_name": { + "type": "string", + "example": "air_quality" + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + }, + "initial_view": { + "type": "boolean", + "description": "True if it is the default view for the database", + "example": true + }, + "query_hash": { + "type": "string", + "example": "7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916" + }, + "owned_by": { + "type": "string", + "format": "uuid", + "example": "ac750fcf-ea02-4fce-85ac-d73857e18b35" + } + }, + "required": [ + "database_id", + "id", + "internal_name", + "name", + "query", + "query_hash" + ] + }, + "TableUpdateDto": { + "type": "object", + "properties": { + "description": { + "type": "string", + "example": "Air Quality in Austria", + "maxLength": 180, + "minLength": 0 + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + } + }, + "required": [ + "is_public", + "is_schema_public" + ] + }, + "TableBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "41ed10e0-687b-4e18-8521-810f5cffbce1" + }, + "name": { + "type": "string", + "example": "Air Quality" + }, + "description": { + "type": "string", + "example": "Air Quality in Austria" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "a8fec026-dfaf-4b1d-8f6c-f01720d91705" + }, + "internal_name": { + "type": "string", + "example": "air_quality" + }, + "is_versioned": { + "type": "boolean", + "example": true + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + }, + "owned_by": { + "type": "string", + "format": "uuid", + "example": "78337b80-5699-45db-8111-cec86439ab6b" + } + }, + "required": [ + "database_id", + "id", + "internal_name", + "is_public", + "is_schema_public", + "is_versioned", + "name", + "owned_by" + ] + }, + "ColumnSemanticsUpdateDto": { + "type": "object", + "properties": { + "concept_uri": { + "type": "string" + }, + "unit_uri": { + "type": "string" + } + } + }, + "ColumnDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "a453e444-e00d-41ca-902c-11e9c54b39f1" + }, + "name": { + "type": "string", + "example": "Given Name", + "maxLength": 64, + "minLength": 0 + }, + "alias": { + "type": "string", + "example": "firstname" + }, + "size": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "d": { + "type": "integer", + "format": "int64", + "example": 0 + }, + "mean": { + "type": "number", + "example": 45.4 + }, + "median": { + "type": "number", + "example": 51 + }, + "concept": { + "$ref": "#/components/schemas/ConceptBriefDto" + }, + "unit": { + "$ref": "#/components/schemas/UnitBriefDto" + }, + "description": { + "type": "string", + "example": "Column comment", + "maxLength": 2048, + "minLength": 0 + }, + "enums": { + "type": "array", + "description": "enum values, only considered when type = ENUM", + "items": { + "$ref": "#/components/schemas/EnumDto" + } + }, + "sets": { + "type": "array", + "description": "enum values, only considered when type = ENUM", + "items": { + "$ref": "#/components/schemas/SetDto" + } + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "911f9052-c58c-4e1c-b3f2-66af2107be16" + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": "bfffa915-a547-4466-9c65-ddc0d38fdb08" + }, + "ord": { + "type": "integer", + "format": "int32", + "example": 0 + }, + "internal_name": { + "type": "string", + "example": "given_name", + "maxLength": 64, + "minLength": 0 + }, + "index_length": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "length": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "type": { + "type": "string", + "enum": [ + "char", + "varchar", + "binary", + "varbinary", + "tinyblob", + "tinytext", + "text", + "blob", + "mediumtext", + "mediumblob", + "longtext", + "longblob", + "enum", + "set", + "serial", + "bit", + "tinyint", + "bool", + "smallint", + "mediumint", + "int", + "bigint", + "float", + "double", + "decimal", + "date", + "datetime", + "timestamp", + "time", + "year" + ], + "example": "varchar" + }, + "data_length": { + "type": "integer", + "format": "int64", + "example": 34300 + }, + "max_data_length": { + "type": "integer", + "format": "int64", + "example": 34300 + }, + "num_rows": { + "type": "integer", + "format": "int64", + "example": 32 + }, + "val_min": { + "type": "number", + "example": 0 + }, + "val_max": { + "type": "number", + "example": 100 + }, + "std_dev": { + "type": "number", + "example": 5.32 + }, + "is_null_allowed": { + "type": "boolean", + "example": false + } + }, + "required": [ + "database_id", + "id", + "internal_name", + "is_null_allowed", + "name", + "ord", + "table_id", + "type" + ] + }, + "ConceptBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "8cabc011-4bdf-44d4-9d33-b2648e2ddbf1" + }, + "uri": { + "type": "string", + "example": "http://www.wikidata.org/entity/Q202444" + }, + "name": { + "type": "string", + "example": "given name" + }, + "description": { + "type": "string", + "example": "name typically used to differentiate people from the same family, clan, or other social group who have a common last name" + } + }, + "required": [ + "id", + "uri" + ] + }, + "EnumDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "5343bb3d-14d3-4eb7-a86f-b8fc553cb315" + }, + "value": { + "type": "string", + "example": 3 + } + }, + "required": [ + "id", + "value" + ] + }, + "SetDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "7eb4eded-bacc-4a91-84db-a9ae6ddafda7" + }, + "value": { + "type": "string", + "example": 3 + } + }, + "required": [ + "id", + "value" + ] + }, + "UnitBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "ba1935e8-6817-488f-af0a-f54389af9000" + }, + "uri": { + "type": "string", + "example": "http://www.wikidata.org/entity/Q1422583" + }, + "name": { + "type": "string", + "example": "importance" + }, + "description": { + "type": "string", + "example": "subjective magnitude of value, meaning, or purpose" + } + }, + "required": [ + "id", + "uri" + ] + }, + "DatabaseTransferDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "id" + ] + }, + "DatabaseModifyImageDto": { + "type": "object", + "properties": { + "key": { + "type": "string" + } + } + }, + "DatabaseModifyDashboardDto": { + "type": "object", + "properties": { + "uid": { + "type": "string" + } + }, + "required": [ + "uid" + ] + }, + "CreateAccessDto": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "read", + "write_own", + "write_all" + ], + "example": "read" + } + }, + "required": [ + "type" + ] + }, + "OntologyCreateDto": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "example": "Ontology URI" + }, + "prefix": { + "type": "string", + "example": "Ontology prefix" + }, + "sparql_endpoint": { + "type": "string", + "example": "Ontology SPARQL endpoint" + } + }, + "required": [ + "prefix", + "uri" + ] + }, + "BannerMessageCreateDto": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "error", + "warning", + "info" + ] + }, + "message": { + "type": "string", + "example": "Maintenance starts on 8am on Monday" + }, + "link": { + "type": "string", + "example": "https://example.com" + }, + "link_text": { + "type": "string", + "example": "More" + }, + "display_start": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + }, + "display_end": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + } + }, + "required": [ + "message", + "type" + ] + }, + "ImageCreateDto": { + "type": "object", + "properties": { + "registry": { + "type": "string", + "example": "docker.io/library" + }, + "name": { + "type": "string", + "example": "mariadb" + }, + "version": { + "type": "string" + }, + "dialect": { + "type": "string" + }, + "is_default": { + "type": "boolean", + "example": false + }, + "driver_class": { + "type": "string" + }, + "jdbc_method": { + "type": "string" + }, + "default_port": { + "type": "integer", + "format": "int32", + "maximum": 65535, + "minimum": 1024 + } + }, + "required": [ + "default_port", + "dialect", + "driver_class", + "is_default", + "jdbc_method", + "name", + "registry", + "version" + ] + }, + "CreateIdentifierDto": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "database", + "subset", + "table", + "view" + ], + "example": "database" + }, + "doi": { + "type": "string", + "example": "10.1111/11111111" + }, + "titles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveIdentifierTitleDto" + } + }, + "descriptions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveIdentifierDescriptionDto" + } + }, + "funders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveIdentifierFunderDto" + } + }, + "licenses": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LicenseDto" + } + }, + "publisher": { + "type": "string", + "example": "TU Wien" + }, + "language": { + "type": "string", + "enum": [ + "ab", + "aa", + "af", + "ak", + "sq", + "am", + "ar", + "an", + "hy", + "as", + "av", + "ae", + "ay", + "az", + "bm", + "ba", + "eu", + "be", + "bn", + "bh", + "bi", + "bs", + "br", + "bg", + "my", + "ca", + "km", + "ch", + "ce", + "ny", + "zh", + "cu", + "cv", + "kw", + "co", + "cr", + "hr", + "cs", + "da", + "dv", + "nl", + "dz", + "en", + "eo", + "et", + "ee", + "fo", + "fj", + "fi", + "fr", + "ff", + "gd", + "gl", + "lg", + "ka", + "de", + "ki", + "el", + "kl", + "gn", + "gu", + "ht", + "ha", + "he", + "hz", + "hi", + "ho", + "hu", + "is", + "io", + "ig", + "id", + "ia", + "ie", + "iu", + "ik", + "ga", + "it", + "ja", + "jv", + "kn", + "kr", + "ks", + "kk", + "rw", + "kv", + "kg", + "ko", + "kj", + "ku", + "ky", + "lo", + "la", + "lv", + "lb", + "li", + "ln", + "lt", + "lu", + "mk", + "mg", + "ms", + "ml", + "mt", + "gv", + "mi", + "mr", + "mh", + "ro", + "mn", + "na", + "nv", + "nd", + "ng", + "ne", + "se", + "no", + "nb", + "nn", + "ii", + "oc", + "oj", + "or", + "om", + "os", + "pi", + "pa", + "ps", + "fa", + "pl", + "pt", + "qu", + "rm", + "rn", + "ru", + "sm", + "sg", + "sa", + "sc", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "st", + "nr", + "es", + "su", + "sw", + "ss", + "sv", + "tl", + "ty", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "ti", + "to", + "ts", + "tn", + "tr", + "tk", + "tw", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "cy", + "fy", + "wo", + "xh", + "yi", + "yo", + "za", + "zu" + ] + }, + "creators": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveIdentifierCreatorDto" + } + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "d002e8d5-8db4-4ff7-ab3a-bc3f52d9ec44" + }, + "query_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "view_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": null + }, + "publication_day": { + "type": "integer", + "format": "int32", + "example": 15 + }, + "publication_month": { + "type": "integer", + "format": "int32", + "example": 12 + }, + "publication_year": { + "type": "integer", + "format": "int32", + "example": 2022 + }, + "related_identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SaveRelatedIdentifierDto" + } + } + }, + "required": [ + "creators", + "database_id", + "publication_year", + "publisher", + "titles", + "type" + ] + }, + "CreateDatabaseDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Air Quality" + }, + "container_id": { + "type": "string", + "format": "uuid", + "example": "0888e108-d521-46e2-9d3e-82099185305b" + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + } + }, + "required": [ + "container_id", + "is_public", + "is_schema_public", + "name" + ] + }, + "CreateViewDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Air Quality", + "maxLength": 63, + "minLength": 1 + }, + "query": { + "$ref": "#/components/schemas/SubsetDto" + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + } + }, + "required": [ + "is_public", + "is_schema_public", + "name", + "query" + ] + }, + "FilterDto": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "where", + "or", + "and" + ], + "example": "where" + }, + "value": { + "type": "string", + "example": 1 + }, + "column_id": { + "type": "string", + "format": "uuid", + "example": "14128033-54b5-4818-a489-21b0dded86e2" + }, + "operator_id": { + "type": "string", + "format": "uuid", + "example": "67c5b54d-2eb0-4f42-8dc1-a504562e9f32" + } + }, + "required": [ + "column_id", + "operator_id", + "type" + ] + }, + "OrderDto": { + "type": "object", + "properties": { + "direction": { + "type": "string", + "enum": [ + "asc", + "desc" + ], + "example": "asc" + }, + "column_id": { + "type": "string", + "format": "uuid", + "example": "e891ba86-0258-41a6-a8d9-ff58bc10b618" + } + }, + "required": [ + "column_id" + ] + }, + "SubsetDto": { + "type": "object", + "properties": { + "columns": { + "type": "array", + "example": [ + "e891ba86-0258-41a6-a8d9-ff58bc10b618" + ], + "items": { + "type": "string", + "format": "uuid" + } + }, + "filter": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FilterDto" + } + }, + "order": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrderDto" + } + }, + "datasource_id": { + "type": "string", + "format": "uuid", + "example": "f7df2a7d-4ade-4c78-97b0-7c744d0893c7" + }, + "datasource_type": { + "type": "string", + "enum": [ + "table", + "view" + ] + } + }, + "required": [ + "columns", + "datasource_id", + "datasource_type" + ] + }, + "CreateForeignKeyDto": { + "type": "object", + "properties": { + "columns": { + "type": "array", + "example": [ + "id" + ], + "items": { + "type": "string" + } + }, + "referenced_table": { + "type": "string", + "example": "sensor" + }, + "referenced_columns": { + "type": "array", + "example": [ + "other_id" + ], + "items": { + "type": "string" + } + }, + "on_update": { + "type": "string", + "enum": [ + "restrict", + "cascade", + "set_null", + "no_action", + "set_default" + ], + "example": "cascade" + }, + "on_delete": { + "type": "string", + "enum": [ + "restrict", + "cascade", + "set_null", + "no_action", + "set_default" + ], + "example": "cascade" + } + }, + "required": [ + "columns", + "referenced_columns", + "referenced_table" + ] + }, + "CreateTableColumnDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Date" + }, + "type": { + "type": "string", + "enum": [ + "char", + "varchar", + "binary", + "varbinary", + "tinyblob", + "tinytext", + "text", + "blob", + "mediumtext", + "mediumblob", + "longtext", + "longblob", + "enum", + "set", + "serial", + "bit", + "tinyint", + "bool", + "smallint", + "mediumint", + "int", + "bigint", + "float", + "double", + "decimal", + "date", + "datetime", + "timestamp", + "time", + "year" + ], + "example": "varchar" + }, + "size": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "d": { + "type": "integer", + "format": "int64", + "example": 0 + }, + "description": { + "type": "string", + "example": "Formatted as YYYY-MM-dd", + "maxLength": 2048, + "minLength": 0 + }, + "enums": { + "type": "array", + "description": "enum values, only considered when type = ENUM", + "items": { + "type": "string" + } + }, + "sets": { + "type": "array", + "description": "set values, only considered when type = SET", + "items": { + "type": "string" + } + }, + "index_length": { + "type": "integer", + "format": "int64" + }, + "null_allowed": { + "type": "boolean", + "example": true + }, + "concept_uri": { + "type": "string" + }, + "unit_uri": { + "type": "string" + } + }, + "required": [ + "name", + "null_allowed", + "type" + ] + }, + "CreateTableConstraintsDto": { + "type": "object", + "properties": { + "uniques": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "checks": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "foreign_keys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreateForeignKeyDto" + } + }, + "primary_key": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + } + }, + "required": [ + "checks", + "foreign_keys", + "primary_key", + "uniques" + ] + }, + "CreateTableDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Air Quality", + "maxLength": 64, + "minLength": 1 + }, + "description": { + "type": "string", + "example": "Air Quality in Austria", + "maxLength": 180, + "minLength": 0 + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreateTableColumnDto" + } + }, + "constraints": { + "$ref": "#/components/schemas/CreateTableConstraintsDto" + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + } + }, + "required": [ + "columns", + "constraints", + "is_public", + "is_schema_public", + "name" + ] + }, + "CreateContainerDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Air Quality" + }, + "host": { + "type": "string", + "description": "Hostname of container", + "example": "data-db2" + }, + "port": { + "type": "integer", + "format": "int32", + "description": "Port of container", + "example": 3306 + }, + "quota": { + "type": "integer", + "format": "int64", + "example": 50 + }, + "image_id": { + "type": "string", + "format": "uuid", + "description": "Image ID", + "example": "2360f3c4-85e0-4fac-a7c6-73b296b9dde2" + }, + "ui_host": { + "type": "string", + "example": "example.com" + }, + "ui_port": { + "type": "integer", + "format": "int32", + "example": 3306 + }, + "privileged_username": { + "type": "string", + "description": "Username of privileged user", + "example": "root" + }, + "privileged_password": { + "type": "string", + "description": "Password of privileged user", + "example": "dbrepo" + } + }, + "required": [ + "host", + "image_id", + "name", + "privileged_password", + "privileged_username", + "quota" + ] + }, + "ContainerDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "7ddb7e87-b965-43a2-9a24-4fa406d998f4" + }, + "name": { + "type": "string", + "example": "Air Quality" + }, + "image": { + "$ref": "#/components/schemas/ImageDto" + }, + "quota": { + "type": "integer", + "format": "int64", + "example": 50 + }, + "count": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { + "type": "string", + "example": "username" + }, + "password": { + "type": "string", + "example": "p4ssw0rd" + }, + "last_retrieved": { + "type": "string", + "format": "date-time", + "example": "2025-01-23T12:09:01" + }, + "internal_name": { + "type": "string", + "example": "air_quality" + } + }, + "required": [ + "count", + "id", + "image", + "internal_name", + "name" + ] + }, + "ColumnBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "a453e444-e00d-41ca-902c-11e9c54b39f1" + }, + "name": { + "type": "string", + "example": "Given Name", + "maxLength": 64, + "minLength": 0 + }, + "alias": { + "type": "string", + "example": "firstname" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "911f9052-c58c-4e1c-b3f2-66af2107be16" + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": "bfffa915-a547-4466-9c65-ddc0d38fdb08" + }, + "internal_name": { + "type": "string", + "example": "given_name", + "maxLength": 64, + "minLength": 0 + }, + "type": { + "type": "string", + "enum": [ + "char", + "varchar", + "binary", + "varbinary", + "tinyblob", + "tinytext", + "text", + "blob", + "mediumtext", + "mediumblob", + "longtext", + "longblob", + "enum", + "set", + "serial", + "bit", + "tinyint", + "bool", + "smallint", + "mediumint", + "int", + "bigint", + "float", + "double", + "decimal", + "date", + "datetime", + "timestamp", + "time", + "year" + ], + "example": "varchar" + } + }, + "required": [ + "database_id", + "id", + "internal_name", + "name", + "table_id", + "type" + ] + }, + "UnitDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "ba1935e8-6817-488f-af0a-f54389af9000" + }, + "uri": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnBriefDto" + } + } + }, + "required": [ + "columns", + "id", + "uri" + ] + }, + "OntologyBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "7c491e40-082a-47b8-b82c-51d03c520466" + }, + "uri": { + "type": "string", + "example": "http://www.wikidata.org/" + }, + "prefix": { + "type": "string", + "example": "wd" + }, + "sparql": { + "type": "boolean", + "example": true + }, + "rdf": { + "type": "boolean", + "example": false + }, + "uri_pattern": { + "type": "string", + "example": "http://www.wikidata.org/entity/.*" + } + }, + "required": [ + "id", + "prefix", + "rdf", + "sparql", + "uri" + ] + }, + "EntityDto": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "example": "https://www.wikidata.org/entity/Q1686799" + }, + "label": { + "type": "string", + "example": "Apache Jena" + }, + "description": { + "type": "string", + "example": "open source semantic web framework for Java" + } + }, + "required": [ + "label", + "uri" + ] + }, + "OaiListIdentifiersParameters": { + "type": "object", + "properties": { + "metadataPrefix": { + "type": "string" + }, + "from": { + "type": "string" + }, + "until": { + "type": "string" + }, + "set": { + "type": "string" + }, + "resumptionToken": { + "type": "string" + }, + "parametersString": { + "type": "string" + }, + "fromDate": { + "type": "string", + "format": "date-time" + }, + "untilDate": { + "type": "string", + "format": "date-time" + } + } + }, + "BannerMessageDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "ae3f795b-a3da-4ebe-bdc4-21a8ce631e6f" + }, + "type": { + "type": "string", + "enum": [ + "error", + "warning", + "info" + ], + "example": "WARNING" + }, + "message": { + "type": "string", + "example": "Maintenance starts on 8am on Monday" + }, + "link": { + "type": "string", + "example": "https://example.com" + }, + "link_text": { + "type": "string", + "example": "More" + }, + "display_start": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + }, + "display_end": { + "type": "string", + "format": "date-time", + "example": "2021-03-12T15:26:21Z" + } + }, + "required": [ + "id", + "message", + "type" + ] + }, + "ImageBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "816f55d5-1098-4f60-a4af-c8121c04dcce" + }, + "name": { + "type": "string", + "example": "mariadb" + }, + "version": { + "type": "string", + "example": 10.5 + }, + "default": { + "type": "boolean", + "example": false + } + }, + "required": [ + "default", + "id", + "name", + "version" + ] + }, + "LdCreatorDto": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "sameAs": { + "type": "string" + }, + "givenName": { + "type": "string" + }, + "familyName": { + "type": "string" + }, + "@type": { + "type": "string" + } + }, + "required": [ + "@type", + "name" + ] + }, + "LdDatasetDto": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "url": { + "type": "string" + }, + "identifier": { + "type": "array", + "items": { + "type": "string" + } + }, + "license": { + "type": "string" + }, + "creator": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LdCreatorDto" + } + }, + "citation": { + "type": "string" + }, + "hasPart": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LdDatasetDto" + } + }, + "temporalCoverage": { + "type": "string" + }, + "version": { + "type": "string", + "format": "date-time" + }, + "@context": { + "type": "string" + }, + "@type": { + "type": "string" + } + }, + "required": [ + "@context", + "@type", + "citation", + "creator", + "description", + "hasPart", + "identifier", + "name", + "temporalCoverage", + "url", + "version" + ] + }, + "ViewColumnDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "6aec3a91-2e0b-4e92-a16a-9c3c5e892da1" + }, + "name": { + "type": "string", + "example": "Given Name", + "maxLength": 64, + "minLength": 0 + }, + "size": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "d": { + "type": "integer", + "format": "int64", + "example": 0 + }, + "description": { + "type": "string", + "example": "Column comment", + "maxLength": 2048, + "minLength": 0 + }, + "enums": { + "type": "array", + "description": "enum values, only considered when type = ENUM", + "items": { + "$ref": "#/components/schemas/EnumDto" + } + }, + "sets": { + "type": "array", + "description": "enum values, only considered when type = ENUM", + "items": { + "$ref": "#/components/schemas/SetDto" + } + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "2b5b2b03-fdd0-40d6-afe0-e5d02fd839e4" + }, + "ord": { + "type": "integer", + "format": "int32", + "example": 0 + }, + "internal_name": { + "type": "string", + "example": "given_name", + "maxLength": 64, + "minLength": 0 + }, + "index_length": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "length": { + "type": "integer", + "format": "int64", + "example": 255 + }, + "type": { + "type": "string", + "enum": [ + "char", + "varchar", + "binary", + "varbinary", + "tinyblob", + "tinytext", + "text", + "blob", + "mediumtext", + "mediumblob", + "longtext", + "longblob", + "enum", + "set", + "serial", + "bit", + "tinyint", + "bool", + "smallint", + "mediumint", + "int", + "bigint", + "float", + "double", + "decimal", + "date", + "datetime", + "timestamp", + "time", + "year" + ], + "example": "varchar" + }, + "is_null_allowed": { + "type": "boolean", + "example": false + } + }, + "required": [ + "database_id", + "id", + "internal_name", + "is_null_allowed", + "name", + "ord", + "type" + ] + }, + "ViewDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "787439d0-e85e-400c-a7e6-996a023bfad9" + }, + "name": { + "type": "string", + "example": "Air Quality" + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierDto" + } + }, + "query": { + "type": "string", + "example": "SELECT `id` FROM `air_quality` ORDER BY `value` DESC" + }, + "owner": { + "$ref": "#/components/schemas/UserBriefDto" + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ViewColumnDto" + } + }, + "created": { + "type": "string", + "format": "date-time", + "example": "2022-01-01 08:00:00.000" + }, + "last_retrieved": { + "type": "string", + "format": "date-time", + "example": "2025-01-23T12:09:01" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "fc29f89c-86a8-4020-9e36-4d954736c6cc" + }, + "internal_name": { + "type": "string", + "example": "air_quality" + }, + "is_public": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + }, + "initial_view": { + "type": "boolean", + "description": "True if it is the default view for the database", + "example": true + }, + "query_hash": { + "type": "string", + "example": "7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916" + } + }, + "required": [ + "columns", + "created", + "database_id", + "id", + "identifiers", + "internal_name", + "name", + "owner", + "query", + "query_hash" + ] + }, + "ConstraintsDto": { + "type": "object", + "properties": { + "uniques": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UniqueDto" + } + }, + "checks": { + "type": "array", + "example": [ + "value > 1" + ], + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "foreign_keys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ForeignKeyDto" + } + }, + "primary_key": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PrimaryKeyDto" + }, + "uniqueItems": true + } + } + }, + "ForeignKeyBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "f2b740ec-0b13-4d07-88a9-529d354bba6a" + } + } + }, + "ForeignKeyDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "f2b740ec-0b13-4d07-88a9-529d354bba6a" + }, + "name": { + "type": "string", + "example": "fk_name" + }, + "references": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ForeignKeyReferenceDto" + } + }, + "table": { + "$ref": "#/components/schemas/TableBriefDto" + }, + "referenced_table": { + "$ref": "#/components/schemas/TableBriefDto" + }, + "on_update": { + "type": "string", + "enum": [ + "restrict", + "cascade", + "set_null", + "no_action", + "set_default" + ], + "example": "restrict" + }, + "on_delete": { + "type": "string", + "enum": [ + "restrict", + "cascade", + "set_null", + "no_action", + "set_default" + ], + "example": "restrict" + } + }, + "required": [ + "name", + "referenced_table", + "references", + "table" + ] + }, + "ForeignKeyReferenceDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "f2b740ec-0b13-4d07-88a9-529d354bba6a" + }, + "column": { + "$ref": "#/components/schemas/ColumnBriefDto" + }, + "foreign_key": { + "$ref": "#/components/schemas/ForeignKeyBriefDto" + }, + "referenced_column": { + "$ref": "#/components/schemas/ColumnBriefDto" + } + }, + "required": [ + "column", + "foreign_key", + "referenced_column" + ] + }, + "PrimaryKeyDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "d984f9d7-e8a7-4b81-b59a-862db1871f18" + }, + "table": { + "$ref": "#/components/schemas/TableBriefDto" + }, + "column": { + "$ref": "#/components/schemas/ColumnBriefDto" + } + }, + "required": [ + "column", + "table" + ] + }, + "TableDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "d346f844-b84c-490f-9aec-725a2dc8f820" + }, + "name": { + "type": "string", + "example": "Air Quality" + }, + "alias": { + "type": "string", + "example": "a" + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IdentifierDto" + } + }, + "owner": { + "$ref": "#/components/schemas/UserBriefDto" + }, + "description": { + "type": "string", + "example": "Air Quality in Austria", + "maxLength": 2048, + "minLength": 0 + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnDto" + } + }, + "constraints": { + "$ref": "#/components/schemas/ConstraintsDto" + }, + "created": { + "type": "string", + "format": "date-time", + "example": "2022-01-01 08:00:00.000" + }, + "last_retrieved": { + "type": "string", + "format": "date-time", + "example": "2025-01-23T12:09:01" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "fc29f89c-86a8-4020-9e36-4d954736c6cc" + }, + "internal_name": { + "type": "string", + "example": "air_quality" + }, + "is_versioned": { + "type": "boolean", + "example": true + }, + "is_schema_public": { + "type": "boolean", + "example": true + }, + "queue_name": { + "type": "string", + "example": "air_quality" + }, + "queue_type": { + "type": "string", + "example": "quorum" + }, + "routing_key": { + "type": "string", + "example": "dbrepo.1.2" + }, + "is_public": { + "type": "boolean", + "example": true + }, + "num_rows": { + "type": "integer", + "format": "int64", + "example": 5 + }, + "data_length": { + "type": "integer", + "format": "int64", + "description": "in bytes", + "example": 16384 + }, + "max_data_length": { + "type": "integer", + "format": "int64", + "description": "in bytes", + "example": 0 + }, + "avg_row_length": { + "type": "integer", + "format": "int64", + "description": "in bytes", + "example": 3276 + } + }, + "required": [ + "columns", + "constraints", + "created", + "database_id", + "id", + "internal_name", + "is_public", + "is_schema_public", + "is_versioned", + "name", + "owner", + "queue_name", + "routing_key" + ] + }, + "UniqueDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "d984f9d7-e8a7-4b81-b59a-862db1871f13" + }, + "name": { + "type": "string", + "example": "uk_name" + }, + "table": { + "$ref": "#/components/schemas/TableBriefDto" + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnBriefDto" + } + } + }, + "required": [ + "columns", + "id", + "name", + "table" + ] + }, + "TableColumnEntityDto": { + "type": "object", + "properties": { + "uri": { + "type": "string", + "example": "https://www.wikidata.org/entity/Q1686799" + }, + "label": { + "type": "string", + "example": "Apache Jena" + }, + "description": { + "type": "string", + "example": "open source semantic web framework for Java" + }, + "database_id": { + "type": "string", + "format": "uuid", + "example": "475b4107-a64d-4495-a7ef-3cb0dadd4804" + }, + "table_id": { + "type": "string", + "format": "uuid", + "example": "9a9208af-90ea-4382-9a11-0c8f6d89bd1f" + }, + "column_id": { + "type": "string", + "format": "uuid", + "example": "297860e3-3b29-451c-ae8a-a85ed5941018" + } + }, + "required": [ + "column_id", + "database_id", + "table_id", + "uri" + ] + }, + "ContainerBriefDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "7ddb7e87-b965-43a2-9a24-4fa406d998f4" + }, + "hash": { + "type": "string", + "example": "f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50" + }, + "name": { + "type": "string", + "example": "Air Quality" + }, + "image": { + "$ref": "#/components/schemas/ImageBriefDto" + }, + "quota": { + "type": "integer", + "format": "int32", + "example": 50 + }, + "count": { + "type": "integer", + "format": "int32", + "example": 10 + }, + "internal_name": { + "type": "string", + "example": "air-quality" + } + }, + "required": [ + "count", + "hash", + "id", + "image", + "internal_name", + "name", + "quota" + ] + }, + "ConceptDto": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "example": "8cabc011-4bdf-44d4-9d33-b2648e2ddbf1" + }, + "uri": { + "type": "string" + }, + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnBriefDto" + } + } + }, + "required": [ + "columns", + "id", + "uri" + ] + } + }, + "securitySchemes": { + "basicAuth": { + "type": "http", + "scheme": "basic" + }, + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + } +} diff --git a/.docs/.openapi/api-metadata.yaml b/.docs/.openapi/api-metadata.yaml deleted file mode 100644 index 31ac0b72dd2e1280b3447907e4dc8c2579c69133..0000000000000000000000000000000000000000 --- a/.docs/.openapi/api-metadata.yaml +++ /dev/null @@ -1,7097 +0,0 @@ -openapi: 3.1.0 -info: - title: Database Repository Metadata Service API - description: Service that manages the metadata - contact: - name: Prof. Andreas Rauber - email: andreas.rauber@tuwien.ac.at - license: - name: Apache 2.0 - url: https://www.apache.org/licenses/LICENSE-2.0 - version: 1.8.2 -externalDocs: - description: Sourcecode Documentation - url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8.1/system-services-metadata/ -servers: -- url: http://localhost - description: Development instance -- url: https://test.dbrepo.tuwien.ac.at - description: Staging instance -paths: - /api/user/{userId}: - get: - tags: - - user-endpoint - summary: Get user - description: Gets own user information from the metadata database. Requires - authentication. Foreign user information can only be obtained if additional - role `find-foreign-user` is present. Finding information about internal users - results in a 404 error. - operationId: find - parameters: - - name: userId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Found user - content: - application/json: - schema: - $ref: "#/components/schemas/UserDto" - "403": - description: Find user is not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: User was not found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - put: - tags: - - user-endpoint - summary: Update user - description: Updates user with id. Requires role `modify-user-information`. - operationId: modify - parameters: - - name: userId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/UserUpdateDto" - required: true - responses: - "202": - description: Modified user information - content: - application/json: - schema: - $ref: "#/components/schemas/UserDto" - "400": - description: Modify user query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to modify user metadata - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database/user in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to modify user at auth service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - head: - tags: - - user-endpoint - summary: Get user - description: Gets own user information from the metadata database. Requires - authentication. Foreign user information can only be obtained if additional - role `find-foreign-user` is present. Finding information about internal users - results in a 404 error. - operationId: find_1 - parameters: - - name: userId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Found user - content: - application/json: - schema: - $ref: "#/components/schemas/UserDto" - "403": - description: Find user is not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: User was not found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database: - get: - tags: - - database-endpoint - summary: List databases - description: "Lists all databases in the metadata database. Requests with HTTP\ - \ method **GET** return the list of databases, requests with HTTP method **HEAD**\ - \ only the number in the `X-Count` header." - operationId: list - parameters: - - name: internal_name - in: query - required: false - schema: - type: string - responses: - "200": - description: List of databases - headers: - Access-Control-Expose-Headers: - description: Expose `X-Count` custom header - required: true - style: simple - schema: - type: string - X-Count: - description: Number of databases - required: true - style: simple - schema: - type: integer - format: int64 - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/DatabaseBriefDto" - post: - tags: - - database-endpoint - summary: Create database - description: Creates a database in the container with id. Requires roles `create-database`. - operationId: create - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CreateDatabaseDto" - required: true - responses: - "201": - description: Created a new database - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseBriefDto" - "400": - description: Database create query is malformed or image is not supported - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Database create permission is missing or grant permissions - at broker service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to fin container/user/database in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: Query store could not be created - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "423": - description: Database quota exceeded - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - head: - tags: - - database-endpoint - summary: List databases - description: "Lists all databases in the metadata database. Requests with HTTP\ - \ method **GET** return the list of databases, requests with HTTP method **HEAD**\ - \ only the number in the `X-Count` header." - operationId: list_1 - parameters: - - name: internal_name - in: query - required: false - schema: - type: string - responses: - "200": - description: List of databases - headers: - Access-Control-Expose-Headers: - description: Expose `X-Count` custom header - required: true - style: simple - schema: - type: string - X-Count: - description: Number of databases - required: true - style: simple - schema: - type: integer - format: int64 - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/DatabaseBriefDto" - /api/database/{databaseId}/access/{userId}: - get: - tags: - - access-endpoint - summary: Find/Check access - description: "Finds or checks access of a user with given id to a database with\ - \ given id. Requests with HTTP method **GET** return the access object, requests\ - \ with HTTP method **HEAD** only the status. When the user has at least *READ*\ - \ access, the status 200 is returned, 403 otherwise. Requires role `check-database-access`\ - \ or `check-foreign-database-access`." - operationId: find_2 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: userId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Found database access - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseAccessDto" - "403": - description: No access to this database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database not found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - put: - tags: - - access-endpoint - summary: Modify access - description: Modifies access of a user with given id to database with given - id. Requires role `update-database-access`. - operationId: update - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: userId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CreateAccessDto" - required: true - responses: - "202": - description: Modified access - "400": - description: Modify access query or database connection is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Modify access not permitted when no access is granted in the - first place - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database or user not found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Access could not be updated due to connection error in the - data service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Access could not be updated in the data service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - post: - tags: - - access-endpoint - summary: Give access - description: Give a user with given id access to some database with given id. - Requires role `create-database-access`. - operationId: create_1 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: userId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CreateAccessDto" - required: true - responses: - "202": - description: Granting access succeeded - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseAccessDto" - "400": - description: Granting access query or database connection is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Failed giving access - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database or user not found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Access could not be created due to connection error - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Access could not be created in the data service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - delete: - tags: - - access-endpoint - summary: Delete access - description: Delete access of a user with id to a database with id. Requires - role `delete-database-access`. - operationId: revoke - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: userId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Deleted access - "400": - description: Modify access query or database connection is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Revoke of access not permitted as no access was found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "User, database with access was not found" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Access could not be created due to connection error - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Access could not be revoked in the data service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - head: - tags: - - access-endpoint - summary: Find/Check access - description: "Finds or checks access of a user with given id to a database with\ - \ given id. Requests with HTTP method **GET** return the access object, requests\ - \ with HTTP method **HEAD** only the status. When the user has at least *READ*\ - \ access, the status 200 is returned, 403 otherwise. Requires role `check-database-access`\ - \ or `check-foreign-database-access`." - operationId: find_3 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: userId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Found database access - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseAccessDto" - "403": - description: No access to this database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database not found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/ontology/{ontologyId}: - get: - tags: - - ontology-endpoint - summary: Find ontology - description: Finds an ontology with id in the metadata database. - operationId: find_4 - parameters: - - name: ontologyId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Find one ontology - content: - application/json: - schema: - $ref: "#/components/schemas/OntologyDto" - "404": - description: Could not find ontology - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - put: - tags: - - ontology-endpoint - summary: Update ontology - description: Updates an ontology with id. Requires role `update-ontology`. - operationId: update_1 - parameters: - - name: ontologyId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/OntologyModifyDto" - required: true - responses: - "202": - description: Updated ontology successfully - content: - application/json: - schema: - $ref: "#/components/schemas/OntologyDto" - "404": - description: Could not find ontology - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - delete: - tags: - - ontology-endpoint - summary: Delete ontology - description: Deletes an ontology with given id. Requires role `delete-ontology`. - operationId: delete - parameters: - - name: ontologyId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Deleted ontology successfully - content: - application/json: {} - "404": - description: Could not find ontology - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/message/{messageId}: - put: - tags: - - message-endpoint - summary: Update message - description: Updates a message with id. Requires role `update-maintenance-message`. - operationId: update_2 - parameters: - - name: messageId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/BannerMessageUpdateDto" - required: true - responses: - "202": - description: Updated message - content: - application/json: - schema: - $ref: "#/components/schemas/BannerMessageBriefDto" - "404": - description: Could not find message - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - delete: - tags: - - message-endpoint - summary: Delete message - description: Deletes a message with id. Requires role `delete-maintenance-message`. - operationId: delete_1 - parameters: - - name: messageId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Deleted message - content: - application/json: {} - "404": - description: Could not find message - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/image/{imageId}: - get: - tags: - - image-endpoint - summary: Find image - description: Finds a container image in the metadata database. - operationId: findById - parameters: - - name: imageId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Found image - content: - application/json: - schema: - $ref: "#/components/schemas/ImageDto" - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - put: - tags: - - image-endpoint - summary: Update image - description: Updates container image in the metadata database. Requires role - `modify-image`. - operationId: update_3 - parameters: - - name: imageId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ImageChangeDto" - required: true - responses: - "202": - description: Updated image successfully - content: - application/json: - schema: - $ref: "#/components/schemas/ImageDto" - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - delete: - tags: - - image-endpoint - summary: Delete image - description: Deletes a container image in the metadata database. Requires role - `delete-image`. - operationId: delete_2 - parameters: - - name: imageId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Deleted image successfully - "404": - description: Image could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/identifier/{identifierId}: - get: - tags: - - identifier-endpoint - summary: Find identifier - description: Finds an identifier with id. The response format depends on the - HTTP `Accept` header set on the request. - operationId: find_5 - parameters: - - name: identifierId - in: path - required: true - schema: - type: string - format: uuid - - name: Accept - in: header - required: true - schema: - type: string - responses: - "200": - description: Found identifier successfully - content: - application/json: - schema: - $ref: "#/components/schemas/IdentifierDto" - application/ld+json: - schema: - $ref: "#/components/schemas/LdDatasetDto" - text/xml: {} - text/bibliography: {} - text/bibliography; style=apa: {} - text/bibliography; style=ieee: {} - text/bibliography; style=bibtex: {} - "400": - description: "Identifier could not be exported, the requested style is not\ - \ known" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to view identifier - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Identifier could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "406": - description: Failed to find acceptable representation - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: Exported resource was not found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "410": - description: Failed to retrieve from S3 endpoint - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to data service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to find in data service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - put: - tags: - - identifier-endpoint - summary: Save identifier - description: Saves an identifier with id as a draft identifier. Identifiers - can only be created for objects the user has at least *READ* access in the - associated database (requires role `create-identifier`) or for any object - in any database (requires role `create-foreign-identifier`). - operationId: save - parameters: - - name: identifierId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/IdentifierSaveDto" - required: true - responses: - "202": - description: Saved identifier - content: - application/json: - schema: - $ref: "#/components/schemas/IdentifierDto" - "400": - description: Identifier form contains invalid request data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Insufficient access rights or authorities - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Failed to find database, table or view" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - delete: - tags: - - identifier-endpoint - summary: Delete identifier - description: Deletes an identifier with id. Requires role `delete-identifier`. - operationId: delete_3 - parameters: - - name: identifierId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Deleted identifier - "403": - description: Deleting identifier not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Identifier or database could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to delete in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/identifier/{identifierId}/publish: - put: - tags: - - identifier-endpoint - summary: Publish identifier - description: Publishes an identifier with id. A published identifier cannot - be changed anymore. Requires role `publish-identifier`. - operationId: publish - parameters: - - name: identifierId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Published identifier - content: - application/json: - schema: - $ref: "#/components/schemas/IdentifierDto" - "400": - description: Identifier form contains invalid request data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Insufficient access rights or authorities - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Failed to find database, table or view" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/visibility: - put: - tags: - - database-endpoint - summary: Update database visibility - description: Updates the database with id on the visibility. Only the database - owner can perform this operation. Requires role `modify-database-visibility`. - operationId: visibility - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseModifyVisibilityDto" - required: true - responses: - "202": - description: Visibility modified successfully - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseBriefDto" - "400": - description: The visibility payload is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Visibility modification is not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/view/{viewId}: - get: - tags: - - view-endpoint - summary: Get view - description: Gets a view with id in the metadata database. - operationId: find_6 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: viewId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Find view successfully - content: - application/json: - schema: - $ref: "#/components/schemas/ViewDto" - "403": - description: Find view is not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Database, view or user could not be found" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - put: - tags: - - view-endpoint - summary: Update view - description: Updates a view with id. This can only be performed by the view - owner or database owner. Requires role `create-database-view`. - operationId: update_4 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: viewId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ViewUpdateDto" - required: true - responses: - "202": - description: Update view successfully - content: - '*/*': - schema: - $ref: "#/components/schemas/ViewBriefDto" - "400": - description: Update view query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Update not allowed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database or View could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - delete: - tags: - - view-endpoint - summary: Delete view - description: Deletes a view with id. Requires role `delete-database-view`. - operationId: delete_4 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: viewId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Delete view successfully - "400": - description: Delete view query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Deletion not allowed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Database, view or user could not be found" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "423": - description: Delete view resulted in an invalid query statement - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/table/{tableId}: - get: - tags: - - table-endpoint - summary: Find table - description: "Finds a table with id. When a table is hidden (i.e. when `is_public`\ - \ is `false`), then the user needs to have at least read access and the role\ - \ `find-table`. When the `system` role is present, the endpoint responds with\ - \ additional connection metadata in the header." - operationId: findById_1 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Find table successfully - content: - application/json: - schema: - $ref: "#/components/schemas/TableDto" - "403": - description: Access to the database is forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Table, database or container could not be found" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - put: - tags: - - table-endpoint - summary: Update table - description: Updates a table in the database with id. Requires role `update-table`. - operationId: update_5 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/TableUpdateDto" - required: true - responses: - "202": - description: Updated the table - content: - application/json: - schema: - $ref: "#/components/schemas/TableBriefDto" - "400": - description: Update table visibility payload is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Update table visibility not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Table could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - delete: - tags: - - table-endpoint - summary: Delete table - description: Deletes a table with id. Only the owner of a table can perform - this action (requires role `delete-table`) or anyone can delete a table (requires - role `delete-foreign-table`). - operationId: delete_5 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Delete table successfully - "400": - description: Delete table query resulted in an invalid query statement - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Access to the database is forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Table, database or container could not be found" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/table/{tableId}/statistic: - put: - tags: - - table-endpoint - summary: Update statistics - description: "Updates basic statistical properties (min, max, mean, median,\ - \ std.dev) for numerical columns in a table with id. This action can only\ - \ be performed by the table owner. Requires role `update-table-statistic`." - operationId: updateStatistic - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Updated table statistics successfully - "400": - description: Failed to map column statistic to known columns - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not the owner - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database/table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/table/{tableId}/column/{columnId}: - put: - tags: - - table-endpoint - summary: Update semantics - description: Updates column semantics of a table column with id. Only the table - owner with at least *READ* access to the associated database can update the - column semantics (requires role `modify-table-column-semantics`) or foreign - table columns if role `modify-foreign-table-column-semantics`. - operationId: updateColumn - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: columnId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ColumnSemanticsUpdateDto" - required: true - responses: - "202": - description: Updated column semantics successfully - content: - application/json: - schema: - $ref: "#/components/schemas/ColumnDto" - "400": - description: Update semantic concept query is malformed or update unit of - measurement query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Access to the database is forbidden - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find user/table/database/ontology in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/owner: - put: - tags: - - database-endpoint - summary: Update database owner - description: Updates the database with id on the owner. Only the database owner - can perform this operation. Requires role `modify-database-owner`. - operationId: transfer - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseTransferDto" - required: true - responses: - "202": - description: Transfer of ownership was successful - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseBriefDto" - "400": - description: Owner payload is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database or user could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Transfer of ownership is not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/metadata/view: - put: - tags: - - database-endpoint - summary: Update database view schemas - description: Updates the database with id with generated metadata from view - that are not yet known to the database. Only the database owner can perform - this operation. Requires role `find-database`. - operationId: refreshViewMetadata - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Refreshed database views metadata - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseBriefDto" - "403": - description: Refresh view metadata is not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/metadata/table: - put: - tags: - - database-endpoint - summary: Update database table schemas - description: Updates the database with id with generated metadata from tables - that are not yet known to the database. Only the database owner can perform - this operation. Requires role `find-database`. - operationId: refreshTableMetadata - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Refreshed database tables metadata - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseBriefDto" - "400": - description: Failed to parse payload at search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not allowed to refresh table metadata - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/image: - get: - tags: - - database-endpoint - summary: Get database preview image - description: Gets the database with id on the preview image. - operationId: findPreviewImage - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: View of image was successful - content: - '*/*': - schema: - type: string - format: byte - "404": - description: Database or user could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - put: - tags: - - database-endpoint - summary: Update database preview image - description: Updates the database with id on the preview image. Only the database - owner can perform this operation. Requires role `modify-database-image`. - operationId: modifyImage - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseModifyImageDto" - required: true - responses: - "202": - description: Modify of image was successful - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseBriefDto" - "403": - description: Modify of image is not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "410": - description: File was not found in the Storage Service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/dashboard: - put: - tags: - - database-endpoint - summary: Update database dashboard uid - description: Updates the dashboard uid for a database with given id. Only the - database owner can perform this operation. Requires role `system`. - operationId: modifyDashboard - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseModifyDashboardDto" - required: true - responses: - "202": - description: Modify of dashboard uid was successful - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseBriefDto" - "400": - description: Malformed payload - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/ontology: - get: - tags: - - ontology-endpoint - summary: List ontologies - description: Lists all ontologies known to the metadata database. - operationId: findAll - responses: - "200": - description: List ontologies - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/OntologyBriefDto" - post: - tags: - - ontology-endpoint - summary: Create ontology - description: Creates an ontology in the metadata database. Requires role `create-ontology`. - operationId: create_2 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/OntologyCreateDto" - required: true - responses: - "201": - description: Registered ontology successfully - content: - application/json: - schema: - $ref: "#/components/schemas/OntologyDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/message: - get: - tags: - - message-endpoint - summary: List messages - description: "Lists messages known to the metadata database. Messages can be\ - \ filtered be filtered with the optional `active` parameter. If set to *true*,\ - \ only active messages (that is, messages whose end time has not been reached)\ - \ will be returned. Otherwise only inactive messages are returned. If not\ - \ set, active and inactive messages are returned." - operationId: list_2 - parameters: - - name: active - in: query - required: false - schema: - type: boolean - responses: - "200": - description: List messages - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/BannerMessageDto" - post: - tags: - - message-endpoint - summary: Create message - description: Creates a message in the metadata database. Requires role `create-maintenance-message`. - operationId: create_3 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/BannerMessageCreateDto" - required: true - responses: - "201": - description: Created message - content: - application/json: - schema: - $ref: "#/components/schemas/BannerMessageBriefDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/image: - get: - tags: - - image-endpoint - summary: List images - description: Lists all container images known to the metadata database. - operationId: findAll_1 - responses: - "200": - description: List images - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ImageBriefDto" - post: - tags: - - image-endpoint - summary: Create image - description: Creates a container image in the metadata database. Requires role - `create-image`. - operationId: create_4 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ImageCreateDto" - required: true - responses: - "201": - description: Created image - content: - application/json: - schema: - $ref: "#/components/schemas/ImageDto" - "400": - description: Image specification is invalid - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: Image already exists - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/identifier: - get: - tags: - - identifier-endpoint - summary: List identifiers - description: Lists all identifiers known to the metadata database - operationId: findAll_2 - parameters: - - name: type - in: query - required: false - schema: - type: string - enum: - - database - - subset - - table - - view - - name: status - in: query - required: false - schema: - type: string - enum: - - draft - - published - - name: dbid - in: query - required: false - schema: - type: string - format: uuid - - name: qid - in: query - required: false - schema: - type: string - format: uuid - - name: vid - in: query - required: false - schema: - type: string - format: uuid - - name: tid - in: query - required: false - schema: - type: string - format: uuid - - name: Accept - in: header - required: true - schema: - type: string - responses: - "200": - description: Found identifiers successfully - content: - application/json: - schema: - type: array - items: - type: array - items: - $ref: "#/components/schemas/IdentifierBriefDto" - application/ld+json: - schema: - type: array - items: - $ref: "#/components/schemas/LdDatasetDto" - post: - tags: - - identifier-endpoint - summary: Create identifier - description: Create an identifier with id to create a draft identifier. Identifiers - can only be created for objects the user has at least *READ* access in the - associated database (requires role `create-identifier`) or for any object - in any database (requires role `create-foreign-identifier`). - operationId: create_5 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CreateIdentifierDto" - required: true - responses: - "201": - description: Drafted identifier - content: - application/json: - schema: - $ref: "#/components/schemas/IdentifierDto" - "400": - description: Identifier form contains invalid request data - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Insufficient access rights or authorities - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Failed to find database, table or view" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/view: - get: - tags: - - view-endpoint - summary: List views - description: Lists views known to the metadata database. - operationId: findAll_3 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Find views successfully - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ViewBriefDto" - "404": - description: Database or user could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - post: - tags: - - view-endpoint - summary: Create view - description: Creates a view. This can only be performed by the database owner. - Requires role `create-database-view`. - operationId: create_6 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CreateViewDto" - required: true - responses: - "201": - description: Create view successfully - content: - application/json: - schema: - $ref: "#/components/schemas/ViewBriefDto" - "400": - description: Create view query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Credentials missing - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database/user in metadata database. - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: View exists with name - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "423": - description: Create view resulted in an invalid query statement - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/table: - get: - tags: - - table-endpoint - summary: List tables - description: "Lists all tables known to the metadata database. When a database\ - \ has a hidden schema (i.e. when `is_schema_public` is `false`), then the\ - \ user needs to have at least read access and the role `list-tables`." - operationId: list_3 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: List tables - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/TableBriefDto" - "403": - description: List tables not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - post: - tags: - - table-endpoint - summary: Create table - description: Creates a table in the database with id. Requires role `create-table`. - operationId: create_7 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CreateTableDto" - required: true - responses: - "201": - description: Created a new table - content: - application/json: - schema: - $ref: "#/components/schemas/TableBriefDto" - "400": - description: Create table query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Create table not permitted - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: "Database, container or user could not be found" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: Create table conflicts with existing table name - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "502": - description: Connection to search service failed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "503": - description: Failed to save in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/container: - get: - tags: - - container-endpoint - summary: List containers - description: List all containers in the metadata database. - operationId: findAll_4 - parameters: - - name: limit - in: query - required: false - schema: - type: integer - format: int32 - responses: - "200": - description: List containers - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ContainerBriefDto" - post: - tags: - - container-endpoint - summary: Create container - description: Creates a container in the metadata database. Requires role `create-container`. - operationId: create_8 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/CreateContainerDto" - required: true - responses: - "201": - description: Created a new container - content: - application/json: - schema: - $ref: "#/components/schemas/ContainerDto" - "400": - description: Container payload malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: "Create container not permitted, need authority `create-container`" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Container image or user could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "409": - description: Container name already exists - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/user: - get: - tags: - - user-endpoint - summary: List users - description: "Lists users known to the metadata database. Internal users are\ - \ omitted from the result list. If the optional query parameter `username`\ - \ is present, the result list can be filtered by matching this exact username." - operationId: findAll_5 - parameters: - - name: username - in: query - required: false - schema: - type: string - responses: - "200": - description: List users - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/UserBriefDto" - /api/unit: - get: - tags: - - unit-endpoint - summary: List units - description: Lists units known to the metadata database. - operationId: findAll_6 - responses: - "200": - description: Find all semantic units - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/UnitDto" - /api/ontology/{ontologyId}/entity: - get: - tags: - - ontology-endpoint - summary: Find entities - description: Finds semantic entities by label or uri in an ontology with id. - Requires role `execute-semantic-query`. - operationId: find_7 - parameters: - - name: ontologyId - in: path - required: true - schema: - type: string - format: uuid - - name: label - in: query - required: false - schema: - type: string - - name: uri - in: query - required: false - schema: - type: string - responses: - "200": - description: Found entities - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/EntityDto" - "400": - description: Filter params are invalid - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Could not find ontology - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "417": - description: Generated query or uri is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "422": - description: Ontology does not have rdf or sparql endpoint - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/oai: - get: - tags: - - metadata-endpoint - summary: Get record - operationId: identify - parameters: - - name: verb - in: query - - name: parameters - in: query - required: true - schema: - $ref: "#/components/schemas/OaiListIdentifiersParameters" - responses: - "200": - description: List containers - content: - text/xml: - schema: - type: string - /api/message/message/{messageId}: - get: - tags: - - message-endpoint - summary: Find message - description: Finds a message with id in the metadata database. - operationId: find_8 - parameters: - - name: messageId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Get messages - content: - application/json: - schema: - $ref: "#/components/schemas/BannerMessageDto" - "404": - description: Could not find message - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - /api/license: - get: - tags: - - license-endpoint - summary: List licenses - description: Lists licenses known to the metadata database. - operationId: list_4 - responses: - "200": - description: List of licenses - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/LicenseDto" - /api/identifier/retrieve: - get: - tags: - - identifier-endpoint - summary: Retrieve PID metadata - description: "Retrieves Persistent Identifier (PID) metadata from external endpoints.\ - \ Supported PIDs are: ORCID, ROR, DOI." - operationId: retrieve - parameters: - - name: url - in: query - required: true - schema: - type: string - responses: - "200": - description: Retrieved metadata from identifier - content: - application/json: - schema: - $ref: "#/components/schemas/IdentifierDto" - "404": - description: Failed to find metadata for identifier - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - /api/database/{databaseId}: - get: - tags: - - database-endpoint - summary: Find database - description: Finds a database with id. - operationId: findById_2 - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Database found successfully - headers: - X-Username: - description: The authentication username - style: simple - schema: - type: string - Access-Control-Expose-Headers: - description: Expose custom headers - style: simple - schema: - type: string - X-Password: - description: The authentication password - style: simple - schema: - type: string - content: - application/json: - schema: - $ref: "#/components/schemas/DatabaseBriefDto" - "403": - description: Not allowed to view database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Database could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/table/{tableId}/suggest: - get: - tags: - - table-endpoint - summary: Suggest semantics - description: Suggests semantic concepts for a table. This action can only be - performed by the table owner. Requires role `table-semantic-analyse`. - operationId: analyseTable - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Suggested table semantics successfully - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/EntityDto" - "400": - description: Failed to parse statistic in search service - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "403": - description: Not the table owner. - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database/table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "417": - description: Generated query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "422": - description: Ontology does not have rdf or sparql endpoint - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/database/{databaseId}/table/{tableId}/column/{columnId}/suggest: - get: - tags: - - table-endpoint - summary: Suggest semantics - description: Suggests column semantics. Requires role `table-semantic-analyse`. - operationId: analyseTableColumn - parameters: - - name: databaseId - in: path - required: true - schema: - type: string - format: uuid - - name: tableId - in: path - required: true - schema: - type: string - format: uuid - - name: columnId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Suggested table column semantics successfully - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/TableColumnEntityDto" - "400": - description: Generated query is malformed - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Failed to find database/table in metadata database - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "422": - description: Ontology does not have rdf or sparql endpoint - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/container/{containerId}: - get: - tags: - - container-endpoint - summary: Find container - description: Finds a container in the metadata database. - operationId: findById_3 - parameters: - - name: containerId - in: path - required: true - schema: - type: string - format: uuid - responses: - "200": - description: Found container - content: - application/json: - schema: - $ref: "#/components/schemas/ContainerDto" - "404": - description: Container image could not be found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - delete: - tags: - - container-endpoint - summary: Delete container - description: Deletes a container in the metadata database. Requires role `delete-container`. - operationId: delete_6 - parameters: - - name: containerId - in: path - required: true - schema: - type: string - format: uuid - responses: - "202": - description: Deleted container - "403": - description: "Create container not permitted, need authority `delete-container`" - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - "404": - description: Container not found - content: - application/json: - schema: - $ref: "#/components/schemas/ApiErrorDto" - security: - - bearerAuth: [] - - basicAuth: [] - /api/concept: - get: - tags: - - concept-endpoint - summary: List concepts - description: List all semantic concepts known to the metadata database - operationId: findAll_7 - responses: - "200": - description: List concepts - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ConceptDto" -components: - schemas: - UserAttributesDto: - type: object - properties: - theme: - type: string - example: light - orcid: - type: string - example: https://orcid.org/0000-0002-1825-0097 - affiliation: - type: string - example: Brown University - language: - type: string - example: en - required: - - language - - theme - UserDto: - type: object - properties: - id: - type: string - format: uuid - example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 - name: - type: string - example: Josiah Carberry - username: - type: string - example: username - password: - type: string - example: p4ssw0rd - attributes: - $ref: "#/components/schemas/UserAttributesDto" - last_retrieved: - type: string - format: date-time - example: 2025-01-23T12:09:01 - qualified_name: - type: string - example: Josiah Carberry — @jcarberry - given_name: - type: string - example: Josiah - family_name: - type: string - example: Carberry - required: - - attributes - - id - - password - - username - ApiErrorDto: - type: object - properties: - status: - type: string - enum: - - 100 CONTINUE - - 101 SWITCHING_PROTOCOLS - - 102 PROCESSING - - 103 EARLY_HINTS - - 103 CHECKPOINT - - 200 OK - - 201 CREATED - - 202 ACCEPTED - - 203 NON_AUTHORITATIVE_INFORMATION - - 204 NO_CONTENT - - 205 RESET_CONTENT - - 206 PARTIAL_CONTENT - - 207 MULTI_STATUS - - 208 ALREADY_REPORTED - - 226 IM_USED - - 300 MULTIPLE_CHOICES - - 301 MOVED_PERMANENTLY - - 302 FOUND - - 302 MOVED_TEMPORARILY - - 303 SEE_OTHER - - 304 NOT_MODIFIED - - 305 USE_PROXY - - 307 TEMPORARY_REDIRECT - - 308 PERMANENT_REDIRECT - - 400 BAD_REQUEST - - 401 UNAUTHORIZED - - 402 PAYMENT_REQUIRED - - 403 FORBIDDEN - - 404 NOT_FOUND - - 405 METHOD_NOT_ALLOWED - - 406 NOT_ACCEPTABLE - - 407 PROXY_AUTHENTICATION_REQUIRED - - 408 REQUEST_TIMEOUT - - 409 CONFLICT - - 410 GONE - - 411 LENGTH_REQUIRED - - 412 PRECONDITION_FAILED - - 413 PAYLOAD_TOO_LARGE - - 413 REQUEST_ENTITY_TOO_LARGE - - 414 URI_TOO_LONG - - 414 REQUEST_URI_TOO_LONG - - 415 UNSUPPORTED_MEDIA_TYPE - - 416 REQUESTED_RANGE_NOT_SATISFIABLE - - 417 EXPECTATION_FAILED - - 418 I_AM_A_TEAPOT - - 419 INSUFFICIENT_SPACE_ON_RESOURCE - - 420 METHOD_FAILURE - - 421 DESTINATION_LOCKED - - 422 UNPROCESSABLE_ENTITY - - 423 LOCKED - - 424 FAILED_DEPENDENCY - - 425 TOO_EARLY - - 426 UPGRADE_REQUIRED - - 428 PRECONDITION_REQUIRED - - 429 TOO_MANY_REQUESTS - - 431 REQUEST_HEADER_FIELDS_TOO_LARGE - - 451 UNAVAILABLE_FOR_LEGAL_REASONS - - 500 INTERNAL_SERVER_ERROR - - 501 NOT_IMPLEMENTED - - 502 BAD_GATEWAY - - 503 SERVICE_UNAVAILABLE - - 504 GATEWAY_TIMEOUT - - 505 HTTP_VERSION_NOT_SUPPORTED - - 506 VARIANT_ALSO_NEGOTIATES - - 507 INSUFFICIENT_STORAGE - - 508 LOOP_DETECTED - - 509 BANDWIDTH_LIMIT_EXCEEDED - - 510 NOT_EXTENDED - - 511 NETWORK_AUTHENTICATION_REQUIRED - example: NOT_FOUND - message: - type: string - example: Error message - code: - type: string - example: error.service.code - required: - - code - - message - - status - CreatorBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: e41f94a6-2b94-4a12-ac0e-678684e1c070 - affiliation: - type: string - example: Brown University - creator_name: - type: string - example: "Carberry, Josiah" - name_type: - type: string - enum: - - Personal - - Organizational - example: Personal - name_identifier: - type: string - example: 0000-0002-1825-0097 - name_identifier_scheme: - type: string - enum: - - ORCID - - ROR - - ISNI - - GRID - example: ORCID - affiliation_identifier: - type: string - example: https://ror.org/05gq02987 - affiliation_identifier_scheme: - type: string - enum: - - ROR - - GRID - - ISNI - example: ROR - required: - - creator_name - - id - DatabaseBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: fc29f89c-86a8-4020-9e36-4d954736c6cc - name: - type: string - example: Air Quality - description: - type: string - example: Air Quality - identifiers: - type: array - items: - $ref: "#/components/schemas/IdentifierBriefDto" - contact: - $ref: "#/components/schemas/UserBriefDto" - internal_name: - type: string - example: air_quality - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - owner_id: - type: string - format: uuid - example: 2f45ef7a-7f9b-4667-9156-152c87fe1ca5 - preview_image: - type: string - required: - - contact - - id - - identifiers - - internal_name - - is_public - - is_schema_public - - name - - owner_id - IdentifierBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: b97cd56b-66ca-4354-9e6c-f47210cfaaec - type: - type: string - enum: - - database - - subset - - table - - view - example: database - creators: - type: array - items: - $ref: "#/components/schemas/CreatorBriefDto" - titles: - type: array - items: - $ref: "#/components/schemas/IdentifierTitleDto" - descriptions: - type: array - items: - $ref: "#/components/schemas/IdentifierDescriptionDto" - doi: - type: string - example: 10.1038/nphys1170 - publisher: - type: string - example: TU Wien - status: - type: string - enum: - - draft - - published - example: draft - database_id: - type: string - format: uuid - example: fc29f89c-86a8-4020-9e36-4d954736c6cc - query_id: - type: string - format: uuid - example: 1 - table_id: - type: string - format: uuid - example: 1 - view_id: - type: string - format: uuid - example: 1 - publication_year: - type: integer - format: int32 - example: 2022 - owned_by: - type: string - format: uuid - example: 2f45ef7a-7f9b-4667-9156-152c87fe1ca5 - required: - - creators - - database_id - - descriptions - - id - - owned_by - - publication_year - - publisher - - status - - titles - - type - IdentifierDescriptionDto: - type: object - properties: - id: - type: string - format: uuid - example: e0e9692c-910b-4b60-b53a-fc7c358a917d - description: - type: string - example: "Air quality reports at Stephansplatz, Vienna" - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - example: en - type: - type: string - enum: - - Abstract - - Methods - - SeriesInformation - - TableOfContents - - TechnicalInfo - - Other - example: Abstract - required: - - id - IdentifierTitleDto: - type: object - properties: - id: - type: string - format: uuid - example: 70ce5164-fd74-413f-8712-f996b91defbf - title: - type: string - example: Airquality Demonstrator - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - example: en - type: - type: string - enum: - - AlternativeTitle - - Subtitle - - TranslatedTitle - - Other - required: - - id - UserBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 - username: - type: string - description: Only contains lowercase characters - example: jcarberry - name: - type: string - example: Josiah Carberry - orcid: - type: string - example: 0000-0002-1825-0097 - qualified_name: - type: string - example: Josiah Carberry — @jcarberry - given_name: - type: string - example: Josiah - family_name: - type: string - example: Carberry - required: - - id - - username - DatabaseAccessDto: - type: object - properties: - user: - $ref: "#/components/schemas/UserBriefDto" - type: - type: string - enum: - - read - - write_own - - write_all - example: read - required: - - type - - user - UserUpdateDto: - type: object - properties: - firstname: - type: string - example: Josiah - lastname: - type: string - example: Carberry - affiliation: - type: string - example: Brown University - orcid: - type: string - example: 0000-0002-1825-0097 - theme: - type: string - example: dark - language: - type: string - example: en - required: - - language - - theme - OntologyModifyDto: - type: object - properties: - uri: - type: string - example: Ontology URI - prefix: - type: string - example: Ontology prefix - sparql_endpoint: - type: string - example: Ontology SPARQL endpoint - rdf_path: - type: string - example: rdf/om-2.0.rdf - required: - - prefix - - uri - OntologyDto: - type: object - properties: - id: - type: string - format: uuid - example: 7c491e40-082a-47b8-b82c-51d03c520466 - uri: - type: string - example: http://www.wikidata.org/ - prefix: - type: string - example: wd - sparql: - type: boolean - example: true - rdf: - type: boolean - example: false - uri_pattern: - type: string - example: http://www.wikidata.org/entity/.* - sparql_endpoint: - type: string - example: https://query.wikidata.org/sparql - rdf_path: - type: string - example: rdf/om-2.0.rdf - required: - - id - - prefix - - rdf - - sparql - - uri - BannerMessageUpdateDto: - type: object - properties: - type: - type: string - enum: - - error - - warning - - info - message: - type: string - example: Maintenance starts on 8am on Monday - link: - type: string - example: https://example.com - link_text: - type: string - example: More - display_start: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - display_end: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - required: - - message - - type - BannerMessageBriefDto: - type: object - properties: - type: - type: string - enum: - - error - - warning - - info - message: - type: string - example: Maintenance starts on 8am on Monday - link: - type: string - example: https://example.com - link_text: - type: string - example: More - required: - - message - - type - ImageChangeDto: - type: object - properties: - registry: - type: string - example: docker.io/library - defaultPort: - type: integer - format: int32 - example: 5432 - maximum: 65535 - minimum: 1024 - dialect: - type: string - example: Postgres - driver_class: - type: string - example: org.postgresql.Driver - jdbc_method: - type: string - example: postgresql - required: - - dialect - - driver_class - - jdbc_method - - registry - DataTypeDto: - type: object - properties: - id: - type: string - format: uuid - example: 816f55d5-1098-4f60-a4af-c8121c04dcca - value: - type: string - example: time - documentation: - type: string - example: https://mariadb.com/kb/en/time/ - display_name: - type: string - example: TIME(fsp) - size_min: - type: integer - format: int32 - example: 0 - size_max: - type: integer - format: int32 - example: 6 - size_default: - type: integer - format: int32 - example: 0 - size_required: - type: boolean - example: false - d_min: - type: integer - format: int32 - d_max: - type: integer - format: int32 - d_default: - type: integer - format: int32 - d_required: - type: boolean - data_hint: - type: string - example: "e.g. HH:MM:SS, HH:MM, HHMMSS, H:M:S" - type_hint: - type: string - example: "fsp=microsecond precision, min. 0, max. 6" - is_quoted: - type: boolean - description: frontend needs to quote this data type - example: false - is_buildable: - type: boolean - description: frontend can build this data type - example: true - required: - - display_name - - documentation - - id - - is_buildable - - is_quoted - - value - ImageDto: - type: object - properties: - id: - type: string - format: uuid - example: 816f55d5-1098-4f60-a4af-c8121c04dcce - name: - type: string - example: mariadb - version: - type: string - example: 10.5 - operators: - type: array - items: - $ref: "#/components/schemas/OperatorDto" - default: - type: boolean - example: false - data_types: - type: array - items: - $ref: "#/components/schemas/DataTypeDto" - required: - - data_types - - default - - id - - name - - operators - - version - OperatorDto: - type: object - properties: - id: - type: string - format: uuid - example: 816f55d5-1098-4f60-a4af-c8121c04dccf - value: - type: string - example: XOR - documentation: - type: string - example: https://mariadb.com/kb/en/xor/ - display_name: - type: string - example: XOR - required: - - display_name - - documentation - - id - - value - IdentifierSaveDto: - type: object - properties: - id: - type: string - format: uuid - example: 68e11675-1e0f-4d24-a6d9-887ad1c4445d - type: - type: string - enum: - - database - - subset - - table - - view - example: database - doi: - type: string - example: 10.1111/11111111 - titles: - type: array - items: - $ref: "#/components/schemas/SaveIdentifierTitleDto" - descriptions: - type: array - items: - $ref: "#/components/schemas/SaveIdentifierDescriptionDto" - funders: - type: array - items: - $ref: "#/components/schemas/SaveIdentifierFunderDto" - licenses: - type: array - items: - $ref: "#/components/schemas/LicenseDto" - publisher: - type: string - example: TU Wien - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - creators: - type: array - items: - $ref: "#/components/schemas/SaveIdentifierCreatorDto" - database_id: - type: string - format: uuid - example: null - query_id: - type: string - format: uuid - example: null - view_id: - type: string - format: uuid - example: null - table_id: - type: string - format: uuid - example: null - publication_day: - type: integer - format: int32 - example: 15 - publication_month: - type: integer - format: int32 - example: 12 - publication_year: - type: integer - format: int32 - example: 2022 - related_identifiers: - type: array - items: - $ref: "#/components/schemas/SaveRelatedIdentifierDto" - required: - - creators - - database_id - - id - - publication_year - - publisher - - titles - - type - LicenseDto: - type: object - properties: - identifier: - type: string - example: MIT - uri: - type: string - example: https://opensource.org/licenses/MIT - description: - type: string - example: "A short and simple permissive license with conditions only requiring\ - \ preservation of copyright and license notices. Licensed works, modifications,\ - \ and larger works may be distributed under different terms and without\ - \ source code." - required: - - identifier - - uri - SaveIdentifierCreatorDto: - type: object - properties: - id: - type: string - format: uuid - example: da9dd034-00a8-4517-b93d-d1b2adfee418 - firstname: - type: string - example: Josiah - lastname: - type: string - example: Carberry - affiliation: - type: string - example: Wesleyan University - creator_name: - type: string - example: "Carberry, Josiah" - name_type: - type: string - enum: - - Personal - - Organizational - example: Personal - name_identifier: - type: string - example: 0000-0002-1825-0097 - name_identifier_scheme: - type: string - enum: - - ORCID - - ROR - - ISNI - - GRID - example: ORCID - affiliation_identifier: - type: string - example: https://ror.org/04d836q62 - affiliation_identifier_scheme: - type: string - enum: - - ROR - - GRID - - ISNI - example: ROR - required: - - creator_name - - id - SaveIdentifierDescriptionDto: - type: object - properties: - id: - type: string - format: uuid - example: 35bd84d8-b181-43c8-b786-4d024e4f843c - description: - type: string - example: "Air quality reports at Stephansplatz, Vienna" - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - example: en - type: - type: string - enum: - - Abstract - - Methods - - SeriesInformation - - TableOfContents - - TechnicalInfo - - Other - example: Abstract - required: - - description - - id - SaveIdentifierFunderDto: - type: object - properties: - id: - type: string - format: uuid - example: 1c6b9212-a315-44b9-946c-3682a7a0e517 - funder_name: - type: string - example: European Commission - funder_identifier: - type: string - example: http://doi.org/10.13039/501100000780 - funder_identifier_type: - type: string - enum: - - Crossref Funder ID - - ROR - - GND - - ISNI - - Other - example: Crossref Funder ID - scheme_uri: - type: string - example: http://doi.org/ - award_number: - type: string - example: 824087 - award_title: - type: string - example: EOSC-Life - required: - - funder_name - - id - SaveIdentifierTitleDto: - type: object - properties: - id: - type: string - format: uuid - example: 2af9f40e-eaf5-4ea1-861a-1a696587bf29 - title: - type: string - example: Airquality Demonstrator - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - example: en - type: - type: string - enum: - - AlternativeTitle - - Subtitle - - TranslatedTitle - - Other - example: Subtitle - required: - - id - - title - SaveRelatedIdentifierDto: - type: object - properties: - id: - type: string - format: uuid - example: 5bb272c7-7421-4f74-83ac-0486812d0f44 - value: - type: string - example: 10.70124/dc4zh-9ce78 - type: - type: string - enum: - - DOI - - URL - - URN - - ARK - - arXiv - - bibcode - - EAN13 - - EISSN - - Handle - - IGSN - - ISBN - - ISTC - - LISSN - - LSID - - PMID - - PURL - - UPC - - w3id - example: DOI - relation: - type: string - enum: - - IsCitedBy - - Cites - - IsSupplementTo - - IsSupplementedBy - - IsContinuedBy - - Continues - - IsDescribedBy - - Describes - - HasMetadata - - IsMetadataFor - - HasVersion - - IsVersionOf - - IsNewVersionOf - - IsPreviousVersionOf - - IsPartOf - - HasPart - - IsPublishedIn - - IsReferencedBy - - References - - IsDocumentedBy - - Documents - - IsCompiledBy - - Compiles - - IsVariantFormOf - - IsOriginalFormOf - - IsIdenticalTo - - IsReviewedBy - - Reviews - - IsDerivedFrom - - IsSourceOf - - IsRequiredBy - - Requires - - IsObsoletedBy - - Obsoletes - example: Cites - required: - - id - - relation - - type - - value - CreatorDto: - type: object - properties: - id: - type: string - format: uuid - example: e41f94a6-2b94-4a12-ac0e-678684e1c070 - firstname: - type: string - example: Josiah - lastname: - type: string - example: Carberry - affiliation: - type: string - example: Brown University - creator_name: - type: string - example: "Carberry, Josiah" - name_type: - type: string - enum: - - Personal - - Organizational - example: Personal - name_identifier: - type: string - example: 0000-0002-1825-0097 - name_identifier_scheme: - type: string - enum: - - ORCID - - ROR - - ISNI - - GRID - example: ORCID - name_identifier_scheme_uri: - type: string - example: https://orcid.org/ - affiliation_identifier: - type: string - example: https://ror.org/05gq02987 - affiliation_identifier_scheme: - type: string - enum: - - ROR - - GRID - - ISNI - example: ROR - affiliation_identifier_scheme_uri: - type: string - example: https://ror.org/ - required: - - creator_name - - id - IdentifierDto: - type: object - properties: - id: - type: string - format: uuid - example: b97cd56b-66ca-4354-9e6c-f47210cfaaec - links: - $ref: "#/components/schemas/LinksDto" - type: - type: string - enum: - - database - - subset - - table - - view - example: database - titles: - type: array - items: - $ref: "#/components/schemas/IdentifierTitleDto" - descriptions: - type: array - items: - $ref: "#/components/schemas/IdentifierDescriptionDto" - funders: - type: array - items: - $ref: "#/components/schemas/IdentifierFunderDto" - query: - type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - execution: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - doi: - type: string - example: 10.1038/nphys1170 - publisher: - type: string - example: TU Wien - owner: - $ref: "#/components/schemas/UserBriefDto" - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - licenses: - type: array - items: - $ref: "#/components/schemas/LicenseDto" - creators: - type: array - items: - $ref: "#/components/schemas/CreatorDto" - status: - type: string - enum: - - draft - - published - example: draft - database_id: - type: string - format: uuid - example: null - query_id: - type: string - format: uuid - example: null - table_id: - type: string - format: uuid - example: null - view_id: - type: string - format: uuid - example: null - query_normalized: - type: string - example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ - \ = \"09:STEF\"" - related_identifiers: - type: array - items: - $ref: "#/components/schemas/RelatedIdentifierDto" - query_hash: - type: string - description: query hash in sha512 - result_hash: - type: string - example: 34fe82cda2c53f13f8d90cfd7a3469e3a939ff311add50dce30d9136397bf8e5 - result_number: - type: integer - format: int64 - example: 1 - publication_day: - type: integer - format: int32 - example: 15 - publication_month: - type: integer - format: int32 - example: 12 - publication_year: - type: integer - format: int32 - example: 2022 - required: - - creators - - database_id - - descriptions - - funders - - id - - language - - licenses - - links - - owner - - publication_year - - publisher - - query - - query_hash - - query_normalized - - status - - titles - - type - IdentifierFunderDto: - type: object - properties: - id: - type: string - format: uuid - example: 39693413-e0ce-46da-ad5e-029c0556d439 - funder_name: - type: string - example: European Commission - funder_identifier: - type: string - example: http://doi.org/10.13039/501100000780 - funder_identifier_type: - type: string - enum: - - Crossref Funder ID - - ROR - - GND - - ISNI - - Other - example: Crossref Funder ID - scheme_uri: - type: string - example: http://doi.org/ - award_number: - type: string - example: 824087 - award_title: - type: string - example: EOSC-Life - required: - - funder_name - - id - LinksDto: - type: object - properties: - self: - type: string - example: http://example.com/api/ - data: - type: string - example: http://example.com - self_html: - type: string - example: http://example.com - dashboard_html: - type: string - example: http://example.com/d/defi2baxqawaod - required: - - self - - self_html - RelatedIdentifierDto: - type: object - properties: - id: - type: string - format: uuid - example: ce9d11f0-60a2-448d-a3e4-44719a443e8a - value: - type: string - example: 10.70124/dc4zh-9ce78 - type: - type: string - enum: - - DOI - - URL - - URN - - ARK - - arXiv - - bibcode - - EAN13 - - EISSN - - Handle - - IGSN - - ISBN - - ISTC - - LISSN - - LSID - - PMID - - PURL - - UPC - - w3id - example: DOI - relation: - type: string - enum: - - IsCitedBy - - Cites - - IsSupplementTo - - IsSupplementedBy - - IsContinuedBy - - Continues - - IsDescribedBy - - Describes - - HasMetadata - - IsMetadataFor - - HasVersion - - IsVersionOf - - IsNewVersionOf - - IsPreviousVersionOf - - IsPartOf - - HasPart - - IsPublishedIn - - IsReferencedBy - - References - - IsDocumentedBy - - Documents - - IsCompiledBy - - Compiles - - IsVariantFormOf - - IsOriginalFormOf - - IsIdenticalTo - - IsReviewedBy - - Reviews - - IsDerivedFrom - - IsSourceOf - - IsRequiredBy - - Requires - - IsObsoletedBy - - Obsoletes - example: Cites - required: - - id - - relation - - type - - value - DatabaseModifyVisibilityDto: - type: object - properties: - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - is_dashboard_enabled: - type: boolean - example: true - required: - - is_dashboard_enabled - - is_public - - is_schema_public - ViewUpdateDto: - type: object - properties: - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - required: - - is_public - - is_schema_public - ViewBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: 787439d0-e85e-400c-a7e6-996a023bfad9 - name: - type: string - example: Air Quality - query: - type: string - example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC - database_id: - type: string - format: uuid - example: 2b5b2b03-fdd0-40d6-afe0-e5d02fd839e4 - internal_name: - type: string - example: air_quality - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - initial_view: - type: boolean - description: True if it is the default view for the database - example: true - query_hash: - type: string - example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 - owned_by: - type: string - format: uuid - example: ac750fcf-ea02-4fce-85ac-d73857e18b35 - required: - - database_id - - id - - internal_name - - name - - query - - query_hash - TableUpdateDto: - type: object - properties: - description: - type: string - example: Air Quality in Austria - maxLength: 180 - minLength: 0 - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - required: - - is_public - - is_schema_public - TableBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: 41ed10e0-687b-4e18-8521-810f5cffbce1 - name: - type: string - example: Air Quality - description: - type: string - example: Air Quality in Austria - database_id: - type: string - format: uuid - example: a8fec026-dfaf-4b1d-8f6c-f01720d91705 - internal_name: - type: string - example: air_quality - is_versioned: - type: boolean - example: true - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - owned_by: - type: string - format: uuid - example: 78337b80-5699-45db-8111-cec86439ab6b - required: - - database_id - - id - - internal_name - - is_public - - is_schema_public - - is_versioned - - name - - owned_by - ColumnSemanticsUpdateDto: - type: object - properties: - concept_uri: - type: string - unit_uri: - type: string - ColumnDto: - type: object - properties: - id: - type: string - format: uuid - example: a453e444-e00d-41ca-902c-11e9c54b39f1 - name: - type: string - example: Given Name - maxLength: 64 - minLength: 0 - alias: - type: string - example: firstname - size: - type: integer - format: int64 - example: 255 - d: - type: integer - format: int64 - example: 0 - mean: - type: number - example: 45.4 - median: - type: number - example: 51 - concept: - $ref: "#/components/schemas/ConceptBriefDto" - unit: - $ref: "#/components/schemas/UnitBriefDto" - description: - type: string - example: Column comment - maxLength: 2048 - minLength: 0 - enums: - type: array - description: "enum values, only considered when type = ENUM" - items: - $ref: "#/components/schemas/EnumDto" - sets: - type: array - description: "enum values, only considered when type = ENUM" - items: - $ref: "#/components/schemas/SetDto" - database_id: - type: string - format: uuid - example: 911f9052-c58c-4e1c-b3f2-66af2107be16 - table_id: - type: string - format: uuid - example: bfffa915-a547-4466-9c65-ddc0d38fdb08 - ord: - type: integer - format: int32 - example: 0 - internal_name: - type: string - example: given_name - maxLength: 64 - minLength: 0 - index_length: - type: integer - format: int64 - example: 255 - length: - type: integer - format: int64 - example: 255 - type: - type: string - enum: - - char - - varchar - - binary - - varbinary - - tinyblob - - tinytext - - text - - blob - - mediumtext - - mediumblob - - longtext - - longblob - - enum - - set - - serial - - bit - - tinyint - - bool - - smallint - - mediumint - - int - - bigint - - float - - double - - decimal - - date - - datetime - - timestamp - - time - - year - example: varchar - data_length: - type: integer - format: int64 - example: 34300 - max_data_length: - type: integer - format: int64 - example: 34300 - num_rows: - type: integer - format: int64 - example: 32 - val_min: - type: number - example: 0 - val_max: - type: number - example: 100 - std_dev: - type: number - example: 5.32 - is_null_allowed: - type: boolean - example: false - required: - - database_id - - id - - internal_name - - is_null_allowed - - name - - ord - - table_id - - type - ConceptBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: 8cabc011-4bdf-44d4-9d33-b2648e2ddbf1 - uri: - type: string - example: http://www.wikidata.org/entity/Q202444 - name: - type: string - example: given name - description: - type: string - example: "name typically used to differentiate people from the same family,\ - \ clan, or other social group who have a common last name" - required: - - id - - uri - EnumDto: - type: object - properties: - id: - type: string - format: uuid - example: 5343bb3d-14d3-4eb7-a86f-b8fc553cb315 - value: - type: string - example: 3 - required: - - id - - value - SetDto: - type: object - properties: - id: - type: string - format: uuid - example: 7eb4eded-bacc-4a91-84db-a9ae6ddafda7 - value: - type: string - example: 3 - required: - - id - - value - UnitBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: ba1935e8-6817-488f-af0a-f54389af9000 - uri: - type: string - example: http://www.wikidata.org/entity/Q1422583 - name: - type: string - example: importance - description: - type: string - example: "subjective magnitude of value, meaning, or purpose" - required: - - id - - uri - DatabaseTransferDto: - type: object - properties: - id: - type: string - format: uuid - required: - - id - DatabaseModifyImageDto: - type: object - properties: - key: - type: string - DatabaseModifyDashboardDto: - type: object - properties: - uid: - type: string - required: - - uid - CreateAccessDto: - type: object - properties: - type: - type: string - enum: - - read - - write_own - - write_all - example: read - required: - - type - OntologyCreateDto: - type: object - properties: - uri: - type: string - example: Ontology URI - prefix: - type: string - example: Ontology prefix - sparql_endpoint: - type: string - example: Ontology SPARQL endpoint - required: - - prefix - - uri - BannerMessageCreateDto: - type: object - properties: - type: - type: string - enum: - - error - - warning - - info - message: - type: string - example: Maintenance starts on 8am on Monday - link: - type: string - example: https://example.com - link_text: - type: string - example: More - display_start: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - display_end: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - required: - - message - - type - ImageCreateDto: - type: object - properties: - registry: - type: string - example: docker.io/library - name: - type: string - example: mariadb - version: - type: string - dialect: - type: string - is_default: - type: boolean - example: false - driver_class: - type: string - jdbc_method: - type: string - default_port: - type: integer - format: int32 - maximum: 65535 - minimum: 1024 - required: - - default_port - - dialect - - driver_class - - is_default - - jdbc_method - - name - - registry - - version - CreateIdentifierDto: - type: object - properties: - type: - type: string - enum: - - database - - subset - - table - - view - example: database - doi: - type: string - example: 10.1111/11111111 - titles: - type: array - items: - $ref: "#/components/schemas/SaveIdentifierTitleDto" - descriptions: - type: array - items: - $ref: "#/components/schemas/SaveIdentifierDescriptionDto" - funders: - type: array - items: - $ref: "#/components/schemas/SaveIdentifierFunderDto" - licenses: - type: array - items: - $ref: "#/components/schemas/LicenseDto" - publisher: - type: string - example: TU Wien - language: - type: string - enum: - - ab - - aa - - af - - ak - - sq - - am - - ar - - an - - hy - - as - - av - - ae - - ay - - az - - bm - - ba - - eu - - be - - bn - - bh - - bi - - bs - - br - - bg - - my - - ca - - km - - ch - - ce - - ny - - zh - - cu - - cv - - kw - - co - - cr - - hr - - cs - - da - - dv - - nl - - dz - - en - - eo - - et - - ee - - fo - - fj - - fi - - fr - - ff - - gd - - gl - - lg - - ka - - de - - ki - - el - - kl - - gn - - gu - - ht - - ha - - he - - hz - - hi - - ho - - hu - - is - - io - - ig - - id - - ia - - ie - - iu - - ik - - ga - - it - - ja - - jv - - kn - - kr - - ks - - kk - - rw - - kv - - kg - - ko - - kj - - ku - - ky - - lo - - la - - lv - - lb - - li - - ln - - lt - - lu - - mk - - mg - - ms - - ml - - mt - - gv - - mi - - mr - - mh - - ro - - mn - - na - - nv - - nd - - ng - - ne - - se - - "no" - - nb - - nn - - ii - - oc - - oj - - or - - om - - os - - pi - - pa - - ps - - fa - - pl - - pt - - qu - - rm - - rn - - ru - - sm - - sg - - sa - - sc - - sr - - sn - - sd - - si - - sk - - sl - - so - - st - - nr - - es - - su - - sw - - ss - - sv - - tl - - ty - - tg - - ta - - tt - - te - - th - - bo - - ti - - to - - ts - - tn - - tr - - tk - - tw - - ug - - uk - - ur - - uz - - ve - - vi - - vo - - wa - - cy - - fy - - wo - - xh - - yi - - yo - - za - - zu - creators: - type: array - items: - $ref: "#/components/schemas/SaveIdentifierCreatorDto" - database_id: - type: string - format: uuid - example: d002e8d5-8db4-4ff7-ab3a-bc3f52d9ec44 - query_id: - type: string - format: uuid - example: null - view_id: - type: string - format: uuid - example: null - table_id: - type: string - format: uuid - example: null - publication_day: - type: integer - format: int32 - example: 15 - publication_month: - type: integer - format: int32 - example: 12 - publication_year: - type: integer - format: int32 - example: 2022 - related_identifiers: - type: array - items: - $ref: "#/components/schemas/SaveRelatedIdentifierDto" - required: - - creators - - database_id - - publication_year - - publisher - - titles - - type - CreateDatabaseDto: - type: object - properties: - name: - type: string - example: Air Quality - container_id: - type: string - format: uuid - example: 0888e108-d521-46e2-9d3e-82099185305b - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - required: - - container_id - - is_public - - is_schema_public - - name - CreateViewDto: - type: object - properties: - name: - type: string - example: Air Quality - maxLength: 63 - minLength: 1 - query: - $ref: "#/components/schemas/SubsetDto" - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - required: - - is_public - - is_schema_public - - name - - query - FilterDto: - type: object - properties: - type: - type: string - enum: - - where - - or - - and - example: where - value: - type: string - example: 1 - column_id: - type: string - format: uuid - example: 14128033-54b5-4818-a489-21b0dded86e2 - operator_id: - type: string - format: uuid - example: 67c5b54d-2eb0-4f42-8dc1-a504562e9f32 - required: - - column_id - - operator_id - - type - - value - OrderDto: - type: object - properties: - direction: - type: string - enum: - - asc - - desc - example: asc - column_id: - type: string - format: uuid - example: e891ba86-0258-41a6-a8d9-ff58bc10b618 - required: - - column_id - SubsetDto: - type: object - properties: - columns: - type: array - example: - - e891ba86-0258-41a6-a8d9-ff58bc10b618 - items: - type: string - format: uuid - filter: - type: array - items: - $ref: "#/components/schemas/FilterDto" - order: - type: array - items: - $ref: "#/components/schemas/OrderDto" - datasource_id: - type: string - format: uuid - example: f7df2a7d-4ade-4c78-97b0-7c744d0893c7 - datasource_type: - type: string - enum: - - table - - view - required: - - columns - - datasource_id - - datasource_type - CreateForeignKeyDto: - type: object - properties: - columns: - type: array - example: - - id - items: - type: string - referenced_table: - type: string - example: sensor - referenced_columns: - type: array - example: - - other_id - items: - type: string - on_update: - type: string - enum: - - restrict - - cascade - - set_null - - no_action - - set_default - example: cascade - on_delete: - type: string - enum: - - restrict - - cascade - - set_null - - no_action - - set_default - example: cascade - required: - - columns - - referenced_columns - - referenced_table - CreateTableColumnDto: - type: object - properties: - name: - type: string - example: Date - type: - type: string - enum: - - char - - varchar - - binary - - varbinary - - tinyblob - - tinytext - - text - - blob - - mediumtext - - mediumblob - - longtext - - longblob - - enum - - set - - serial - - bit - - tinyint - - bool - - smallint - - mediumint - - int - - bigint - - float - - double - - decimal - - date - - datetime - - timestamp - - time - - year - example: varchar - size: - type: integer - format: int64 - example: 255 - d: - type: integer - format: int64 - example: 0 - description: - type: string - example: Formatted as YYYY-MM-dd - maxLength: 2048 - minLength: 0 - enums: - type: array - description: "enum values, only considered when type = ENUM" - items: - type: string - sets: - type: array - description: "set values, only considered when type = SET" - items: - type: string - index_length: - type: integer - format: int64 - null_allowed: - type: boolean - example: true - concept_uri: - type: string - unit_uri: - type: string - required: - - name - - null_allowed - - type - CreateTableConstraintsDto: - type: object - properties: - uniques: - type: array - items: - type: array - items: - type: string - checks: - type: array - items: - type: string - uniqueItems: true - foreign_keys: - type: array - items: - $ref: "#/components/schemas/CreateForeignKeyDto" - primary_key: - type: array - items: - type: string - uniqueItems: true - required: - - checks - - foreign_keys - - primary_key - - uniques - CreateTableDto: - type: object - properties: - name: - type: string - example: Air Quality - maxLength: 64 - minLength: 1 - description: - type: string - example: Air Quality in Austria - maxLength: 180 - minLength: 0 - columns: - type: array - items: - $ref: "#/components/schemas/CreateTableColumnDto" - constraints: - $ref: "#/components/schemas/CreateTableConstraintsDto" - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - required: - - columns - - constraints - - is_public - - is_schema_public - - name - CreateContainerDto: - type: object - properties: - name: - type: string - example: Air Quality - host: - type: string - description: Hostname of container - example: data-db2 - port: - type: integer - format: int32 - description: Port of container - example: 3306 - quota: - type: integer - format: int64 - example: 50 - image_id: - type: string - format: uuid - description: Image ID - example: 2360f3c4-85e0-4fac-a7c6-73b296b9dde2 - ui_host: - type: string - example: example.com - ui_port: - type: integer - format: int32 - example: 3306 - privileged_username: - type: string - description: Username of privileged user - example: root - privileged_password: - type: string - description: Password of privileged user - example: dbrepo - required: - - host - - image_id - - name - - privileged_password - - privileged_username - - quota - ContainerDto: - type: object - properties: - id: - type: string - format: uuid - example: 7ddb7e87-b965-43a2-9a24-4fa406d998f4 - name: - type: string - example: Air Quality - image: - $ref: "#/components/schemas/ImageDto" - quota: - type: integer - format: int64 - example: 50 - count: - type: integer - format: int64 - example: 10 - username: - type: string - example: username - password: - type: string - example: p4ssw0rd - last_retrieved: - type: string - format: date-time - example: 2025-01-23T12:09:01 - internal_name: - type: string - example: air_quality - required: - - count - - id - - image - - internal_name - - name - ColumnBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: a453e444-e00d-41ca-902c-11e9c54b39f1 - name: - type: string - example: Given Name - maxLength: 64 - minLength: 0 - alias: - type: string - example: firstname - database_id: - type: string - format: uuid - example: 911f9052-c58c-4e1c-b3f2-66af2107be16 - table_id: - type: string - format: uuid - example: bfffa915-a547-4466-9c65-ddc0d38fdb08 - internal_name: - type: string - example: given_name - maxLength: 64 - minLength: 0 - type: - type: string - enum: - - char - - varchar - - binary - - varbinary - - tinyblob - - tinytext - - text - - blob - - mediumtext - - mediumblob - - longtext - - longblob - - enum - - set - - serial - - bit - - tinyint - - bool - - smallint - - mediumint - - int - - bigint - - float - - double - - decimal - - date - - datetime - - timestamp - - time - - year - example: varchar - required: - - database_id - - id - - internal_name - - name - - table_id - - type - UnitDto: - type: object - properties: - id: - type: string - format: uuid - example: ba1935e8-6817-488f-af0a-f54389af9000 - uri: - type: string - name: - type: string - description: - type: string - columns: - type: array - items: - $ref: "#/components/schemas/ColumnBriefDto" - required: - - columns - - id - - uri - OntologyBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: 7c491e40-082a-47b8-b82c-51d03c520466 - uri: - type: string - example: http://www.wikidata.org/ - prefix: - type: string - example: wd - sparql: - type: boolean - example: true - rdf: - type: boolean - example: false - uri_pattern: - type: string - example: http://www.wikidata.org/entity/.* - required: - - id - - prefix - - rdf - - sparql - - uri - EntityDto: - type: object - properties: - uri: - type: string - example: https://www.wikidata.org/entity/Q1686799 - label: - type: string - example: Apache Jena - description: - type: string - example: open source semantic web framework for Java - required: - - label - - uri - OaiListIdentifiersParameters: - type: object - properties: - metadataPrefix: - type: string - from: - type: string - until: - type: string - set: - type: string - resumptionToken: - type: string - fromDate: - type: string - format: date-time - untilDate: - type: string - format: date-time - parametersString: - type: string - BannerMessageDto: - type: object - properties: - id: - type: string - format: uuid - example: ae3f795b-a3da-4ebe-bdc4-21a8ce631e6f - type: - type: string - enum: - - error - - warning - - info - example: WARNING - message: - type: string - example: Maintenance starts on 8am on Monday - link: - type: string - example: https://example.com - link_text: - type: string - example: More - display_start: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - display_end: - type: string - format: date-time - example: 2021-03-12T15:26:21Z - required: - - id - - message - - type - ImageBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: 816f55d5-1098-4f60-a4af-c8121c04dcce - name: - type: string - example: mariadb - version: - type: string - example: 10.5 - default: - type: boolean - example: false - required: - - default - - id - - name - - version - LdCreatorDto: - type: object - properties: - name: - type: string - sameAs: - type: string - givenName: - type: string - familyName: - type: string - '@type': - type: string - required: - - '@type' - - name - LdDatasetDto: - type: object - properties: - name: - type: string - description: - type: string - url: - type: string - identifier: - type: array - items: - type: string - license: - type: string - creator: - type: array - items: - $ref: "#/components/schemas/LdCreatorDto" - citation: - type: string - hasPart: - type: array - items: - $ref: "#/components/schemas/LdDatasetDto" - temporalCoverage: - type: string - version: - type: string - format: date-time - '@context': - type: string - '@type': - type: string - required: - - '@context' - - '@type' - - citation - - creator - - description - - hasPart - - identifier - - name - - temporalCoverage - - url - - version - ViewColumnDto: - type: object - properties: - id: - type: string - format: uuid - example: 6aec3a91-2e0b-4e92-a16a-9c3c5e892da1 - name: - type: string - example: Given Name - maxLength: 64 - minLength: 0 - size: - type: integer - format: int64 - example: 255 - d: - type: integer - format: int64 - example: 0 - description: - type: string - example: Column comment - maxLength: 2048 - minLength: 0 - enums: - type: array - description: "enum values, only considered when type = ENUM" - items: - $ref: "#/components/schemas/EnumDto" - sets: - type: array - description: "enum values, only considered when type = ENUM" - items: - $ref: "#/components/schemas/SetDto" - database_id: - type: string - format: uuid - example: 2b5b2b03-fdd0-40d6-afe0-e5d02fd839e4 - ord: - type: integer - format: int32 - example: 0 - internal_name: - type: string - example: given_name - maxLength: 64 - minLength: 0 - index_length: - type: integer - format: int64 - example: 255 - length: - type: integer - format: int64 - example: 255 - type: - type: string - enum: - - char - - varchar - - binary - - varbinary - - tinyblob - - tinytext - - text - - blob - - mediumtext - - mediumblob - - longtext - - longblob - - enum - - set - - serial - - bit - - tinyint - - bool - - smallint - - mediumint - - int - - bigint - - float - - double - - decimal - - date - - datetime - - timestamp - - time - - year - example: varchar - is_null_allowed: - type: boolean - example: false - required: - - database_id - - id - - internal_name - - is_null_allowed - - name - - ord - - type - ViewDto: - type: object - properties: - id: - type: string - format: uuid - example: 787439d0-e85e-400c-a7e6-996a023bfad9 - name: - type: string - example: Air Quality - identifiers: - type: array - items: - $ref: "#/components/schemas/IdentifierDto" - query: - type: string - example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC - owner: - $ref: "#/components/schemas/UserBriefDto" - columns: - type: array - items: - $ref: "#/components/schemas/ViewColumnDto" - created: - type: string - format: date-time - example: 2022-01-01 08:00:00.000 - last_retrieved: - type: string - format: date-time - example: 2025-01-23T12:09:01 - database_id: - type: string - format: uuid - example: fc29f89c-86a8-4020-9e36-4d954736c6cc - internal_name: - type: string - example: air_quality - is_public: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - initial_view: - type: boolean - description: True if it is the default view for the database - example: true - query_hash: - type: string - example: 7de03e818900b6ea6d58ad0306d4a741d658c6df3d1964e89ed2395d8c7e7916 - required: - - columns - - created - - database_id - - id - - identifiers - - internal_name - - name - - owner - - query - - query_hash - ConstraintsDto: - type: object - properties: - uniques: - type: array - items: - $ref: "#/components/schemas/UniqueDto" - checks: - type: array - example: - - value > 1 - items: - type: string - uniqueItems: true - foreign_keys: - type: array - items: - $ref: "#/components/schemas/ForeignKeyDto" - primary_key: - type: array - items: - $ref: "#/components/schemas/PrimaryKeyDto" - uniqueItems: true - ForeignKeyBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: f2b740ec-0b13-4d07-88a9-529d354bba6a - ForeignKeyDto: - type: object - properties: - id: - type: string - format: uuid - example: f2b740ec-0b13-4d07-88a9-529d354bba6a - name: - type: string - example: fk_name - references: - type: array - items: - $ref: "#/components/schemas/ForeignKeyReferenceDto" - table: - $ref: "#/components/schemas/TableBriefDto" - referenced_table: - $ref: "#/components/schemas/TableBriefDto" - on_update: - type: string - enum: - - restrict - - cascade - - set_null - - no_action - - set_default - example: restrict - on_delete: - type: string - enum: - - restrict - - cascade - - set_null - - no_action - - set_default - example: restrict - required: - - name - - referenced_table - - references - - table - ForeignKeyReferenceDto: - type: object - properties: - id: - type: string - format: uuid - example: f2b740ec-0b13-4d07-88a9-529d354bba6a - column: - $ref: "#/components/schemas/ColumnBriefDto" - foreign_key: - $ref: "#/components/schemas/ForeignKeyBriefDto" - referenced_column: - $ref: "#/components/schemas/ColumnBriefDto" - required: - - column - - foreign_key - - referenced_column - PrimaryKeyDto: - type: object - properties: - id: - type: string - format: uuid - example: d984f9d7-e8a7-4b81-b59a-862db1871f18 - table: - $ref: "#/components/schemas/TableBriefDto" - column: - $ref: "#/components/schemas/ColumnBriefDto" - required: - - column - - table - TableDto: - type: object - properties: - id: - type: string - format: uuid - example: d346f844-b84c-490f-9aec-725a2dc8f820 - name: - type: string - example: Air Quality - alias: - type: string - example: a - identifiers: - type: array - items: - $ref: "#/components/schemas/IdentifierDto" - owner: - $ref: "#/components/schemas/UserBriefDto" - description: - type: string - example: Air Quality in Austria - maxLength: 2048 - minLength: 0 - columns: - type: array - items: - $ref: "#/components/schemas/ColumnDto" - constraints: - $ref: "#/components/schemas/ConstraintsDto" - created: - type: string - format: date-time - example: 2022-01-01 08:00:00.000 - last_retrieved: - type: string - format: date-time - example: 2025-01-23T12:09:01 - database_id: - type: string - format: uuid - example: fc29f89c-86a8-4020-9e36-4d954736c6cc - internal_name: - type: string - example: air_quality - is_versioned: - type: boolean - example: true - is_schema_public: - type: boolean - example: true - queue_name: - type: string - example: air_quality - queue_type: - type: string - example: quorum - routing_key: - type: string - example: dbrepo.1.2 - is_public: - type: boolean - example: true - num_rows: - type: integer - format: int64 - example: 5 - data_length: - type: integer - format: int64 - description: in bytes - example: 16384 - max_data_length: - type: integer - format: int64 - description: in bytes - example: 0 - avg_row_length: - type: integer - format: int64 - description: in bytes - example: 3276 - required: - - columns - - constraints - - created - - database_id - - id - - internal_name - - is_public - - is_schema_public - - is_versioned - - name - - owner - - queue_name - - routing_key - UniqueDto: - type: object - properties: - id: - type: string - format: uuid - example: d984f9d7-e8a7-4b81-b59a-862db1871f13 - name: - type: string - example: uk_name - table: - $ref: "#/components/schemas/TableBriefDto" - columns: - type: array - items: - $ref: "#/components/schemas/ColumnBriefDto" - required: - - columns - - id - - name - - table - TableColumnEntityDto: - type: object - properties: - uri: - type: string - example: https://www.wikidata.org/entity/Q1686799 - label: - type: string - example: Apache Jena - description: - type: string - example: open source semantic web framework for Java - database_id: - type: string - format: uuid - example: 475b4107-a64d-4495-a7ef-3cb0dadd4804 - table_id: - type: string - format: uuid - example: 9a9208af-90ea-4382-9a11-0c8f6d89bd1f - column_id: - type: string - format: uuid - example: 297860e3-3b29-451c-ae8a-a85ed5941018 - required: - - column_id - - database_id - - table_id - - uri - ContainerBriefDto: - type: object - properties: - id: - type: string - format: uuid - example: 7ddb7e87-b965-43a2-9a24-4fa406d998f4 - hash: - type: string - example: f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50 - name: - type: string - example: Air Quality - image: - $ref: "#/components/schemas/ImageBriefDto" - quota: - type: integer - format: int32 - example: 50 - count: - type: integer - format: int32 - example: 10 - internal_name: - type: string - example: air-quality - required: - - count - - hash - - id - - image - - internal_name - - name - - quota - ConceptDto: - type: object - properties: - id: - type: string - format: uuid - example: 8cabc011-4bdf-44d4-9d33-b2648e2ddbf1 - uri: - type: string - name: - type: string - description: - type: string - columns: - type: array - items: - $ref: "#/components/schemas/ColumnBriefDto" - required: - - columns - - id - - uri - securitySchemes: - basicAuth: - type: http - scheme: basic - bearerAuth: - type: http - scheme: bearer - bearerFormat: JWT diff --git a/.docs/.openapi/api-search.yaml b/.docs/.openapi/api-search-service.yaml similarity index 100% rename from .docs/.openapi/api-search.yaml rename to .docs/.openapi/api-search-service.yaml diff --git a/.docs/.openapi/api.yaml b/.docs/.openapi/api.yaml index d5b14455ae8692a19d0f4355a014546eac11ce0b..e93b918845001cec1c4d769e76ad50235544d8a4 100644 --- a/.docs/.openapi/api.yaml +++ b/.docs/.openapi/api.yaml @@ -1193,8 +1193,8 @@ paths: $ref: '#/components/schemas/ApiErrorDto' '404': description: >- - Failed to find database in metadata database or query in query store - of the data database + Failed to find database or user in metadata database or query in + query store of the data database content: application/json: schema: @@ -5252,7 +5252,7 @@ components: execution: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' query: type: string example: SELECT `id` FROM `air_quality` @@ -5430,7 +5430,7 @@ components: execution: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' doi: type: string example: 10.1038/nphys1170 @@ -5991,11 +5991,11 @@ components: created: type: string format: date-time - example: '2022-01-01T08:00:00.000Z' + example: '2022-01-01 08:00:00.000' last_retrieved: type: string format: date-time - example: '2025-01-23T12:09:01.000Z' + example: '2025-01-23T12:09:01' database_id: type: string format: uuid @@ -6088,7 +6088,6 @@ components: - column_id - operator_id - type - - value OrderDto: type: object properties: @@ -6141,7 +6140,7 @@ components: timestamp: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' event: type: string enum: @@ -6206,7 +6205,7 @@ components: last_retrieved: type: string format: date-time - example: '2025-01-23T12:09:01.000Z' + example: '2025-01-23T12:09:01' qualified_name: type: string example: Josiah Carberry — @jcarberry @@ -6376,11 +6375,11 @@ components: display_start: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' display_end: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' required: - message - type @@ -7778,11 +7777,11 @@ components: display_start: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' display_end: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' required: - message - type @@ -8376,7 +8375,7 @@ components: last_retrieved: type: string format: date-time - example: '2025-01-23T12:09:01.000Z' + example: '2025-01-23T12:09:01' internal_name: type: string example: air_quality @@ -8532,14 +8531,14 @@ components: type: string resumptionToken: type: string + parametersString: + type: string fromDate: type: string format: date-time untilDate: type: string format: date-time - parametersString: - type: string BannerMessageDto: type: object properties: @@ -8566,11 +8565,11 @@ components: display_start: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' display_end: type: string format: date-time - example: '2021-03-12T15:26:21.000Z' + example: '2021-03-12T15:26:21Z' required: - id - message @@ -8793,11 +8792,11 @@ components: created: type: string format: date-time - example: '2022-01-01T08:00:00.000Z' + example: '2022-01-01 08:00:00.000' last_retrieved: type: string format: date-time - example: '2025-01-23T12:09:01.000Z' + example: '2025-01-23T12:09:01' database_id: type: string format: uuid diff --git a/.docs/.openapi/openapi-generate.sh b/.docs/.openapi/openapi-generate.sh index aeab907799cf93e130b1a0596cdca7e68c34116d..4ed8d11c8fbd8c2049e377b5c27b4010fba3d00f 100644 --- a/.docs/.openapi/openapi-generate.sh +++ b/.docs/.openapi/openapi-generate.sh @@ -1,24 +1,51 @@ #!/bin/bash -declare -A services -services[4050]=analyse -services[4060]=search -services[4070]=dashboard -services[9093]=data -services[9099]=metadata +ENDPOINTS="analyse-service:8080,search-service:8080,dashboard-service:8080,data-service:8080,metadata-service:8080" # requires https://github.com/mikefarah/yq/ -> v4.44.3 +function ip () { + HOSTNAME=$(hostname $1) + IP=$(docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" "dbrepo-$HOSTNAME") + echo $IP +} + function retrieve () { - if [[ "$2" == analyse ]] || [[ "$2" == search ]] || [[ "$2" == dashboard ]]; then - echo "... retrieve json api from localhost:$1" - curl -sSL "http://localhost:$1/api-$2.json" | yq -o=json - > "./.docs/.openapi/api-$2.yaml" + IP=$(ip $1) + if [[ $IP == "" ]]; then + echo "FATAL: failed to find ip for endpoint: $1" + exit 1 + fi + URL=$(url $1) + HOSTNAME=$(hostname $1) + echo "... retrieve json api from URL: $URL" + touch "./.docs/.openapi/api-$HOSTNAME.yaml" + curl -sSL $URL | yq -o=json - > "./.docs/.openapi/api-$HOSTNAME.yaml" +} + +function url () { + HOSTNAME=$(hostname $1) + PORT=$(port $1) + if [[ "$HOSTNAME" == "analyse-service" ]] || [[ "$HOSTNAME" == "search-service" ]] || [[ "$HOSTNAME" == "dashboard-service" ]]; then + echo "http://$IP:$PORT/api-docs.json" else - echo "... retrieve yaml api from localhost:$1" - curl -sSL "http://localhost:$1/v3/api-docs.yaml" > "./.docs/.openapi/api-$2.yaml" + echo "http://$IP:$PORT/v3/api-docs.yaml" fi } -for key in "${!services[@]}"; do - echo "Generating ${services[$key]} API" - retrieve "$key" "${services[$key]}" -done +function hostname () { + IN="$1" + arrIN=(${IN//:/ }) + echo ${arrIN[0]} +} + +function port () { + IN="$1" + arrIN=(${IN//:/ }) + echo ${arrIN[1]} +} + +IFS=',' read -ra ARR <<< "$ENDPOINTS" +for ENDPOINT in "${ARR[@]}"; do + echo "Request OpenAPI definition for endpoint: $ENDPOINT" + retrieve $ENDPOINT +done \ No newline at end of file diff --git a/.docs/.openapi/openapi-merge.json b/.docs/.openapi/openapi-merge.json index 6e41b75f580bb4e49a068f30665436632fca5acb..32dd1991c6dcf0d6229b6659028ef32f37154cb3 100644 --- a/.docs/.openapi/openapi-merge.json +++ b/.docs/.openapi/openapi-merge.json @@ -4,16 +4,16 @@ "inputFile": "./api.base.yaml" }, { - "inputFile": "./api-analyse.yaml" + "inputFile": "./api-analyse-service.yaml" }, { - "inputFile": "./api-data.yaml" + "inputFile": "./api-data-service.yaml" }, { - "inputFile": "./api-metadata.yaml" + "inputFile": "./api-metadata-service.yaml" }, { - "inputFile": "./api-search.yaml" + "inputFile": "./api-search-service.yaml" } ], "output": "./api.yaml" diff --git a/.docs/api/analyse-service.md b/.docs/api/analyse-service.md index 0b8bf886f35dc19f3d3d1e1c7ada59e30a929975..ebb7ee3ed9b6a40ac6a629d9c40f99b5393f939a 100644 --- a/.docs/api/analyse-service.md +++ b/.docs/api/analyse-service.md @@ -6,7 +6,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.8.1`](https://hub.docker.com/r/dbrepo/analyse-service) + Image: [`registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.8.2`](https://hub.docker.com/r/dbrepo/analyse-service) * Ports: 5000/tcp * Prometheus: `http://<hostname>:5000/metrics` diff --git a/.docs/api/data-service.md b/.docs/api/data-service.md index 50193a54e6b35a2034b8367d4be7d89150f49161..0a09406d806b1540408944c9d3d087fb9a59ba5a 100644 --- a/.docs/api/data-service.md +++ b/.docs/api/data-service.md @@ -6,7 +6,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`registry.datalab.tuwien.ac.at/dbrepo/data-service:1.8.1`](https://hub.docker.com/r/dbrepo/data-service) + Image: [`registry.datalab.tuwien.ac.at/dbrepo/data-service:1.8.2`](https://hub.docker.com/r/dbrepo/data-service) * Ports: 9093/tcp * Info: `http://<hostname>:9093/actuator/info` diff --git a/.docs/api/metadata-service.md b/.docs/api/metadata-service.md index 435ef9cdd1dba538e8e3593224a620d22ae17c89..c040eeb3b24b07c5a3351d26aedd75d1dbbcd507 100644 --- a/.docs/api/metadata-service.md +++ b/.docs/api/metadata-service.md @@ -6,7 +6,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.8.1`](https://hub.docker.com/r/dbrepo/metadata-service) + Image: [`registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.8.2`](https://hub.docker.com/r/dbrepo/metadata-service) * Ports: 9099/tcp * Info: `http://<hostname>:9099/actuator/info` diff --git a/.docs/api/search-service.md b/.docs/api/search-service.md index 22cf6e71b520c02cedb4051d959c9c972a396854..1745cf55182aa598b4c262b3f2e73deb392baf24 100644 --- a/.docs/api/search-service.md +++ b/.docs/api/search-service.md @@ -6,7 +6,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`registry.datalab.tuwien.ac.at/dbrepo/search-service:1.8.1`](https://hub.docker.com/r/dbrepo/search-service) + Image: [`registry.datalab.tuwien.ac.at/dbrepo/search-service:1.8.2`](https://hub.docker.com/r/dbrepo/search-service) * Ports: 4000/tcp * Health: `http://<hostname>:4000/api/search/health` diff --git a/.docs/api/ui.md b/.docs/api/ui.md index ddc8b9d88331c4d41be690651a079bbff105d672..fab9e54324b5ee5ac72c07c4a3b30f2f14e6093a 100644 --- a/.docs/api/ui.md +++ b/.docs/api/ui.md @@ -6,7 +6,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`registry.datalab.tuwien.ac.at/dbrepo/ui:1.8.1`](https://hub.docker.com/r/dbrepo/ui) + Image: [`registry.datalab.tuwien.ac.at/dbrepo/ui:1.8.2`](https://hub.docker.com/r/dbrepo/ui) * Ports: 3000/tcp diff --git a/.docs/changelog.md b/.docs/changelog.md index ae8129067fa5843e7fc5536b03291f503cce6d1d..f8f8a0038f0e6f48e742c473db894d68bf34d03c 100644 --- a/.docs/changelog.md +++ b/.docs/changelog.md @@ -2,7 +2,11 @@ author: Martin Weise --- -## v1.8.2 (2025-04-??) +## v1.8.2 (2025-04-23) + +#### Fixes + +* Fixed a bug in the UI where the resource status was displayed as identifier when a draft identifier has been created. #### Features diff --git a/.docs/concepts/logging.md b/.docs/concepts/logging.md new file mode 100644 index 0000000000000000000000000000000000000000..b13328c18a36aa549d3c6afc6a235cbc267b28dc --- /dev/null +++ b/.docs/concepts/logging.md @@ -0,0 +1,37 @@ +--- +author: Martin Weise +--- + +:octicons-tag-16:{ title="Minimum version" } 1.8.2 + +DBRepo uses the lightweight open-source logging framework [fluentbit](https://fluentbit.io) to collect, parse and +forward logs to the [Search Database](../../api/search-db). + +!!! info "Only available in the Kubernetes deployment" + +## Collection + +Logs are collected with a sidecar in each pod. They are collected with the `tail` plugin from the log files. +For the Data-, Metadata-, Analyse-, Dashboard- and Search Services, the application log is located in +`/var/log/app/service/<name>/app.log` (e.g. `/var/log/app/service/search/app.log` for the Search Service). + +## Parse + +The logs are parsed directly in the config file of the sidecar. The config file is always located in +`/opt/bitnami/fluent-bit/conf/parsers.conf` and contains the parsing regex. By default, the pre-defined `docker` +parser is used that performs lightweight parsing by just parsing the logs as JSON. + +## Storage + +After parsing, the logs are sent to the [Search Database](../../api/search-db) where they are stored as documents in +the index `logging`. + +## Insights + +The logs can be inspected in the operational dashboard in `https://<hostname>/dashboard/d/aejhojr0mrpj4c` to gain +insight on potential errors. + +<figure markdown> + +<figcaption>Figure 1: Operational Dashboard for Logging</figcaption> +</figure> diff --git a/.docs/images/screenshots/dashboard_ops-logs.png b/.docs/images/screenshots/dashboard_ops-logs.png new file mode 100644 index 0000000000000000000000000000000000000000..806aba0b56db410f1691b69039f4328b155868c7 Binary files /dev/null and b/.docs/images/screenshots/dashboard_ops-logs.png differ diff --git a/.env b/.env index 7c9b6e1b99cba36d3523561ec5c9fe567935d80c..821b16a5c08b6577f7aa1728baded9960c24b311 100644 --- a/.env +++ b/.env @@ -1,11 +1,13 @@ APP_VERSION=1.8 +FLUENTBIT_VERSION=4.0.0 +GRAFANA_VERSION=11.4.0 MARIADB_VERSION=11.3.2 -POSTGRES_VERSION=17.0.0 -KEYCLOAK_VERSION=26.2.2 -RABBITMQ_VERSION=3.13.7 -OPENSEARCH_VERSION=2.10.0 -NGINX_VERSION=1.27.3-alpine3.20-slim +KEYCLOAK_VERSION=26.2.4 +MYSQLD_EXPORTER_VERSION=0.15.1 +NGINX_VERSION=1.28.0 OPENLDAP_VERSION=2.6.8 -SEAWEEDFS_VERSION=3.71.0 +OPENSEARCH_VERSION=2.18.0 +POSTGRES_VERSION=17.0.0 PROMETHEUS_VERSION=2.54.1 -MYSQLD_EXPORTER_VERSION=0.15.1 +RABBITMQ_VERSION=3.13.1 +SEAWEEDFS_VERSION=3.87.0 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6e793575f48d5bfce78962438b5fa822bdeea0fc..dd4b98d03a435025f3df88b1c58f002b884704c7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -70,10 +70,12 @@ lint-docker-compose: - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-broker-service'" - "IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-dashboard-service'" - "bash .scripts/check-service.sh 'dbrepo-data-db'" + - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-data-db-metrics'" - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-data-service'" - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-gateway-service'" - "IGNORE_VOLUMES=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-identity-service'" - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-metadata-db'" + - "IGNORE_VOLUMES=1 bash .scripts/check-service.sh 'dbrepo-metadata-db-metrics'" - "IGNORE_IMAGE=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-metadata-service'" - "IGNORE_VOLUMES=1 IGNORE_PORTS=1 bash .scripts/check-service.sh 'dbrepo-metric-db'" - "bash .scripts/check-service.sh 'dbrepo-search-db'" @@ -351,14 +353,17 @@ test-analyse-service: - build-analyse-service dependencies: - build-analyse-service - script: + before_script: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" + - "mkdir -p /var/log/app/service/analyse" + script: - cd ./dbrepo-analyse-service/ && coverage run --rcfile=.coveragerc -m pytest tests/test_determine_dt.py tests/test_determine_pk.py && coverage html && coverage xml && coverage report > ./coverage.txt - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" artifacts: when: always paths: + - /var/log/app/service/analyse/app.log - ./dbrepo-analyse-service/coverage.xml - ./dbrepo-analyse-service/coverage.txt expire_in: 1 days @@ -403,14 +408,17 @@ test-search-service: - build-search-service dependencies: - build-search-service - script: + before_script: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" + - "mkdir -p /var/log/app/service/search" + script: - cd ./dbrepo-search-service/ && coverage run --rcfile=.coveragerc -m pytest tests/test_app.py && coverage html && coverage xml && coverage report > ./coverage.txt - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" artifacts: when: always paths: + - /var/log/app/service/search/app.log - ./dbrepo-search-service/coverage.xml - ./dbrepo-search-service/coverage.txt expire_in: 1 days @@ -430,14 +438,17 @@ test-dashboard-service: - build-dashboard-service dependencies: - build-dashboard-service - script: + before_script: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" + - "mkdir -p /var/log/app/service/dashboard" + script: - cd ./dbrepo-dashboard-service/ && coverage run --rcfile=.coveragerc -m pytest tests/test_integration_app.py && coverage html && coverage xml && coverage report > ./coverage.txt - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" artifacts: when: always paths: + - /var/log/app/service/dashboard/app.log - ./dbrepo-dashboard-service/coverage.xml - ./dbrepo-dashboard-service/coverage.txt expire_in: 1 days diff --git a/dbrepo-analyse-service/Dockerfile b/dbrepo-analyse-service/Dockerfile index df313ec934c825ab20b71da9a29f6e3f272a3462..7799c7ddb68ea17a5d2cae3d5237c54941937cd5 100644 --- a/dbrepo-analyse-service/Dockerfile +++ b/dbrepo-analyse-service/Dockerfile @@ -18,6 +18,9 @@ RUN adduser -D dbrepo --uid 1001 WORKDIR /app +RUN mkdir -p /var/log/app/service/analyse && \ + chown -R 1001:1001 /var/log/app + USER 1001 COPY --chown=1001 ./api ./api diff --git a/dbrepo-analyse-service/Pipfile b/dbrepo-analyse-service/Pipfile index 509b932e0a94a074b1d812f92bc0e9ddd4385e06..21f4b613607a25406e35374ec926623732a6d598 100644 --- a/dbrepo-analyse-service/Pipfile +++ b/dbrepo-analyse-service/Pipfile @@ -21,7 +21,7 @@ numpy = "*" pandas = "*" minio = "*" pydantic = "*" -dbrepo = {path = "./lib/dbrepo-1.8.2rc6.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.8.2.tar.gz"} opensearch-py = "*" [dev-packages] diff --git a/dbrepo-analyse-service/Pipfile.lock b/dbrepo-analyse-service/Pipfile.lock index 293162dbd409b9e9d64b5a501e09c6b61a802c94..f4ad8a2bbe8c2a7036f6d394b9dbb5d806d927e7 100644 --- a/dbrepo-analyse-service/Pipfile.lock +++ b/dbrepo-analyse-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "af3486e267dc0276768390a0ffde39ae9f3e43af09218a6a7981fbf9a9e63b7c" + "sha256": "348b4dab04b3c38faa04d0f821ac6e3fb0005b7a042a8475ec39f673027c48ce" }, "pipfile-spec": 6, "requires": { @@ -16,109 +16,6 @@ ] }, "default": { - "aiohappyeyeballs": { - "hashes": [ - "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", - "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8" - ], - "markers": "python_version >= '3.9'", - "version": "==2.6.1" - }, - "aiohttp": { - "hashes": [ - "sha256:0700055a6e05c2f4711011a44364020d7a10fbbcd02fbf3e30e8f7e7fddc8717", - "sha256:0a8d8f20c39d3fa84d1c28cdb97f3111387e48209e224408e75f29c6f8e0861d", - "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8", - "sha256:0f421843b0f70740772228b9e8093289924359d306530bcd3926f39acbe1adda", - "sha256:106032eaf9e62fd6bc6578c8b9e6dc4f5ed9a5c1c7fb2231010a1b4304393421", - "sha256:11d5391946605f445ddafda5eab11caf310f90cdda1fd99865564e3164f5cff9", - "sha256:122f3e739f6607e5e4c6a2f8562a6f476192a682a52bda8b4c6d4254e1138f4d", - "sha256:12a62691eb5aac58d65200c7ae94d73e8a65c331c3a86a2e9670927e94339ee8", - "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3", - "sha256:1596ebf17e42e293cbacc7a24c3e0dc0f8f755b40aff0402cb74c1ff6baec1d3", - "sha256:25557982dd36b9e32c0a3357f30804e80790ec2c4d20ac6bcc598533e04c6361", - "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137", - "sha256:2c828b6d23b984255b85b9b04a5b963a74278b7356a7de84fda5e3b76866597b", - "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd", - "sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8", - "sha256:3849ead845e8444f7331c284132ab314b4dac43bfae1e3cf350906d4fff4620f", - "sha256:3a621d85e85dccabd700294494d7179ed1590b6d07a35709bb9bd608c7f5dd1d", - "sha256:3b8d2b42073611c860a37f718b3d61ae8b4c2b124b2e776e2c10619d920350ec", - "sha256:3cc314245deb311364884e44242e00c18b5896e4fe6d5f942e7ad7e4cb640adb", - "sha256:3cec21dd68924179258ae14af9f5418c1ebdbba60b98c667815891293902e5e0", - "sha256:3d518ce32179f7e2096bf4e3e8438cf445f05fedd597f252de9f54c728574756", - "sha256:40fbf91f6a0ac317c0a07eb328a1384941872f6761f2e6f7208b63c4cc0a7ff6", - "sha256:427fdc56ccb6901ff8088544bde47084845ea81591deb16f957897f0f0ba1be9", - "sha256:44ff5625413fec55216da5eaa011cf6b0a2ed67a565914a212a51aa3755b0009", - "sha256:46533e6792e1410f9801d09fd40cbbff3f3518d1b501d6c3c5b218f427f6ff08", - "sha256:469ac32375d9a716da49817cd26f1916ec787fc82b151c1c832f58420e6d3533", - "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811", - "sha256:5199be2a2f01ffdfa8c3a6f5981205242986b9e63eb8ae03fd18f736e4840721", - "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118", - "sha256:554c918ec43f8480b47a5ca758e10e793bd7410b83701676a4782672d670da55", - "sha256:5691dc38750fcb96a33ceef89642f139aa315c8a193bbd42a0c33476fd4a1609", - "sha256:5bc0ae0a5e9939e423e065a3e5b00b24b8379f1db46046d7ab71753dfc7dd0e1", - "sha256:5c2eaa145bb36b33af1ff2860820ba0589e165be4ab63a49aebfd0981c173b66", - "sha256:5d61df4a05476ff891cff0030329fee4088d40e4dc9b013fac01bc3c745542c2", - "sha256:5e7007b8d1d09bce37b54111f593d173691c530b80f27c6493b928dabed9e6ef", - "sha256:5e8452ad6b2863709f8b3d615955aa0807bc093c34b8e25b3b52097fe421cb7f", - "sha256:63d71eceb9cad35d47d71f78edac41fcd01ff10cacaa64e473d1aec13fa02df2", - "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804", - "sha256:73b8870fe1c9a201b8c0d12c94fe781b918664766728783241a79e0468427e4f", - "sha256:767a97e6900edd11c762be96d82d13a1d7c4fc4b329f054e88b57cdc21fded94", - "sha256:7ccec9e72660b10f8e283e91aa0295975c7bd85c204011d9f5eb69310555cf30", - "sha256:7d0aebeb2392f19b184e3fdd9e651b0e39cd0f195cdb93328bd124a1d455cd0e", - "sha256:7e889c9df381a2433802991288a61e5a19ceb4f61bd14f5c9fa165655dcb1fd1", - "sha256:7f33a92a2fde08e8c6b0c61815521324fc1612f397abf96eed86b8e31618fdb4", - "sha256:8a4076a2b3ba5b004b8cffca6afe18a3b2c5c9ef679b4d1e9859cf76295f8d4f", - "sha256:8bd1cde83e4684324e6ee19adfc25fd649d04078179890be7b29f76b501de8e4", - "sha256:8e57da93e24303a883146510a434f0faf2f1e7e659f3041abc4e3fb3f6702a9f", - "sha256:9602044ff047043430452bc3a2089743fa85da829e6fc9ee0025351d66c332b6", - "sha256:96264854fedbea933a9ca4b7e0c745728f01380691687b7365d18d9e977179c4", - "sha256:9c23fd8d08eb9c2af3faeedc8c56e134acdaf36e2117ee059d7defa655130e5f", - "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7", - "sha256:9ea345fda05bae217b6cce2acf3682ce3b13d0d16dd47d0de7080e5e21362421", - "sha256:9f26545b9940c4b46f0a9388fd04ee3ad7064c4017b5a334dd450f616396590e", - "sha256:a2fd04ae4971b914e54fe459dd7edbbd3f2ba875d69e057d5e3c8e8cac094935", - "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c", - "sha256:ab2ef72f8605046115bc9aa8e9d14fd49086d405855f40b79ed9e5c1f9f4faea", - "sha256:ad2f41203e2808616292db5d7170cccf0c9f9c982d02544443c7eb0296e8b0c7", - "sha256:ad8c745ff9460a16b710e58e06a9dec11ebc0d8f4dd82091cefb579844d69868", - "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a", - "sha256:b2f317d1678002eee6fe85670039fb34a757972284614638f82b903a03feacdc", - "sha256:b426495fb9140e75719b3ae70a5e8dd3a79def0ae3c6c27e012fc59f16544a4a", - "sha256:b491e42183e8fcc9901d8dcd8ae644ff785590f1727f76ca86e731c61bfe6643", - "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01", - "sha256:c1b90407ced992331dd6d4f1355819ea1c274cc1ee4d5b7046c6761f9ec11829", - "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93", - "sha256:cc93a4121d87d9f12739fc8fab0a95f78444e571ed63e40bfc78cd5abe700ac9", - "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78", - "sha256:d1929da615840969929e8878d7951b31afe0bac883d84418f92e5755d7b49508", - "sha256:d9e6b0e519067caa4fd7fb72e3e8002d16a68e84e62e7291092a5433763dc0dd", - "sha256:e220e7562467dc8d589e31c1acd13438d82c03d7f385c9cd41a3f6d1d15807c1", - "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2", - "sha256:e6f3c0a3a1e73e88af384b2e8a0b9f4fb73245afd47589df2afcab6b638fa0e6", - "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261", - "sha256:eab7b040a8a873020113ba814b7db7fa935235e4cbaf8f3da17671baa1024863", - "sha256:f0ddc9337a0fb0e727785ad4f41163cc314376e82b31846d3835673786420ef1", - "sha256:f2c50bad73ed629cc326cc0f75aed8ecfb013f88c5af116f33df556ed47143eb", - "sha256:f414f37b244f2a97e79b98d48c5ff0789a0b4b4609b17d64fa81771ad780e415", - "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000", - "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1", - "sha256:fdb239f47328581e2ec7744ab5911f97afb10752332a6dd3d98e14e429e1a9e7", - "sha256:fe7cdd3f7d1df43200e1c80f1aed86bb36033bf65e3c7cf46a2b97a253ef8798" - ], - "markers": "python_version >= '3.9'", - "version": "==3.11.18" - }, - "aiosignal": { - "hashes": [ - "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", - "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54" - ], - "markers": "python_version >= '3.9'", - "version": "==1.3.2" - }, "annotated-types": { "hashes": [ "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", @@ -184,6 +81,7 @@ "sha256:f3a4d79f499f567d327d2d8846d02ad18244d2927f88858a42a2438f52d9a0ef" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==1.38.8" }, "botocore": { @@ -272,7 +170,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.17.1" }, "charset-normalizer": { @@ -426,10 +324,9 @@ }, "dbrepo": { "hashes": [ - "sha256:5dbd2230489d0af8eb4509b7231764289972e6282037b27e97a3824a5d234090" + "sha256:76f0ab97d1e914a779aa51b5e5a17591b2f1c88f15dc9df27273deb4dc7ed125" ], - "path": "./lib/dbrepo-1.8.2rc6.tar.gz", - "version": "==1.8.2rc6" + "path": "./lib/dbrepo-1.8.2.tar.gz" }, "events": { "hashes": [ @@ -443,6 +340,7 @@ "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==1.2.2" }, "flasgger": { @@ -458,6 +356,7 @@ "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==3.1.0" }, "flask-cors": { @@ -466,6 +365,7 @@ "sha256:fa5cb364ead54bbf401a26dbf03030c6b18fb2fcaf70408096a572b409586b0c" ], "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4.0'", "version": "==5.0.1" }, "flask-httpauth": { @@ -482,118 +382,9 @@ "sha256:8085d6757505b6f3291a2638c84d207e8f0ad0de662d1f46aa2f77e658a0c976" ], "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4'", "version": "==4.7.1" }, - "frozenlist": { - "hashes": [ - "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117", - "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2", - "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42", - "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812", - "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3", - "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a", - "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572", - "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa", - "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b", - "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626", - "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e", - "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d", - "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c", - "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530", - "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878", - "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e", - "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869", - "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd", - "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603", - "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606", - "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85", - "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64", - "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f", - "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0", - "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c", - "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4", - "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103", - "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02", - "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191", - "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0", - "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e", - "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791", - "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983", - "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f", - "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff", - "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8", - "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860", - "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8", - "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25", - "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f", - "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba", - "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24", - "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e", - "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd", - "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911", - "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c", - "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595", - "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c", - "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc", - "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2", - "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75", - "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4", - "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0", - "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe", - "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249", - "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c", - "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576", - "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b", - "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770", - "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046", - "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584", - "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497", - "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f", - "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f", - "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b", - "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f", - "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d", - "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a", - "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e", - "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68", - "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189", - "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9", - "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8", - "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1", - "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0", - "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3", - "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29", - "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0", - "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215", - "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590", - "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c", - "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821", - "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1", - "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769", - "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506", - "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3", - "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348", - "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad", - "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a", - "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad", - "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6", - "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45", - "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188", - "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e", - "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70", - "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70", - "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1", - "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106", - "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd", - "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc", - "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352", - "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91", - "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1", - "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f" - ], - "markers": "python_version >= '3.9'", - "version": "==1.6.0" - }, "gevent": { "hashes": [ "sha256:03587078c402aee27231ecaabd81aec1e8b3de2629830fbd4486e2d09e638ddc", @@ -637,6 +428,7 @@ "sha256:ff92408011d78e4ffe297331ff30cded39a3e22845ba237516c646f6a485a241" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==25.4.2" }, "greenlet": { @@ -698,6 +490,7 @@ "sha256:ff38c869ed30fff07f1452d9a204ece1ec6d3c0870e0ba6e478ce7c1515acf22" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==3.2.1" }, "gunicorn": { @@ -706,6 +499,7 @@ "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==23.0.0" }, "idna": { @@ -761,6 +555,7 @@ "sha256:61c9170f92e736b530655e75374681d4fcca9cfa8763ab42be57353b2b203494" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==1.3.1" }, "markupsafe": { @@ -836,6 +631,7 @@ "sha256:c06ef7a43e5d67107067f77b6c07ebdd68733e5aa7eed03076472410ca19d876" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==7.2.15" }, "mistune": { @@ -846,116 +642,6 @@ "markers": "python_version >= '3.8'", "version": "==3.1.3" }, - "multidict": { - "hashes": [ - "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756", - "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8", - "sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef", - "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c", - "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5", - "sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8", - "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db", - "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713", - "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44", - "sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378", - "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5", - "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676", - "sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08", - "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea", - "sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9", - "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9", - "sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e", - "sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b", - "sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508", - "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1", - "sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852", - "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac", - "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde", - "sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8", - "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504", - "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5", - "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02", - "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4", - "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec", - "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a", - "sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666", - "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc", - "sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf", - "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790", - "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8", - "sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589", - "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d", - "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07", - "sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56", - "sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21", - "sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7", - "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", - "sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343", - "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9", - "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4", - "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a", - "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427", - "sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459", - "sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6", - "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208", - "sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229", - "sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0", - "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474", - "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817", - "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd", - "sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618", - "sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5", - "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3", - "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124", - "sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1", - "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb", - "sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7", - "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3", - "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375", - "sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39", - "sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752", - "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0", - "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188", - "sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451", - "sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078", - "sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7", - "sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7", - "sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f", - "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b", - "sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f", - "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c", - "sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291", - "sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897", - "sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887", - "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1", - "sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685", - "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf", - "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6", - "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731", - "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507", - "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b", - "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae", - "sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777", - "sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7", - "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be", - "sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df", - "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054", - "sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2", - "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124", - "sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c", - "sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840", - "sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8", - "sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd", - "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8", - "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3", - "sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e", - "sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2", - "sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1", - "sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad" - ], - "markers": "python_version >= '3.9'", - "version": "==6.4.3" - }, "numpy": { "hashes": [ "sha256:0255732338c4fdd00996c0421884ea8a3651eea555c3a56b84892b66f696eb70", @@ -1015,6 +701,7 @@ "sha256:f5045039100ed58fa817a6227a356240ea1b9a1bc141018864c306c1a16d4175" ], "index": "pypi", + "markers": "python_version >= '3.10'", "version": "==2.2.5" }, "opensearch-py": { @@ -1023,6 +710,7 @@ "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda" ], "index": "pypi", + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==2.8.0" }, "packaging": { @@ -1079,6 +767,7 @@ "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==2.2.3" }, "pika": { @@ -1105,110 +794,6 @@ "index": "pypi", "version": "==0.23.2" }, - "propcache": { - "hashes": [ - "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", - "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", - "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", - "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", - "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", - "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", - "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", - "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", - "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", - "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", - "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", - "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", - "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", - "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", - "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", - "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", - "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", - "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", - "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", - "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", - "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", - "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", - "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", - "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", - "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", - "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", - "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", - "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", - "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", - "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", - "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", - "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", - "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", - "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", - "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", - "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", - "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", - "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", - "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", - "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", - "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", - "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", - "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", - "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", - "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", - "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", - "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", - "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", - "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", - "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", - "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", - "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", - "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", - "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", - "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", - "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", - "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", - "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", - "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", - "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", - "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", - "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", - "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", - "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", - "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", - "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", - "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", - "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", - "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", - "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", - "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", - "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", - "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", - "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", - "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", - "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", - "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", - "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", - "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", - "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", - "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", - "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", - "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", - "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", - "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", - "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", - "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", - "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", - "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", - "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", - "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", - "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", - "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", - "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", - "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", - "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", - "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", - "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" - ], - "markers": "python_version >= '3.9'", - "version": "==0.3.1" - }, "pycparser": { "hashes": [ "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", @@ -1258,6 +843,7 @@ "sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==2.11.4" }, "pydantic-core": { @@ -1461,6 +1047,7 @@ "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==2.32.3" }, "rpds-py": { @@ -1593,11 +1180,11 @@ }, "setuptools": { "hashes": [ - "sha256:a65cffc4fb86167e3020b3ef58e08226baad8b29a3b34ce2c9d07e901bac481d", - "sha256:ec8308eb180b2312062b1c5523204acf872cd8b0a9e6c2ae76431b22bc4065d7" + "sha256:31e2c58dbb67c99c289f51c16d899afedae292b978f8051efaf6262d8212f927", + "sha256:ea8e00d7992054c4c592aeb892f6ad51fe1b4d90cc6947cc45c45717c40ec537" ], "markers": "python_version >= '3.9'", - "version": "==80.3.0" + "version": "==80.3.1" }, "six": { "hashes": [ @@ -1607,22 +1194,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==1.17.0" }, - "tinydb": { - "hashes": [ - "sha256:f7dfc39b8d7fda7a1ca62a8dbb449ffd340a117c1206b68c50b1a481fb95181d", - "sha256:f97030ee5cbc91eeadd1d7af07ab0e48ceb04aa63d4a983adbaca4cba16e86c3" - ], - "markers": "python_version >= '3.8' and python_version < '4.0'", - "version": "==4.8.2" - }, - "tuspy": { - "hashes": [ - "sha256:156734eac5c61a046cfecd70f14119f05be92cce198eb5a1a99a664482bedb89", - "sha256:7fc5ac8fb25de37c96c90213f83a1ffdede7f48a471cb5a15a2f57846828a79a" - ], - "markers": "python_full_version >= '3.5.3'", - "version": "==1.1.0" - }, "typing-extensions": { "hashes": [ "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", @@ -1663,116 +1234,6 @@ "markers": "python_version >= '3.9'", "version": "==3.1.3" }, - "yarl": { - "hashes": [ - "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9", - "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa", - "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61", - "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2", - "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2", - "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33", - "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902", - "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2", - "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914", - "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0", - "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0", - "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569", - "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f", - "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7", - "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20", - "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00", - "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1", - "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc", - "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f", - "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a", - "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd", - "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c", - "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f", - "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5", - "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d", - "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501", - "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3", - "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0", - "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26", - "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2", - "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c", - "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c", - "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae", - "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de", - "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a", - "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe", - "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8", - "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124", - "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb", - "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc", - "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2", - "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac", - "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307", - "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58", - "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e", - "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e", - "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62", - "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b", - "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe", - "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda", - "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5", - "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64", - "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229", - "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62", - "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6", - "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d", - "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791", - "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672", - "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb", - "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94", - "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a", - "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10", - "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e", - "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9", - "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5", - "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da", - "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c", - "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a", - "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d", - "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195", - "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594", - "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8", - "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634", - "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051", - "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8", - "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e", - "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384", - "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076", - "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656", - "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018", - "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19", - "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a", - "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4", - "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2", - "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64", - "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145", - "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7", - "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995", - "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6", - "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f", - "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f", - "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487", - "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9", - "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a", - "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d", - "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f", - "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1", - "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22", - "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d", - "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c", - "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877", - "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5", - "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867", - "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3" - ], - "markers": "python_version >= '3.9'", - "version": "==1.20.0" - }, "zope.event": { "hashes": [ "sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26", @@ -1939,7 +1400,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.17.1" }, "charset-normalizer": { @@ -2107,6 +1568,7 @@ "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==7.8.0" }, "docker": { @@ -2145,6 +1607,7 @@ "sha256:c06ef7a43e5d67107067f77b6c07ebdd68733e5aa7eed03076472410ca19d876" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==7.2.15" }, "opensearch-py": { @@ -2153,6 +1616,7 @@ "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda" ], "index": "pypi", + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==2.8.0" }, "packaging": { @@ -2220,6 +1684,7 @@ "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==8.3.5" }, "python-dateutil": { @@ -2236,6 +1701,7 @@ "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==2.32.3" }, "requests-mock": { @@ -2244,6 +1710,7 @@ "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==1.12.1" }, "six": { @@ -2266,6 +1733,7 @@ "sha256:54d330d085c0a11fc5da0b001af87aec4dd3e814104376bf7513e8646c77442a" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.0.1rc1" }, "testcontainers-opensearch": { @@ -2273,6 +1741,7 @@ "sha256:0bdf270b5b7f53915832f7c31dd2bd3ffdc20b534ea6b32231cc7003049bd0e1" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.0.1rc1" }, "typing-extensions": { diff --git a/dbrepo-analyse-service/app.py b/dbrepo-analyse-service/app.py index e567aef7c3153a9e2faa47afdd6453d0caf31759..abf21202c8dbf6de8020a6e12220c7ed4d3a0820 100644 --- a/dbrepo-analyse-service/app.py +++ b/dbrepo-analyse-service/app.py @@ -28,17 +28,32 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', + }, + 'ecs': { + 'format': '{"@timestamp": "%(asctime)s", "log.level": "%(levelname)s", "log.logger": "%(module)s", "message": "%(message)s", "service_name": "analyse-service", "service_version": "1.8.2"}', + 'datefmt': '%Y-%m-%dT%H:%M:%S' + }, + }, + 'handlers': { + 'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'simple' + }, + 'file': { + 'class': 'logging.handlers.TimedRotatingFileHandler', + 'formatter': 'ecs', + 'filename': '/var/log/app/service/analyse/app.log', + 'when': 'm', + 'interval': 1, + 'backupCount': 5, + 'encoding': 'utf8' }, }, - 'handlers': {'wsgi': { - 'class': 'logging.StreamHandler', - 'stream': 'ext://flask.logging.wsgi_errors_stream', - 'formatter': 'simple' # default - }}, 'root': { 'level': 'DEBUG', - 'handlers': ['wsgi'] + 'handlers': ['wsgi', 'file'] } }) @@ -59,8 +74,8 @@ swagger_config = { "headers": [], "specs": [ { - "endpoint": "api-analyse", - "route": "/api-analyse.json", + "endpoint": "api-docs", + "route": "/api-docs.json", "rule_filter": lambda rule: rule.endpoint.startswith('actuator') or rule.endpoint.startswith('analyse'), "model_filter": lambda tag: True, # all in } @@ -263,7 +278,7 @@ def get_health(): @app.route("/api/analyse/datatypes", methods=["GET"], endpoint="analyse_analyse_datatypes") @metrics.gauge(name='dbrepo_analyse_datatypes', description='Time needed to analyse datatypes of dataset') -@swag_from("as-yml/analyse_datatypes.yml") +@swag_from("/app/as-yml/analyse_datatypes.yml") def analyse_datatypes(): filename: str = request.args.get('filename') separator: str = request.args.get('separator') @@ -280,17 +295,17 @@ def analyse_datatypes(): logging.debug("determine datatype resulted in datatypes %s", res) return Response(res.model_dump_json(), mimetype="application/json"), 202 except OSError as e: - logging.error(f"Failed to determine data types: {e}") + logging.error(f"Failed to determine data types: {str(e).strip()}") return ApiError(status='BAD_REQUEST', message=str(e), code='error.analyse.invalid').model_dump_json(), 400 except ClientError as e: - logging.error(f"Failed to determine separator: {e}") + logging.error(f"Failed to determine separator: {str(e).strip()}") return ApiError(status='NOT_FOUND', message='Failed to find csv', code='error.analyse.missing').model_dump_json(), 404 @app.route("/api/analyse/keys", methods=["GET"], endpoint="analyse_analyse_keys") @metrics.gauge(name='dbrepo_analyse_keys', description='Time needed to analyse keys of dataset') -@swag_from("as-yml/analyse_keys.yml") +@swag_from("/app/as-yml/analyse_keys.yml") def analyse_keys(): filename: str = request.args.get("filename") separator: str = request.args.get('separator') @@ -305,5 +320,5 @@ def analyse_keys(): logging.info(f"Determined list of primary keys: {res}") return Response(dumps(res), mimetype="application/json"), 202 except OSError as e: - logging.error(f"Failed to determine primary key: {e}") + logging.error(f"Failed to determine primary key: {str(e).strip()}") return ApiError(status='BAD_REQUEST', message=str(e), code='analyse.database.invalid').model_dump_json(), 400 diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.8.2-py3-none-any.whl index 6a21f512b36f30367f641061c8efeba90108a6c7..48beeb5ebf61c7cca654e0ee66343fac70bb4d53 100644 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2-py3-none-any.whl and b/dbrepo-analyse-service/lib/dbrepo-1.8.2-py3-none-any.whl differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.8.2.tar.gz index f98a45d02b802376ff7614c008eec8783f281896..3e3b65b6b93a602ee26c2f4d4c71c2d3cd331211 100644 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2.tar.gz and b/dbrepo-analyse-service/lib/dbrepo-1.8.2.tar.gz differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl deleted file mode 100644 index 86a1af2af41c44d35a4da7a472c180854f0cd82c..0000000000000000000000000000000000000000 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc3.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.8.2rc3.tar.gz deleted file mode 100644 index 9c03ed275c6da5b2eef3619c59269f398d59c7de..0000000000000000000000000000000000000000 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc3.tar.gz and /dev/null differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl deleted file mode 100644 index 5a0dbc7c95592f2e70bed13fa33d85cc6cdf7811..0000000000000000000000000000000000000000 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc4.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.8.2rc4.tar.gz deleted file mode 100644 index 1dbc78c989362d4d0c3750b1ad942abe46f205dd..0000000000000000000000000000000000000000 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc4.tar.gz and /dev/null differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl deleted file mode 100644 index 50bf1b8195987f6f8d23a36f34bc0f912b6fd9b3..0000000000000000000000000000000000000000 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc5.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.8.2rc5.tar.gz deleted file mode 100644 index be8784437f111e2d4a5cdac36baf77605114dfa5..0000000000000000000000000000000000000000 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc5.tar.gz and /dev/null differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl deleted file mode 100644 index 8e4c745a2ce782c174d5e1db7eef22d51d26624c..0000000000000000000000000000000000000000 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc6.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.8.2rc6.tar.gz deleted file mode 100644 index 279243fd37fe033fe4aa740361b5e9a370516924..0000000000000000000000000000000000000000 Binary files a/dbrepo-analyse-service/lib/dbrepo-1.8.2rc6.tar.gz and /dev/null differ diff --git a/dbrepo-auth-service/listeners/src/main/java/at/tuwien/Client.java b/dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/Client.java similarity index 81% rename from dbrepo-auth-service/listeners/src/main/java/at/tuwien/Client.java rename to dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/Client.java index c63e88618b792f4d85e52b4aee55c80e1a2f1db8..061c4d78fbb7bbaf2745207f93ad7a1b996c714f 100644 --- a/dbrepo-auth-service/listeners/src/main/java/at/tuwien/Client.java +++ b/dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/Client.java @@ -1,6 +1,7 @@ -package at.tuwien; +package at.ac.tuwien.ifs.dbrepo; -import org.jboss.logging.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.IOException; @@ -13,12 +14,13 @@ import java.nio.charset.Charset; import java.util.Base64; public class Client { - private static final Logger log = Logger.getLogger(Client.class); + + private static final Logger log = LoggerFactory.getLogger(Client.class); public static void postService(String data) throws IOException { try { final String urlString = System.getenv("METADATA_SERVICE_ENDPOINT"); - log.debugf("METADATA_SERVICE_ENDPOINT: %s", urlString); + log.debug("env.METADATA_SERVICE_ENDPOINT: {}", urlString); if (urlString == null || urlString.isEmpty()) { throw new IllegalArgumentException("Environment variable METADATA_SERVICE_ENDPOINT is not set or is empty."); } @@ -26,35 +28,31 @@ public class Client { if (systemUsername == null || systemUsername.isEmpty()) { throw new IllegalArgumentException("Environment variable SYSTEM_USERNAME is not set or is empty."); } - log.debugf("SYSTEM_USERNAME: %s", systemUsername); + log.debug("env.SYSTEM_USERNAME: {}", systemUsername); final String systemPassword = System.getenv("SYSTEM_PASSWORD"); if (systemPassword == null || systemPassword.isEmpty()) { throw new IllegalArgumentException("Environment variable SYSTEM_PASSWORD is not set or is empty."); } final URL url = URI.create(urlString + "/api/user").toURL(); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + log.debug("url: {}", url); + final HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setRequestMethod("POST"); final String token = systemUsername + ":" + systemPassword; conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString(token.getBytes( Charset.defaultCharset()))); conn.setRequestProperty("Content-Type", "application/json; utf-8"); - - OutputStream os = conn.getOutputStream(); + final OutputStream os = conn.getOutputStream(); os.write(data.getBytes()); os.flush(); - final int responseCode = conn.getResponseCode(); if (responseCode != HttpURLConnection.HTTP_CREATED && responseCode != HttpURLConnection.HTTP_OK) { throw new RuntimeException("Failed : HTTP error code : " + responseCode); } - final BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String output; - log.debugf("Output from Server .... \n"); while ((output = br.readLine()) != null) { - System.out.println(output); - log.debugf("Input from Server: %s", output); + log.debug("input from server: {}", output); } conn.disconnect(); } catch (IOException e) { diff --git a/dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/CreateEventListenerProvider.java b/dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/CreateEventListenerProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..7b47c0919cf9ac200ecdb203700f807e05a04901 --- /dev/null +++ b/dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/CreateEventListenerProvider.java @@ -0,0 +1,91 @@ +package at.ac.tuwien.ifs.dbrepo; + +import org.keycloak.events.Event; +import org.keycloak.events.EventListenerProvider; +import org.keycloak.events.EventType; +import org.keycloak.events.admin.AdminEvent; +import org.keycloak.events.admin.OperationType; +import org.keycloak.events.admin.ResourceType; +import org.keycloak.models.KeycloakSession; +import org.keycloak.models.RealmModel; +import org.keycloak.models.RealmProvider; +import org.keycloak.models.UserModel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CreateEventListenerProvider implements EventListenerProvider { + + private static final Logger log = LoggerFactory.getLogger(CreateEventListenerProvider.class); + + private final KeycloakSession session; + private final RealmProvider model; + + public CreateEventListenerProvider(KeycloakSession session) { + this.session = session; + this.model = session.realms(); + } + + @Override + public void onEvent(Event event) { + log.atDebug() + .setMessage("received " + event.getType().toString() + " event") + .addKeyValue("event.type", event.getType()) + .addKeyValue("event.realm_id", event.getRealmId()) + .addKeyValue("event.user_id", event.getUserId()) + .log(); + if (EventType.REGISTER.equals(event.getType()) || EventType.IDENTITY_PROVIDER_FIRST_LOGIN.equals(event.getType())) { + final RealmModel realm = this.model.getRealm(event.getRealmId()); + sendUserData(this.session.users().getUserById(realm, event.getUserId())); + } + } + + @Override + public void onEvent(AdminEvent adminEvent, boolean b) { + log.atDebug() + .setMessage("received admin event") + .addKeyValue("event.realm_id", adminEvent.getRealmId()) + .addKeyValue("event.operation_type", adminEvent.getOperationType()) + .addKeyValue("event.resource_type", adminEvent.getResourceType()) + .addKeyValue("event.resource_path", adminEvent.getResourcePath()) + .log(); + if (ResourceType.USER.equals(adminEvent.getResourceType()) + && OperationType.CREATE.equals(adminEvent.getOperationType())) { + final RealmModel realm = this.model.getRealm(adminEvent.getRealmId()); + sendUserData(this.session.users().getUserById(realm, adminEvent.getResourcePath().substring(6))); + } + } + + private void sendUserData(UserModel user) { + final String userData = "{" + + quoteAttr("id", user.getId()) + ", " + + quoteAttr("username", user.getUsername()) + ", " + + quoteAttr("ldap_id", user.getFirstAttribute("LDAP_ID")) + ", " + + quoteAttr("given_name", user.getFirstName()) + ", " + + quoteAttr("family_name", user.getLastName()) + + "}"; + try { + Client.postService(userData); + log.atInfo() + .addKeyValue("id", user.getId()) + .addKeyValue("username", user.getUsername()) + .addKeyValue("ldap_id", user.getFirstAttribute("LDAP_ID")) + .addKeyValue("given_name", user.getFirstName()) + .addKeyValue("family_name", user.getLastName()) + .setMessage("Created new user in metadata service: " + user.getId()) + .log(); + } catch (Exception e) { + log.error("Failed to call metadata service: {}", e.getMessage()); + } + } + + private static String quoteAttr(String key, String value) { + if (value == null || value.isBlank() || value.isEmpty() || value.contentEquals(" ")) { + return "\"" + key + "\": null"; + } + return "\"" + key + "\": \"" + value + "\""; + } + + @Override + public void close() { + } +} diff --git a/dbrepo-auth-service/listeners/src/main/java/at/tuwien/CreateEventListenerProviderFactory.java b/dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/CreateEventListenerProviderFactory.java similarity index 95% rename from dbrepo-auth-service/listeners/src/main/java/at/tuwien/CreateEventListenerProviderFactory.java rename to dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/CreateEventListenerProviderFactory.java index 61477ffa33169504a3368d11d0750c9c1404e160..5410647bba19c2b1f1ef1f1a62100f9c9ed2b77c 100644 --- a/dbrepo-auth-service/listeners/src/main/java/at/tuwien/CreateEventListenerProviderFactory.java +++ b/dbrepo-auth-service/listeners/src/main/java/at/ac/tuwien/ifs/dbrepo/CreateEventListenerProviderFactory.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.ac.tuwien.ifs.dbrepo; import org.keycloak.Config; import org.keycloak.events.EventListenerProvider; diff --git a/dbrepo-auth-service/listeners/src/main/java/at/tuwien/CreateEventListenerProvider.java b/dbrepo-auth-service/listeners/src/main/java/at/tuwien/CreateEventListenerProvider.java deleted file mode 100644 index ea4aa7794b6f26167da704e4c12057cf9d8c5c42..0000000000000000000000000000000000000000 --- a/dbrepo-auth-service/listeners/src/main/java/at/tuwien/CreateEventListenerProvider.java +++ /dev/null @@ -1,132 +0,0 @@ -package at.tuwien; - -import org.jboss.logging.Logger; -import org.keycloak.events.Event; -import org.keycloak.events.EventListenerProvider; -import org.keycloak.events.EventType; -import org.keycloak.events.admin.AdminEvent; -import org.keycloak.events.admin.OperationType; -import org.keycloak.events.admin.ResourceType; -import org.keycloak.models.KeycloakSession; -import org.keycloak.models.RealmModel; -import org.keycloak.models.RealmProvider; -import org.keycloak.models.UserModel; - -import java.util.StringJoiner; - -public class CreateEventListenerProvider implements EventListenerProvider { - - private static final Logger log = Logger.getLogger(CreateEventListenerProvider.class); - - private final KeycloakSession session; - private final RealmProvider model; - - public CreateEventListenerProvider(KeycloakSession session) { - this.session = session; - this.model = session.realms(); - } - - @Override - public void onEvent(Event event) { - if (EventType.REGISTER.equals(event.getType()) || EventType.IDENTITY_PROVIDER_FIRST_LOGIN.equals(event.getType())) { - event.getDetails().forEach((key, value) -> log.debugf("%s : %s", key, value)); - RealmModel realm = this.model.getRealm(event.getRealmId()); - UserModel user = this.session.users().getUserById(realm, event.getUserId()); - sendUserData(user); - } - - } - - @Override - public void onEvent(AdminEvent adminEvent, boolean b) { - log.debug("onEvent(AdminEvent)"); - log.debugf("Resource path: %s", adminEvent.getResourcePath()); - log.debugf("Resource type: %s", adminEvent.getResourceType()); - log.debugf("Operation type: %s", adminEvent.getOperationType()); - log.debugf("AdminEvent.toString(): %s", toString(adminEvent)); - if (ResourceType.USER.equals(adminEvent.getResourceType()) - && OperationType.CREATE.equals(adminEvent.getOperationType())) { - RealmModel realm = this.model.getRealm(adminEvent.getRealmId()); - UserModel user = this.session.users().getUserById(realm, adminEvent.getResourcePath().substring(6)); - - sendUserData(user); - } - } - - private void sendUserData(UserModel user) { - final String userData = "{" + - quoteAttr("id", user.getId()) + ", " + - quoteAttr("username", user.getUsername()) + ", " + - quoteAttr("ldap_id", user.getFirstAttribute("LDAP_ID")) + ", " + - quoteAttr("given_name", user.getFirstName()) + ", " + - quoteAttr("family_name", user.getLastName()) + - "}"; - try { - log.debugf("create new user in API: %s", userData); - Client.postService(userData); - } catch (Exception e) { - log.errorf("Failed to call API: %s", e); - } - } - - private static String quoteAttr(String key, String value) { - if (value == null || value.isBlank() || value.isEmpty() || value.contentEquals(" ")) { - return "\"" + key + "\": null"; - } - return "\"" + key + "\": \"" + value + "\""; - } - - @Override - public void close() { - } - - private String toString(Event event) { - final StringJoiner joiner = new StringJoiner(", "); - joiner.add("type=" + event.getType()) - .add("realmId=" + event.getRealmId()) - .add("clientId=" + event.getClientId()) - .add("userId=" + event.getUserId()) - .add("ipAddress=" + event.getIpAddress()); - if (event.getError() != null) { - joiner.add("error=" + event.getError()); - } - if (event.getDetails() != null) { - event.getDetails().forEach((key, value) -> { - if (value == null || !value.contains(" ")) { - joiner.add(key + "=" + value); - } else { - joiner.add(key + "='" + value + "'"); - } - }); - } - return joiner.toString(); - } - - private String toString(AdminEvent event) { - RealmModel realm = this.model.getRealm(event.getRealmId()); - UserModel newRegisteredUser = this.session.users().getUserById(realm, event.getAuthDetails().getUserId()); - - StringJoiner joiner = new StringJoiner(", "); - - joiner.add("operationType=" + event.getOperationType()) - .add("realmId=" + event.getAuthDetails().getRealmId()) - .add("clientId=" + event.getAuthDetails().getClientId()) - .add("userId=" + event.getAuthDetails().getUserId()); - - if (newRegisteredUser != null) { - joiner.add("email=" + newRegisteredUser.getEmail()) - .add("username=" + newRegisteredUser.getUsername()) - .add("firstName=" + newRegisteredUser.getFirstName()) - .add("lastName=" + newRegisteredUser.getLastName()); - } - - joiner.add("ipAddress=" + event.getAuthDetails().getIpAddress()) - .add("resourcePath=" + event.getResourcePath()); - - if (event.getError() != null) { - joiner.add("error=" + event.getError()); - } - - return joiner.toString(); - } -} diff --git a/dbrepo-auth-service/listeners/src/main/resources/META-INF/services/org.keycloak.events.EventListenerProviderFactory b/dbrepo-auth-service/listeners/src/main/resources/META-INF/services/org.keycloak.events.EventListenerProviderFactory index df3c5521f0958fed5fadb4f006d8ee6eb50f97c2..da90b255da8add6f57dc05f662b8448353416ffd 100644 --- a/dbrepo-auth-service/listeners/src/main/resources/META-INF/services/org.keycloak.events.EventListenerProviderFactory +++ b/dbrepo-auth-service/listeners/src/main/resources/META-INF/services/org.keycloak.events.EventListenerProviderFactory @@ -1 +1 @@ -at.tuwien.CreateEventListenerProviderFactory \ No newline at end of file +at.ac.tuwien.ifs.dbrepo.CreateEventListenerProviderFactory \ No newline at end of file diff --git a/dbrepo-auth-service/listeners/src/test/java/at/tuwien/EventListenerIntegrationTest.java b/dbrepo-auth-service/listeners/src/test/java/at/ac/tuwien/ifs/dbrepo/EventListenerIntegrationTest.java similarity index 95% rename from dbrepo-auth-service/listeners/src/test/java/at/tuwien/EventListenerIntegrationTest.java rename to dbrepo-auth-service/listeners/src/test/java/at/ac/tuwien/ifs/dbrepo/EventListenerIntegrationTest.java index c3d6ee94ccd764d16d589b33b51d501e2a2a3d82..5374411b132942f277f7f9b4a738404f916c1f36 100644 --- a/dbrepo-auth-service/listeners/src/test/java/at/tuwien/EventListenerIntegrationTest.java +++ b/dbrepo-auth-service/listeners/src/test/java/at/ac/tuwien/ifs/dbrepo/EventListenerIntegrationTest.java @@ -1,4 +1,4 @@ -package at.tuwien; +package at.ac.tuwien.ifs.dbrepo; import dasniko.testcontainers.keycloak.KeycloakContainer; import org.testcontainers.images.PullPolicy; diff --git a/dbrepo-dashboard-service/Dockerfile b/dbrepo-dashboard-service/Dockerfile index 62caad802ff5e7a852e9d47bbd8d41c79bb2e261..62589ba867cf6f48a3d62df3c0759c7611f55738 100644 --- a/dbrepo-dashboard-service/Dockerfile +++ b/dbrepo-dashboard-service/Dockerfile @@ -18,6 +18,9 @@ RUN adduser -D dbrepo --uid 1001 WORKDIR /app +RUN mkdir -p /var/log/app/service/dashboard && \ + chown -R 1001:1001 /var/log/app + USER 1001 COPY --chown=1001 ./app.py ./app.py diff --git a/dbrepo-dashboard-service/Pipfile b/dbrepo-dashboard-service/Pipfile index fe85565b1bbab11ba1cb0d7f35da7cf9239b2b92..52e7bf373129b51535c5fb3205b4f537e1f642de 100644 --- a/dbrepo-dashboard-service/Pipfile +++ b/dbrepo-dashboard-service/Pipfile @@ -12,7 +12,7 @@ prometheus-flask-exporter = "*" python-dotenv = "~=1.0" jwt = "~=1.3" pytest = "*" -dbrepo = {path = "./lib/dbrepo-1.8.2rc6.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.8.2.tar.gz"} gunicorn = "*" pydantic = "*" flask_httpauth = "*" diff --git a/dbrepo-dashboard-service/Pipfile.lock b/dbrepo-dashboard-service/Pipfile.lock index adb9f9e5c88750e895f209e5a9bf9c9c2c2005d4..9c02ba5f1c284db4332ebc333a0dd50df26210de 100644 --- a/dbrepo-dashboard-service/Pipfile.lock +++ b/dbrepo-dashboard-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "56e335dd8953adb91791097ae278c8a2530963b46507d05894667d1e599027bd" + "sha256": "422a07d8107ead238fa1aaf9e6abfabab2d4eed49e272823aa08e6525708c525" }, "pipfile-spec": 6, "requires": { @@ -16,109 +16,6 @@ ] }, "default": { - "aiohappyeyeballs": { - "hashes": [ - "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", - "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8" - ], - "markers": "python_version >= '3.9'", - "version": "==2.6.1" - }, - "aiohttp": { - "hashes": [ - "sha256:0700055a6e05c2f4711011a44364020d7a10fbbcd02fbf3e30e8f7e7fddc8717", - "sha256:0a8d8f20c39d3fa84d1c28cdb97f3111387e48209e224408e75f29c6f8e0861d", - "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8", - "sha256:0f421843b0f70740772228b9e8093289924359d306530bcd3926f39acbe1adda", - "sha256:106032eaf9e62fd6bc6578c8b9e6dc4f5ed9a5c1c7fb2231010a1b4304393421", - "sha256:11d5391946605f445ddafda5eab11caf310f90cdda1fd99865564e3164f5cff9", - "sha256:122f3e739f6607e5e4c6a2f8562a6f476192a682a52bda8b4c6d4254e1138f4d", - "sha256:12a62691eb5aac58d65200c7ae94d73e8a65c331c3a86a2e9670927e94339ee8", - "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3", - "sha256:1596ebf17e42e293cbacc7a24c3e0dc0f8f755b40aff0402cb74c1ff6baec1d3", - "sha256:25557982dd36b9e32c0a3357f30804e80790ec2c4d20ac6bcc598533e04c6361", - "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137", - "sha256:2c828b6d23b984255b85b9b04a5b963a74278b7356a7de84fda5e3b76866597b", - "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd", - "sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8", - "sha256:3849ead845e8444f7331c284132ab314b4dac43bfae1e3cf350906d4fff4620f", - "sha256:3a621d85e85dccabd700294494d7179ed1590b6d07a35709bb9bd608c7f5dd1d", - "sha256:3b8d2b42073611c860a37f718b3d61ae8b4c2b124b2e776e2c10619d920350ec", - "sha256:3cc314245deb311364884e44242e00c18b5896e4fe6d5f942e7ad7e4cb640adb", - "sha256:3cec21dd68924179258ae14af9f5418c1ebdbba60b98c667815891293902e5e0", - "sha256:3d518ce32179f7e2096bf4e3e8438cf445f05fedd597f252de9f54c728574756", - "sha256:40fbf91f6a0ac317c0a07eb328a1384941872f6761f2e6f7208b63c4cc0a7ff6", - "sha256:427fdc56ccb6901ff8088544bde47084845ea81591deb16f957897f0f0ba1be9", - "sha256:44ff5625413fec55216da5eaa011cf6b0a2ed67a565914a212a51aa3755b0009", - "sha256:46533e6792e1410f9801d09fd40cbbff3f3518d1b501d6c3c5b218f427f6ff08", - "sha256:469ac32375d9a716da49817cd26f1916ec787fc82b151c1c832f58420e6d3533", - "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811", - "sha256:5199be2a2f01ffdfa8c3a6f5981205242986b9e63eb8ae03fd18f736e4840721", - "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118", - "sha256:554c918ec43f8480b47a5ca758e10e793bd7410b83701676a4782672d670da55", - "sha256:5691dc38750fcb96a33ceef89642f139aa315c8a193bbd42a0c33476fd4a1609", - "sha256:5bc0ae0a5e9939e423e065a3e5b00b24b8379f1db46046d7ab71753dfc7dd0e1", - "sha256:5c2eaa145bb36b33af1ff2860820ba0589e165be4ab63a49aebfd0981c173b66", - "sha256:5d61df4a05476ff891cff0030329fee4088d40e4dc9b013fac01bc3c745542c2", - "sha256:5e7007b8d1d09bce37b54111f593d173691c530b80f27c6493b928dabed9e6ef", - "sha256:5e8452ad6b2863709f8b3d615955aa0807bc093c34b8e25b3b52097fe421cb7f", - "sha256:63d71eceb9cad35d47d71f78edac41fcd01ff10cacaa64e473d1aec13fa02df2", - "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804", - "sha256:73b8870fe1c9a201b8c0d12c94fe781b918664766728783241a79e0468427e4f", - "sha256:767a97e6900edd11c762be96d82d13a1d7c4fc4b329f054e88b57cdc21fded94", - "sha256:7ccec9e72660b10f8e283e91aa0295975c7bd85c204011d9f5eb69310555cf30", - "sha256:7d0aebeb2392f19b184e3fdd9e651b0e39cd0f195cdb93328bd124a1d455cd0e", - "sha256:7e889c9df381a2433802991288a61e5a19ceb4f61bd14f5c9fa165655dcb1fd1", - "sha256:7f33a92a2fde08e8c6b0c61815521324fc1612f397abf96eed86b8e31618fdb4", - "sha256:8a4076a2b3ba5b004b8cffca6afe18a3b2c5c9ef679b4d1e9859cf76295f8d4f", - "sha256:8bd1cde83e4684324e6ee19adfc25fd649d04078179890be7b29f76b501de8e4", - "sha256:8e57da93e24303a883146510a434f0faf2f1e7e659f3041abc4e3fb3f6702a9f", - "sha256:9602044ff047043430452bc3a2089743fa85da829e6fc9ee0025351d66c332b6", - "sha256:96264854fedbea933a9ca4b7e0c745728f01380691687b7365d18d9e977179c4", - "sha256:9c23fd8d08eb9c2af3faeedc8c56e134acdaf36e2117ee059d7defa655130e5f", - "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7", - "sha256:9ea345fda05bae217b6cce2acf3682ce3b13d0d16dd47d0de7080e5e21362421", - "sha256:9f26545b9940c4b46f0a9388fd04ee3ad7064c4017b5a334dd450f616396590e", - "sha256:a2fd04ae4971b914e54fe459dd7edbbd3f2ba875d69e057d5e3c8e8cac094935", - "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c", - "sha256:ab2ef72f8605046115bc9aa8e9d14fd49086d405855f40b79ed9e5c1f9f4faea", - "sha256:ad2f41203e2808616292db5d7170cccf0c9f9c982d02544443c7eb0296e8b0c7", - "sha256:ad8c745ff9460a16b710e58e06a9dec11ebc0d8f4dd82091cefb579844d69868", - "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a", - "sha256:b2f317d1678002eee6fe85670039fb34a757972284614638f82b903a03feacdc", - "sha256:b426495fb9140e75719b3ae70a5e8dd3a79def0ae3c6c27e012fc59f16544a4a", - "sha256:b491e42183e8fcc9901d8dcd8ae644ff785590f1727f76ca86e731c61bfe6643", - "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01", - "sha256:c1b90407ced992331dd6d4f1355819ea1c274cc1ee4d5b7046c6761f9ec11829", - "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93", - "sha256:cc93a4121d87d9f12739fc8fab0a95f78444e571ed63e40bfc78cd5abe700ac9", - "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78", - "sha256:d1929da615840969929e8878d7951b31afe0bac883d84418f92e5755d7b49508", - "sha256:d9e6b0e519067caa4fd7fb72e3e8002d16a68e84e62e7291092a5433763dc0dd", - "sha256:e220e7562467dc8d589e31c1acd13438d82c03d7f385c9cd41a3f6d1d15807c1", - "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2", - "sha256:e6f3c0a3a1e73e88af384b2e8a0b9f4fb73245afd47589df2afcab6b638fa0e6", - "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261", - "sha256:eab7b040a8a873020113ba814b7db7fa935235e4cbaf8f3da17671baa1024863", - "sha256:f0ddc9337a0fb0e727785ad4f41163cc314376e82b31846d3835673786420ef1", - "sha256:f2c50bad73ed629cc326cc0f75aed8ecfb013f88c5af116f33df556ed47143eb", - "sha256:f414f37b244f2a97e79b98d48c5ff0789a0b4b4609b17d64fa81771ad780e415", - "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000", - "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1", - "sha256:fdb239f47328581e2ec7744ab5911f97afb10752332a6dd3d98e14e429e1a9e7", - "sha256:fe7cdd3f7d1df43200e1c80f1aed86bb36033bf65e3c7cf46a2b97a253ef8798" - ], - "markers": "python_version >= '3.9'", - "version": "==3.11.18" - }, - "aiosignal": { - "hashes": [ - "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", - "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54" - ], - "markers": "python_version >= '3.9'", - "version": "==1.3.2" - }, "annotated-types": { "hashes": [ "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", @@ -221,7 +118,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.17.1" }, "charset-normalizer": { @@ -375,10 +272,9 @@ }, "dbrepo": { "hashes": [ - "sha256:5dbd2230489d0af8eb4509b7231764289972e6282037b27e97a3824a5d234090" + "sha256:76f0ab97d1e914a779aa51b5e5a17591b2f1c88f15dc9df27273deb4dc7ed125" ], - "path": "./lib/dbrepo-1.8.2rc6.tar.gz", - "version": "==1.8.2rc6" + "path": "./lib/dbrepo-1.8.2.tar.gz" }, "flasgger": { "hashes": [ @@ -393,6 +289,7 @@ "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==2.3.3" }, "flask-cors": { @@ -417,124 +314,16 @@ "sha256:8085d6757505b6f3291a2638c84d207e8f0ad0de662d1f46aa2f77e658a0c976" ], "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4'", "version": "==4.7.1" }, - "frozenlist": { - "hashes": [ - "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117", - "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2", - "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42", - "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812", - "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3", - "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a", - "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572", - "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa", - "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b", - "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626", - "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e", - "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d", - "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c", - "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530", - "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878", - "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e", - "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869", - "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd", - "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603", - "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606", - "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85", - "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64", - "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f", - "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0", - "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c", - "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4", - "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103", - "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02", - "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191", - "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0", - "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e", - "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791", - "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983", - "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f", - "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff", - "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8", - "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860", - "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8", - "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25", - "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f", - "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba", - "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24", - "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e", - "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd", - "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911", - "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c", - "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595", - "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c", - "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc", - "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2", - "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75", - "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4", - "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0", - "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe", - "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249", - "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c", - "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576", - "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b", - "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770", - "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046", - "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584", - "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497", - "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f", - "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f", - "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b", - "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f", - "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d", - "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a", - "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e", - "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68", - "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189", - "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9", - "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8", - "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1", - "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0", - "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3", - "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29", - "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0", - "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215", - "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590", - "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c", - "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821", - "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1", - "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769", - "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506", - "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3", - "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348", - "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad", - "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a", - "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad", - "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6", - "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45", - "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188", - "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e", - "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70", - "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70", - "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1", - "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106", - "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd", - "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc", - "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352", - "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91", - "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1", - "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f" - ], - "markers": "python_version >= '3.9'", - "version": "==1.6.0" - }, "grafana-client": { "hashes": [ "sha256:2477a47b923fd0637947e620b0b777c641af18a3025464fa4505783dbf05dfcc", "sha256:8cb61bb2a87ec07bca10974df276b9a1a95bfdb63f3a696f065692ffc9b8c389" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==4.3.2" }, "gunicorn": { @@ -543,6 +332,7 @@ "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==23.0.0" }, "h11": { @@ -709,6 +499,7 @@ "sha256:61c9170f92e736b530655e75374681d4fcca9cfa8763ab42be57353b2b203494" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==1.3.1" }, "markupsafe": { @@ -786,116 +577,6 @@ "markers": "python_version >= '3.8'", "version": "==3.1.3" }, - "multidict": { - "hashes": [ - "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756", - "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8", - "sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef", - "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c", - "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5", - "sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8", - "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db", - "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713", - "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44", - "sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378", - "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5", - "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676", - "sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08", - "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea", - "sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9", - "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9", - "sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e", - "sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b", - "sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508", - "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1", - "sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852", - "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac", - "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde", - "sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8", - "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504", - "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5", - "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02", - "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4", - "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec", - "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a", - "sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666", - "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc", - "sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf", - "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790", - "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8", - "sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589", - "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d", - "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07", - "sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56", - "sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21", - "sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7", - "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", - "sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343", - "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9", - "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4", - "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a", - "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427", - "sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459", - "sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6", - "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208", - "sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229", - "sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0", - "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474", - "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817", - "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd", - "sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618", - "sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5", - "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3", - "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124", - "sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1", - "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb", - "sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7", - "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3", - "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375", - "sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39", - "sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752", - "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0", - "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188", - "sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451", - "sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078", - "sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7", - "sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7", - "sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f", - "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b", - "sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f", - "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c", - "sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291", - "sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897", - "sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887", - "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1", - "sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685", - "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf", - "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6", - "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731", - "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507", - "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b", - "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae", - "sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777", - "sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7", - "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be", - "sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df", - "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054", - "sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2", - "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124", - "sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c", - "sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840", - "sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8", - "sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd", - "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8", - "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3", - "sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e", - "sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2", - "sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1", - "sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad" - ], - "markers": "python_version >= '3.9'", - "version": "==6.4.3" - }, "niquests": { "hashes": [ "sha256:68e0a7e9f338466b3606945fffd11f75e3c90af7498aa9336ef03812323b7e36", @@ -962,7 +643,7 @@ "sha256:ee461a4eaab4f165b68780a6a1af95fb23a29932be7569b9fab666c407969051", "sha256:f5045039100ed58fa817a6227a356240ea1b9a1bc141018864c306c1a16d4175" ], - "markers": "python_version == '3.11'", + "markers": "python_version >= '3.10'", "version": "==2.2.5" }, "packaging": { @@ -1053,110 +734,6 @@ "index": "pypi", "version": "==0.23.2" }, - "propcache": { - "hashes": [ - "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", - "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", - "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", - "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", - "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", - "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", - "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", - "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", - "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", - "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", - "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", - "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", - "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", - "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", - "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", - "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", - "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", - "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", - "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", - "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", - "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", - "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", - "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", - "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", - "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", - "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", - "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", - "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", - "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", - "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", - "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", - "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", - "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", - "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", - "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", - "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", - "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", - "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", - "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", - "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", - "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", - "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", - "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", - "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", - "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", - "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", - "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", - "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", - "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", - "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", - "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", - "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", - "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", - "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", - "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", - "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", - "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", - "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", - "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", - "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", - "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", - "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", - "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", - "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", - "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", - "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", - "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", - "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", - "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", - "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", - "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", - "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", - "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", - "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", - "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", - "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", - "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", - "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", - "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", - "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", - "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", - "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", - "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", - "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", - "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", - "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", - "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", - "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", - "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", - "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", - "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", - "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", - "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", - "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", - "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", - "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", - "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", - "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" - ], - "markers": "python_version >= '3.9'", - "version": "==0.3.1" - }, "pycparser": { "hashes": [ "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", @@ -1171,6 +748,7 @@ "sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==2.11.4" }, "pydantic-core": { @@ -1292,6 +870,7 @@ "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==8.3.5" }, "python-dateutil": { @@ -1308,6 +887,7 @@ "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==1.1.0" }, "pytz": { @@ -1474,7 +1054,7 @@ "sha256:fa1bf4d9838e4c8cdf309500a908fc412cdc325a63e5c74ad88a794bed16c943", "sha256:fcdd2f6b1b1500bde96b442d777a563eadca1b825db0c42ac6aef45ad9ec3c4d" ], - "markers": "(platform_python_implementation != 'CPython' or python_full_version > '3.7.10') and (platform_system == 'Darwin' or platform_system == 'Windows' or platform_system == 'Linux') and (platform_machine == 'x86_64' or platform_machine == 's390x' or platform_machine == 'armv7l' or platform_machine == 'ppc64le' or platform_machine == 'ppc64' or platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'ARM64' or platform_machine == 'x86' or platform_machine == 'i686') and (platform_python_implementation == 'CPython' or (platform_python_implementation == 'PyPy' and python_version < '3.12'))", + "markers": "python_version >= '3.7'", "version": "==1.5.1" }, "referencing": { @@ -1621,22 +1201,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", "version": "==1.17.0" }, - "tinydb": { - "hashes": [ - "sha256:f7dfc39b8d7fda7a1ca62a8dbb449ffd340a117c1206b68c50b1a481fb95181d", - "sha256:f97030ee5cbc91eeadd1d7af07ab0e48ceb04aa63d4a983adbaca4cba16e86c3" - ], - "markers": "python_version >= '3.8' and python_version < '4.0'", - "version": "==4.8.2" - }, - "tuspy": { - "hashes": [ - "sha256:156734eac5c61a046cfecd70f14119f05be92cce198eb5a1a99a664482bedb89", - "sha256:7fc5ac8fb25de37c96c90213f83a1ffdede7f48a471cb5a15a2f57846828a79a" - ], - "markers": "python_full_version >= '3.5.3'", - "version": "==1.1.0" - }, "typing-extensions": { "hashes": [ "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", @@ -1671,11 +1235,11 @@ }, "urllib3-future": { "hashes": [ - "sha256:ce90c1ef08b265eccf29676f759a3a30a36b6ccc8a9e97d3473ea4b26f586d52", - "sha256:f341b1ff506c0c7f92cf3d98bd6683b398cad24b62e0277ce6f386222b85951a" + "sha256:642b235a89cbddb7a3c6703a11fd0255473231be791214fd01abd465371ea8fb", + "sha256:a4f2a94da920f62f4c957931d3a1cc364efdd0fbb984624db7ad7347aa27afad" ], "markers": "python_version >= '3.7'", - "version": "==2.12.919" + "version": "==2.12.920" }, "verlib2": { "hashes": [ @@ -1788,116 +1352,6 @@ ], "markers": "python_version >= '3.9'", "version": "==3.1.3" - }, - "yarl": { - "hashes": [ - "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9", - "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa", - "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61", - "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2", - "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2", - "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33", - "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902", - "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2", - "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914", - "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0", - "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0", - "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569", - "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f", - "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7", - "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20", - "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00", - "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1", - "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc", - "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f", - "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a", - "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd", - "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c", - "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f", - "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5", - "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d", - "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501", - "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3", - "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0", - "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26", - "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2", - "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c", - "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c", - "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae", - "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de", - "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a", - "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe", - "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8", - "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124", - "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb", - "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc", - "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2", - "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac", - "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307", - "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58", - "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e", - "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e", - "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62", - "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b", - "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe", - "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda", - "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5", - "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64", - "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229", - "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62", - "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6", - "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d", - "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791", - "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672", - "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb", - "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94", - "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a", - "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10", - "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e", - "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9", - "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5", - "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da", - "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c", - "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a", - "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d", - "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195", - "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594", - "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8", - "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634", - "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051", - "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8", - "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e", - "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384", - "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076", - "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656", - "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018", - "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19", - "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a", - "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4", - "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2", - "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64", - "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145", - "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7", - "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995", - "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6", - "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f", - "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f", - "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487", - "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9", - "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a", - "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d", - "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f", - "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1", - "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22", - "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d", - "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c", - "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877", - "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5", - "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867", - "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3" - ], - "markers": "python_version >= '3.9'", - "version": "==1.20.0" } }, "develop": { @@ -2074,6 +1528,7 @@ "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==7.8.0" }, "docker": { @@ -2122,6 +1577,7 @@ "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==8.3.5" }, "python-dotenv": { @@ -2130,6 +1586,7 @@ "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==1.1.0" }, "requests": { @@ -2146,6 +1603,7 @@ "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==1.12.1" }, "testcontainers": { @@ -2154,6 +1612,7 @@ "sha256:31ed1a81238c7e131a2a29df6db8f23717d892b592fa5a1977fd0dcd0c23fc23" ], "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4.0'", "version": "==4.10.0" }, "typing-extensions": { diff --git a/dbrepo-dashboard-service/app.py b/dbrepo-dashboard-service/app.py index fafca139f43f7763a3757a4a33c24c31a3456c0c..8e4fb0e8ccd9c8bc01c5c557f616f2b28e7afd55 100644 --- a/dbrepo-dashboard-service/app.py +++ b/dbrepo-dashboard-service/app.py @@ -29,17 +29,32 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', + }, + 'ecs': { + 'format': '{"@timestamp": "%(asctime)s", "log.level": "%(levelname)s", "log.logger": "%(module)s", "message": "%(message)s", "service_name": "dashboard-service", "service_version": "1.8.2"}', + 'datefmt': '%Y-%m-%dT%H:%M:%S' + }, + }, + 'handlers': { + 'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'simple' + }, + 'file': { + 'class': 'logging.handlers.TimedRotatingFileHandler', + 'formatter': 'ecs', + 'filename': '/var/log/app/service/dashboard/app.log', + 'when': 'm', + 'interval': 1, + 'backupCount': 5, + 'encoding': 'utf8' }, }, - 'handlers': {'wsgi': { - 'class': 'logging.StreamHandler', - 'stream': 'ext://flask.logging.wsgi_errors_stream', - 'formatter': 'simple' # default - }}, 'root': { 'level': 'DEBUG', - 'handlers': ['wsgi'] + 'handlers': ['wsgi', 'file'] } }) @@ -60,8 +75,8 @@ swagger_config = { "headers": [], "specs": [ { - "endpoint": "api-dashboard", - "route": "/api-dashboard.json", + "endpoint": "api-docs", + "route": "/api-docs.json", "rule_filter": lambda rule: True, "model_filter": lambda tag: True, # all in } @@ -191,7 +206,7 @@ def health(): @app.route("/api/dashboard", methods=["POST"], endpoint="create_dashboard") @metrics.gauge(name='dbrepo_create_dashboard', description='Time needed to create dashboard') -@swag_from("ds-yml/create_dashboard.yml") +@swag_from("/app/ds-yml/create_dashboard.yml") @auth.login_required(role=['system']) def create_dashboard(): for parameter in [param for param in ['is_public', 'is_schema_public', 'owner_username', 'database_name'] if @@ -220,14 +235,14 @@ def create_dashboard(): @app.route("/api/dashboard/<string:uid>", methods=["PUT"], endpoint="update_dashboard") @metrics.gauge(name='dbrepo_update_dashboard', description='Time needed to update dashboard') -@swag_from("ds-yml/update_dashboard.yml") +@swag_from("/app/ds-yml/update_dashboard.yml") @auth.login_required(role=['system']) def update_dashboard(uid: str): logging.debug(f'endpoint update dashboard, uid={uid}') try: database = Database.model_validate(request.json) except ValidationError as e: - logging.error(f'Model malformed: {e}') + logging.error(f'Model malformed: {str(e).strip()}') return Response(ApiError(status='BAD_REQUEST', message='Invalid database format', code='error.database.malformed').model_dump_json(), 400, headers) try: diff --git a/dbrepo-dashboard-service/init.Dockerfile b/dbrepo-dashboard-service/init.Dockerfile index 4d00c467cd4621e894c456e4a7325d87108ccfb3..a7f6beecd2cc19ca3ac47f99769f8c48f3be4a33 100644 --- a/dbrepo-dashboard-service/init.Dockerfile +++ b/dbrepo-dashboard-service/init.Dockerfile @@ -18,6 +18,9 @@ RUN adduser -D dbrepo --uid 1001 WORKDIR /app +RUN mkdir -p /var/log/app/service/dashboard && \ + chown -R 1001:1001 /var/log/app + USER 1001 COPY --chown=1001 ./init.py ./init.py diff --git a/dbrepo-dashboard-service/init.py b/dbrepo-dashboard-service/init.py index 54c01f55ebc063e0b97a4ce799ba4d529e1a5627..7c7a585b0a179a88bcd1a9334f1257ae0a64901b 100644 --- a/dbrepo-dashboard-service/init.py +++ b/dbrepo-dashboard-service/init.py @@ -18,17 +18,32 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', + }, + 'ecs': { + 'format': '{"@timestamp": "%(asctime)s", "log.level": "%(levelname)s", "log.logger": "%(module)s", "message": "%(message)s", "service_name": "dashboard-service-init", "service_version": "1.8.2"}', + 'datefmt': '%Y-%m-%dT%H:%M:%S' + }, + }, + 'handlers': { + 'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'simple' + }, + 'file': { + 'class': 'logging.handlers.TimedRotatingFileHandler', + 'formatter': 'ecs', + 'filename': '/var/log/app/service/dashboard/init.log', + 'when': 'm', + 'interval': 1, + 'backupCount': 5, + 'encoding': 'utf8' }, }, - 'handlers': {'wsgi': { - 'class': 'logging.StreamHandler', - 'stream': 'ext://flask.logging.wsgi_errors_stream', - 'formatter': 'simple' # default - }}, 'root': { 'level': 'DEBUG', - 'handlers': ['wsgi'] + 'handlers': ['wsgi', 'file'] } }) diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2-py3-none-any.whl b/dbrepo-dashboard-service/lib/dbrepo-1.8.2-py3-none-any.whl index 6a21f512b36f30367f641061c8efeba90108a6c7..48beeb5ebf61c7cca654e0ee66343fac70bb4d53 100644 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2-py3-none-any.whl and b/dbrepo-dashboard-service/lib/dbrepo-1.8.2-py3-none-any.whl differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2.tar.gz b/dbrepo-dashboard-service/lib/dbrepo-1.8.2.tar.gz index f98a45d02b802376ff7614c008eec8783f281896..3e3b65b6b93a602ee26c2f4d4c71c2d3cd331211 100644 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2.tar.gz and b/dbrepo-dashboard-service/lib/dbrepo-1.8.2.tar.gz differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl b/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl deleted file mode 100644 index 86a1af2af41c44d35a4da7a472c180854f0cd82c..0000000000000000000000000000000000000000 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc3.tar.gz b/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc3.tar.gz deleted file mode 100644 index 9c03ed275c6da5b2eef3619c59269f398d59c7de..0000000000000000000000000000000000000000 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc3.tar.gz and /dev/null differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl b/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl deleted file mode 100644 index 5a0dbc7c95592f2e70bed13fa33d85cc6cdf7811..0000000000000000000000000000000000000000 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc4.tar.gz b/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc4.tar.gz deleted file mode 100644 index 1dbc78c989362d4d0c3750b1ad942abe46f205dd..0000000000000000000000000000000000000000 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc4.tar.gz and /dev/null differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl b/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl deleted file mode 100644 index 50bf1b8195987f6f8d23a36f34bc0f912b6fd9b3..0000000000000000000000000000000000000000 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc5.tar.gz b/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc5.tar.gz deleted file mode 100644 index be8784437f111e2d4a5cdac36baf77605114dfa5..0000000000000000000000000000000000000000 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc5.tar.gz and /dev/null differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl b/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl deleted file mode 100644 index 8e4c745a2ce782c174d5e1db7eef22d51d26624c..0000000000000000000000000000000000000000 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc6.tar.gz b/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc6.tar.gz deleted file mode 100644 index 279243fd37fe033fe4aa740361b5e9a370516924..0000000000000000000000000000000000000000 Binary files a/dbrepo-dashboard-service/lib/dbrepo-1.8.2rc6.tar.gz and /dev/null differ diff --git a/dbrepo-dashboard-ui/dashboards/System/dbrepo.json b/dbrepo-dashboard-ui/dashboards/System/dbrepo.json index ca75b2fffe9345b8a4c9fecd825e027377932909..dc3d570df03df3c485aa9ed64caadaf2b1e75c03 100644 --- a/dbrepo-dashboard-ui/dashboards/System/dbrepo.json +++ b/dbrepo-dashboard-ui/dashboards/System/dbrepo.json @@ -18,7 +18,7 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 1, - "id": 3, + "id": 4, "links": [ { "asDropdown": false, @@ -112,7 +112,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -182,7 +182,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -250,7 +250,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -318,7 +318,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -434,7 +434,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -510,7 +510,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -604,7 +604,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -699,7 +699,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -781,7 +781,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -859,7 +859,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -933,7 +933,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1005,7 +1005,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1094,7 +1094,7 @@ "sizing": "auto", "valueMode": "color" }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1197,7 +1197,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1284,7 +1284,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1358,7 +1358,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1440,7 +1440,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1522,7 +1522,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1604,7 +1604,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1735,7 +1735,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1829,7 +1829,7 @@ "sizing": "auto", "valueMode": "color" }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1946,7 +1946,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2108,7 +2108,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2269,7 +2269,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2400,7 +2400,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2418,13 +2418,385 @@ "title": "Failed API Requests", "type": "timeseries" }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Count", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "200" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "200s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "300" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "300s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "400" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "400s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "500" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "500s" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 48 + }, + "id": 43, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "normal", + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 100 + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "status: (>=200 AND <300)", + "queryType": "lucene", + "refId": "200", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "status: (>=300 AND <400)", + "queryType": "lucene", + "refId": "300", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "status: (>=400 AND <500)", + "queryType": "lucene", + "refId": "400", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "status: >=500", + "queryType": "lucene", + "refId": "500", + "timeField": "@timestamp" + } + ], + "title": "HTTP Status Codes over Time", + "type": "barchart" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": {}, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "200" + }, + "properties": [] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "300" + }, + "properties": [] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "400" + }, + "properties": [] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "500" + }, + "properties": [] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 48 + }, + "id": 44, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "status: >=400", + "queryType": "lucene", + "refId": "ERROR", + "timeField": "@timestamp" + } + ], + "title": "REST API Errors", + "type": "logs" + }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 48 + "y": 56 }, "id": 39, "panels": [], @@ -2496,7 +2868,7 @@ "h": 8, "w": 12, "x": 0, - "y": 49 + "y": 57 }, "id": 41, "options": { @@ -2513,7 +2885,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2607,7 +2979,7 @@ "h": 8, "w": 12, "x": 12, - "y": 49 + "y": 57 }, "id": 42, "options": { @@ -2624,7 +2996,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2671,13 +3043,13 @@ "list": [] }, "time": { - "from": "now-24h", + "from": "now-3h", "to": "now" }, "timepicker": {}, "timezone": "browser", "title": "DBRepo", "uid": "bdz20owu8zn5se", - "version": 9, + "version": 1, "weekStart": "" } \ No newline at end of file diff --git a/dbrepo-dashboard-ui/dashboards/System/keycloak.json b/dbrepo-dashboard-ui/dashboards/System/keycloak.json index 7c2115a8ecc143851275d456d4c954bdd881f5b2..aa5e2a8c572b6a5273bb9c89c908b3adff857dfa 100644 --- a/dbrepo-dashboard-ui/dashboards/System/keycloak.json +++ b/dbrepo-dashboard-ui/dashboards/System/keycloak.json @@ -2342,7 +2342,7 @@ "refresh": "5m", "schemaVersion": 26, "style": "dark", - "tags": [], + "tags": ["provisioned", "auth"], "templating": { "list": [ { @@ -2357,7 +2357,7 @@ ] }, "time": { - "from": "now-24h", + "from": "now-3h", "to": "now" }, "timepicker": { @@ -2386,7 +2386,7 @@ ] }, "timezone": "", - "title": "Keycloak Metrics Dashboard", + "title": "Keycloak - Overview", "uid": "keycloak-dashboard", "version": 6, "description": "Dashboard of Keycloak metrics exported with Keycloak Metrics SPI\r\n\r\nhttps://github.com/aerogear/keycloak-metrics-spi" diff --git a/dbrepo-dashboard-ui/dashboards/System/mariadb.json b/dbrepo-dashboard-ui/dashboards/System/mariadb.json index 3402ae51ddf74df0ea9d17da64719dcb8df7431c..b6297de19c2dcd0c179c49a8c616ab2f230caf6b 100644 --- a/dbrepo-dashboard-ui/dashboards/System/mariadb.json +++ b/dbrepo-dashboard-ui/dashboards/System/mariadb.json @@ -1366,12 +1366,12 @@ ] }, "time": { - "from": "now-24h", + "from": "now-3h", "to": "now" }, "timepicker": {}, "timezone": "", - "title": "Galera/MariaDB - Overview", + "title": "MariaDB Galera - Overview", "uid": "pXgz0qFGk", "version": 2 } \ No newline at end of file diff --git a/dbrepo-dashboard-ui/dashboards/System/rabbitmq.json b/dbrepo-dashboard-ui/dashboards/System/rabbitmq.json index 99d810c39226c30aa8aa6e834971c67ef2a1ce1d..fbaaf04ba0f7b32f7da9a10ac3edbafab23f273a 100644 --- a/dbrepo-dashboard-ui/dashboards/System/rabbitmq.json +++ b/dbrepo-dashboard-ui/dashboards/System/rabbitmq.json @@ -8133,7 +8133,7 @@ ] }, "time": { - "from": "now-24h", + "from": "now-3h", "to": "now" }, "timepicker": { diff --git a/dbrepo-dashboard-ui/provisioning/datasources/opensearch.yaml b/dbrepo-dashboard-ui/provisioning/datasources/opensearch.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3b26f0a4746712c597b90799f5004aab23d31b51 --- /dev/null +++ b/dbrepo-dashboard-ui/provisioning/datasources/opensearch.yaml @@ -0,0 +1,14 @@ +apiVersion: 1 + +datasources: + - name: dbrepo-opensearch + uid: dbrepoopensearch0 + type: grafana-opensearch-datasource + basicAuth: false + url: http://search-db:9200 + jsonData: + flavor: "opensearch" + logLevelField: "level" + logMessageField: "message" + timeField: "@timestamp" + version: "2.19.0" diff --git a/dbrepo-data-service/Dockerfile b/dbrepo-data-service/Dockerfile index ca40f6557fe378cd28bc76cde6fd96d59bffb8e1..32cdfc7d7a8b0f5b463012b22fe00591d7018f7f 100644 --- a/dbrepo-data-service/Dockerfile +++ b/dbrepo-data-service/Dockerfile @@ -26,6 +26,9 @@ RUN apk --no-cache add \ WORKDIR /app +RUN mkdir -p /var/log/app/service/data && \ + chown -R 1001:1001 /var/log/app/service/data + RUN adduser -D dbrepo --uid 1001 && \ chown -R 1001:1001 /app diff --git a/dbrepo-data-service/pom.xml b/dbrepo-data-service/pom.xml index 66a1e9d56a6b5c1ac64014fd0ff6b1d45bedd548..948ef796727fe72b26e26efbcd0c16b4ca13c2b7 100644 --- a/dbrepo-data-service/pom.xml +++ b/dbrepo-data-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>3.3.5</version> + <version>3.4.0</version> </parent> <organization> @@ -239,6 +239,13 @@ <artifactId>amqp-client</artifactId> <version>${rabbitmq.version}</version> </dependency> + <!-- Api --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + <scope>provided</scope> + </dependency> <!-- Testing --> <dependency> <groupId>org.springframework</groupId> diff --git a/dbrepo-data-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/SubsetEndpoint.java b/dbrepo-data-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/SubsetEndpoint.java index 8c3656b0cd603f69946a8c69c6b02ff887ede6ad..bf48f8f25a248b16944cdd5009f1dfa292f942db 100644 --- a/dbrepo-data-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/SubsetEndpoint.java +++ b/dbrepo-data-service/rest-service/src/main/java/at/ac/tuwien/ifs/dbrepo/endpoints/SubsetEndpoint.java @@ -86,7 +86,7 @@ public class SubsetEndpoint extends RestEndpoint { mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), @ApiResponse(responseCode = "404", - description = "Failed to find database in metadata database or query in query store of the data database", + description = "Failed to find database or user in metadata database or query in query store of the data database", content = {@Content( mediaType = "application/json", schema = @Schema(implementation = ApiErrorDto.class))}), @@ -100,7 +100,7 @@ public class SubsetEndpoint extends RestEndpoint { @RequestParam(name = "persisted", required = false) Boolean filterPersisted, Principal principal) throws DatabaseUnavailableException, DatabaseNotFoundException, RemoteUnavailableException, - QueryNotFoundException, NotAllowedException, MetadataServiceException { + QueryNotFoundException, NotAllowedException, MetadataServiceException, UserNotFoundException { log.debug("endpoint find subsets in database, databaseId={}, filterPersisted={}", databaseId, filterPersisted); final DatabaseDto database = cacheService.getDatabase(databaseId); if (!database.getIsPublic()) { diff --git a/dbrepo-data-service/rest-service/src/main/resources/application.yml b/dbrepo-data-service/rest-service/src/main/resources/application.yml index d8dec2e455c0d5fb199207deb3fe3ff3dc7fd21f..70ad1bde9ca32afd7106597922e5be6d3bee637e 100644 --- a/dbrepo-data-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-data-service/rest-service/src/main/resources/application.yml @@ -48,11 +48,17 @@ server: tomcat: max-swallow-size: -1 logging: - pattern.console: "%d %highlight(%-5level) %msg%n" + file: + name: /var/log/app/service/data/app.log level: root: warn at.ac.tuwien.ifs.dbrepo.: "${LOG_LEVEL:info}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug + pattern: + console: "%d %highlight(%-5level) %msg%n" + structured: + format: + file: ecs dbrepo: endpoints: metadataService: "${METADATA_SERVICE_ENDPOINT:http://metadata-service:8080}" diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/AccessEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/AccessEndpointUnitTest.java index a634c2b45239f85fd528cdb697242743d01291ea..725814004440115e255b67d31ecfe977f80e42fd 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/AccessEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/AccessEndpointUnitTest.java @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.test.context.support.WithMockUser; @@ -32,10 +32,10 @@ public class AccessEndpointUnitTest extends BaseTest { @Autowired private AccessEndpoint accessEndpoint; - @MockBean + @MockitoBean private CacheService credentialService; - @MockBean + @MockitoBean private AccessService accessService; @Test diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/DatabaseEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/DatabaseEndpointUnitTest.java index 01a575b4609b4dd2a882f2bae6e40ba520229b74..431d88d72c651875e587aadf3737d95c59715acb 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/DatabaseEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/DatabaseEndpointUnitTest.java @@ -15,10 +15,10 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.sql.SQLException; @@ -37,16 +37,16 @@ public class DatabaseEndpointUnitTest extends BaseTest { @Autowired private DatabaseEndpoint databaseEndpoint; - @MockBean + @MockitoBean private ContainerService containerService; - @MockBean + @MockitoBean private AccessService accessService; - @MockBean + @MockitoBean private DatabaseService databaseService; - @MockBean + @MockitoBean private CacheService credentialService; @Test diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/SubsetEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/SubsetEndpointUnitTest.java index 195e42026ddbe710855d4b6ceb9248cb8e486c97..8aa9327c8b8ba1a22d934a97543c769b11dfcca2 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/SubsetEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/SubsetEndpointUnitTest.java @@ -21,11 +21,11 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.security.Principal; @@ -49,22 +49,22 @@ public class SubsetEndpointUnitTest extends BaseTest { @Autowired private SparkSession sparkSession; - @MockBean + @MockitoBean private SubsetService subsetService; - @MockBean + @MockitoBean private HttpServletRequest httpServletRequest; - @MockBean + @MockitoBean private StorageService storageService; - @MockBean + @MockitoBean private DatabaseService databaseService; - @MockBean + @MockitoBean private CacheService cacheService; - @MockBean + @MockitoBean private MetadataServiceGateway metadataServiceGateway; @Test @@ -708,7 +708,7 @@ public class SubsetEndpointUnitTest extends BaseTest { protected List<QueryDto> generic_list(UUID databaseId, DatabaseDto database, Principal principal) throws NotAllowedException, DatabaseUnavailableException, QueryNotFoundException, DatabaseNotFoundException, - RemoteUnavailableException, MetadataServiceException { + RemoteUnavailableException, MetadataServiceException, UserNotFoundException { /* mock */ if (database != null) { diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/TableEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/TableEndpointUnitTest.java index 8bfd1c527fc1d4ad772aa22460219b306a611492..70ef32af913b44111ae91a8c9b0eb98be1c84390 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/TableEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/TableEndpointUnitTest.java @@ -26,7 +26,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.AccessDeniedException; @@ -54,22 +54,22 @@ public class TableEndpointUnitTest extends BaseTest { @Autowired private SparkSession sparkSession; - @MockBean + @MockitoBean private HttpServletRequest httpServletRequest; - @MockBean + @MockitoBean private TableService tableService; - @MockBean + @MockitoBean private SubsetService subsetService; - @MockBean + @MockitoBean private DatabaseService databaseService; - @MockBean + @MockitoBean private CacheService credentialService; - @MockBean + @MockitoBean private MetadataServiceGateway metadataServiceGateway; public static Stream<Arguments> size_arguments() { diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/ViewEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/ViewEndpointUnitTest.java index 9e0b1c4454f3a6abd12af702d5658b5b6bec9802..5660e073f0f71a9928330130a738af0899e97f03 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/ViewEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/endpoint/ViewEndpointUnitTest.java @@ -18,7 +18,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.test.context.support.WithAnonymousUser; @@ -38,19 +38,19 @@ import static org.mockito.Mockito.*; @ExtendWith(SpringExtension.class) public class ViewEndpointUnitTest extends BaseTest { - @MockBean + @MockitoBean private ViewService viewService; - @MockBean + @MockitoBean private DatabaseService databaseService; - @MockBean + @MockitoBean private CacheService credentialService; - @MockBean + @MockitoBean private HttpServletRequest httpServletRequest; - @MockBean + @MockitoBean private SubsetService subsetService; @Autowired diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/InterceptorUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/InterceptorUnitTest.java index b56888551b5da6ca4bb34cfb6f3bc96481ba3a04..f36754f0b2460dfc8666c07351a7e88790ca7d61 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/InterceptorUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/InterceptorUnitTest.java @@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; @@ -22,7 +22,7 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) public class InterceptorUnitTest extends BaseTest { - @MockBean + @MockitoBean @Qualifier("keycloakRestTemplate") private RestTemplate restTemplate; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/MetadataServiceGatewayUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/MetadataServiceGatewayUnitTest.java index 60860315edd4f23aea7dc43fc6960a628c2ef996..751c5248c1655dee2440521441a50d1bc9d50324 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/MetadataServiceGatewayUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/gateway/MetadataServiceGatewayUnitTest.java @@ -15,7 +15,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.*; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.web.client.HttpClientErrorException; @@ -35,7 +35,7 @@ import static org.mockito.Mockito.when; @ExtendWith(SpringExtension.class) public class MetadataServiceGatewayUnitTest extends BaseTest { - @MockBean + @MockitoBean @Qualifier("internalRestTemplate") private RestTemplate internalRestTemplate; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/listener/DefaultListenerIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/listener/DefaultListenerIntegrationTest.java index dcb0af3d66d698f4db8eeffe6e7e13401848a9d5..c87cd5fd49066b15b326b7d4ddf8f0eda3ec6b17 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/listener/DefaultListenerIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/listener/DefaultListenerIntegrationTest.java @@ -15,7 +15,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.amqp.core.Message; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.boot.test.system.CapturedOutput; import org.springframework.boot.test.system.OutputCaptureExtension; import org.springframework.test.annotation.DirtiesContext; @@ -40,7 +40,7 @@ import static org.mockito.Mockito.when; @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) public class DefaultListenerIntegrationTest extends BaseTest { - @MockBean + @MockitoBean private CacheService credentialService; @Autowired diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/listener/DefaultListenerUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/listener/DefaultListenerUnitTest.java index 8b0eedcebebf8a01ef8cd7a42ea916afd30ebf7a..72aba7246361b328fee630a1972bc53c431799e5 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/listener/DefaultListenerUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/listener/DefaultListenerUnitTest.java @@ -8,7 +8,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.amqp.core.Message; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.boot.test.system.CapturedOutput; import org.springframework.boot.test.system.OutputCaptureExtension; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -29,7 +29,7 @@ import static org.mockito.Mockito.doThrow; @Testcontainers public class DefaultListenerUnitTest { - @MockBean + @MockitoBean private CacheService credentialService; @Autowired diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/SubsetEndpointMvcTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/SubsetEndpointMvcTest.java index 593954df956fc4e599bba665355b01a405e0611e..69d41cf983863859dd42a85c3380102776bd00f8 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/SubsetEndpointMvcTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/mvc/SubsetEndpointMvcTest.java @@ -10,7 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.http.MediaType; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; @@ -27,10 +27,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @AutoConfigureObservability public class SubsetEndpointMvcTest extends BaseTest { - @MockBean + @MockitoBean private MetadataServiceGateway metadataServiceGateway; - @MockBean + @MockitoBean private SubsetService subsetService; @Autowired diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/CredentialServiceUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/CredentialServiceUnitTest.java index febf388d59531bb4e8a831b43a81facf19a7eb01..4fcafa9e86525537d69186898a2ce4dfcfaa6d4e 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/CredentialServiceUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/CredentialServiceUnitTest.java @@ -16,7 +16,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.junit.jupiter.SpringExtension; import java.sql.SQLException; @@ -32,7 +32,7 @@ public class CredentialServiceUnitTest extends BaseTest { @Autowired private CacheServiceImpl credentialService; - @MockBean + @MockitoBean private MetadataServiceGateway metadataServiceGateway; @BeforeEach diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/QueueServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/QueueServiceIntegrationTest.java index 99e3f77f807c1d5c09c1f58773d31724006c42ee..594cb113ad0f897f58a62fe14e17779c802047ef 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/QueueServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/QueueServiceIntegrationTest.java @@ -16,7 +16,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.junit.jupiter.Container; @@ -37,7 +37,7 @@ public class QueueServiceIntegrationTest extends BaseTest { @Autowired private QueueServiceRabbitMqImpl queueService; - @MockBean + @MockitoBean private MetadataServiceGateway metadataServiceGateway; @Container diff --git a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/SubsetServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/SubsetServiceIntegrationTest.java index d6f657ed2b937beb1b286895a123663ec1b170c4..597d8812013f8899ce9ebf4a4d0734b1ede1894c 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/SubsetServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/ac/tuwien/ifs/dbrepo/service/SubsetServiceIntegrationTest.java @@ -18,7 +18,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.junit.jupiter.Container; @@ -44,7 +44,7 @@ public class SubsetServiceIntegrationTest extends BaseTest { @Autowired private SubsetService subsetService; - @MockBean + @MockitoBean private MetadataServiceGateway metadataServiceGateway; public static Stream<Arguments> create_arguments() { diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceMariaDbImpl.java index 1a2d9fa2def0fe261c417ac3d594ae948319e2d4..ad1719cb13f9263beb4315b65aec081439c55dd0 100644 --- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceMariaDbImpl.java @@ -11,6 +11,7 @@ import at.ac.tuwien.ifs.dbrepo.mapper.MariaDbMapper; import at.ac.tuwien.ifs.dbrepo.service.ContainerService; import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; +import org.apache.logging.log4j.message.MapMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/dbrepo-gateway-service/README.md b/dbrepo-gateway-service/README.md deleted file mode 100644 index 025b6a81ed37ba5bf21a05b71e14923604385e5f..0000000000000000000000000000000000000000 --- a/dbrepo-gateway-service/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Gateway Service - -NGINX, test the syntax/regex with https://nginx.viraptor.info/ \ No newline at end of file diff --git a/dbrepo-gateway-service/dbrepo.conf b/dbrepo-gateway-service/dbrepo.conf index 0ee5bfdfb5fb5c8950e61fff324abc4044a5bc1d..153d6fb7f50444c94fbcd2a29371f12833d20d6d 100644 --- a/dbrepo-gateway-service/dbrepo.conf +++ b/dbrepo-gateway-service/dbrepo.conf @@ -4,8 +4,6 @@ map $http_upgrade $connection_upgrade { '' close; } -client_max_body_size 20G; - proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile index 5b7a3386162aa93217758f081503dc073e942a64..f9bb4cb4da6a136acde726f8cfdf97df07ed1b5e 100644 --- a/dbrepo-metadata-service/Dockerfile +++ b/dbrepo-metadata-service/Dockerfile @@ -27,6 +27,9 @@ RUN apk --no-cache add \ WORKDIR /app +RUN mkdir -p /var/log/app/service/metadata && \ + chown -R 1001:1001 /var/log/app + RUN adduser -D dbrepo --uid 1001 && \ chown -R 1001:1001 /app diff --git a/dbrepo-metadata-service/oai/pom.xml b/dbrepo-metadata-service/oai/pom.xml index 264c194aa59989743ab5c65a003d84fc0844986c..94a25b78ef0d2a57cbff12b106f52c73123c22f2 100644 --- a/dbrepo-metadata-service/oai/pom.xml +++ b/dbrepo-metadata-service/oai/pom.xml @@ -10,7 +10,7 @@ </parent> <name>oai</name> - <artifactId>metadata-service-oai</artifactId> + <artifactId>oai</artifactId> <version>1.8.2</version> <dependencies/> diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml index 1c0c6ce2ecc0012e02ba19d7f71831afbe38fbad..2567b704b2819f92ff56995743990787833e49e2 100644 --- a/dbrepo-metadata-service/pom.xml +++ b/dbrepo-metadata-service/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>3.3.5</version> + <version>3.4.0</version> </parent> <organization> @@ -67,9 +67,9 @@ <dependencies> <dependency> - <groupId>${project.groupId}</groupId> + <groupId>at.ac.tuwien.ifs.dbrepo</groupId> <artifactId>dbrepo-core</artifactId> - <version>${project.version}</version> + <version>1.8.2</version> </dependency> <!-- Data Source --> <dependency> diff --git a/dbrepo-metadata-service/report/pom.xml b/dbrepo-metadata-service/report/pom.xml index 08706f25c64d43c7cc7cb78d0dabdc8e08375eb5..ffbe87d0cce2489b32f0de0773a1a6969190020d 100644 --- a/dbrepo-metadata-service/report/pom.xml +++ b/dbrepo-metadata-service/report/pom.xml @@ -10,13 +10,13 @@ </parent> <name>report</name> - <artifactId>metadata-service-report</artifactId> + <artifactId>report</artifactId> <version>1.8.2</version> <dependencies> <dependency> <groupId>at.ac.tuwien.ifs.dbrepo</groupId> - <artifactId>metadata-service-services</artifactId> + <artifactId>services</artifactId> <version>1.8.2</version> </dependency> </dependencies> diff --git a/dbrepo-metadata-service/repositories/pom.xml b/dbrepo-metadata-service/repositories/pom.xml index 699acf938a51f824cb2b755216c0aae4ea5fd72a..10458ac4cdb92ea34e0b976376a0226d479b4be1 100644 --- a/dbrepo-metadata-service/repositories/pom.xml +++ b/dbrepo-metadata-service/repositories/pom.xml @@ -10,13 +10,13 @@ </parent> <name>repositories</name> - <artifactId>metadata-service-repositories</artifactId> + <artifactId>repositories</artifactId> <version>1.8.2</version> <dependencies> <dependency> <groupId>at.ac.tuwien.ifs.dbrepo</groupId> - <artifactId>metadata-service-oai</artifactId> + <artifactId>oai</artifactId> <version>1.8.2</version> </dependency> </dependencies> diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/IdentifierRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/IdentifierRepository.java index 4011a8d1683329af5181d387b6031cefa8fd461b..35eebe00f36c175043984c5d277aae7dcebaa3ab 100644 --- a/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/IdentifierRepository.java +++ b/dbrepo-metadata-service/repositories/src/main/java/at/ac/tuwien/ifs/dbrepo/repository/IdentifierRepository.java @@ -11,6 +11,8 @@ import java.util.UUID; @Repository public interface IdentifierRepository extends JpaRepository<Identifier, UUID> { + List<Identifier> findAll(); + /** * Finds identifiers by given database id. * diff --git a/dbrepo-metadata-service/rest-service/pom.xml b/dbrepo-metadata-service/rest-service/pom.xml index ed9dba6fb69699776281109c9e79ef88bc3350f5..bbc8d1e069d529a5fc9b5f85a6f378229b1b81d3 100644 --- a/dbrepo-metadata-service/rest-service/pom.xml +++ b/dbrepo-metadata-service/rest-service/pom.xml @@ -10,13 +10,13 @@ </parent> <name>rest-service</name> - <artifactId>metadata-service-service</artifactId> + <artifactId>rest-service</artifactId> <version>1.8.2</version> <dependencies> <dependency> <groupId>at.ac.tuwien.ifs.dbrepo</groupId> - <artifactId>metadata-service-services</artifactId> + <artifactId>services</artifactId> <version>1.8.2</version> </dependency> </dependencies> diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml index 492aafb6c558a28956190e5c48f198b9e1f333ae..72fd264e48ab00e4c305d3d98db7036b30a0a75a 100644 --- a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml +++ b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml @@ -42,11 +42,17 @@ management: server: port: 8080 logging: - pattern.console: "%d %highlight(%-5level) %msg%n" + file: + name: /var/log/app/service/metadata/app.log level: root: warn at.ac.tuwien.ifs.dbrepo.: "${LOG_LEVEL:info}" org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug + pattern: + console: "%d %highlight(%-5level) %msg%n" + structured: + format: + file: ecs dbrepo: datacite: url: "${DATACITE_URL:https://api.datacite.org}" diff --git a/dbrepo-metadata-service/services/pom.xml b/dbrepo-metadata-service/services/pom.xml index 963d6c9e963b29463e64f9089fca88155ebf6a96..ccc6c60cfb220016e4eb13f6fa2decc949292049 100644 --- a/dbrepo-metadata-service/services/pom.xml +++ b/dbrepo-metadata-service/services/pom.xml @@ -10,18 +10,18 @@ </parent> <name>services</name> - <artifactId>metadata-service-services</artifactId> + <artifactId>services</artifactId> <version>1.8.2</version> <dependencies> <dependency> <groupId>at.ac.tuwien.ifs.dbrepo</groupId> - <artifactId>metadata-service-oai</artifactId> + <artifactId>oai</artifactId> <version>1.8.2</version> </dependency> <dependency> <groupId>at.ac.tuwien.ifs.dbrepo</groupId> - <artifactId>metadata-service-repositories</artifactId> + <artifactId>repositories</artifactId> <version>1.8.2</version> </dependency> </dependencies> diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DataCiteIdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DataCiteIdentifierServiceImpl.java index 5c109633183eb1d62f4a560e878140d15d75a6cd..e5bf8efa9bd8ad202bf3f82d9a087106ca35dd73 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DataCiteIdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DataCiteIdentifierServiceImpl.java @@ -1,5 +1,7 @@ package at.ac.tuwien.ifs.dbrepo.service.impl; +import at.ac.tuwien.ifs.dbrepo.config.DataCiteConfig; +import at.ac.tuwien.ifs.dbrepo.config.EndpointConfig; import at.ac.tuwien.ifs.dbrepo.core.api.datacite.DataCiteBody; import at.ac.tuwien.ifs.dbrepo.core.api.datacite.DataCiteData; import at.ac.tuwien.ifs.dbrepo.core.api.datacite.doi.DataCiteCreateDoi; @@ -9,8 +11,6 @@ import at.ac.tuwien.ifs.dbrepo.core.api.identifier.BibliographyTypeDto; import at.ac.tuwien.ifs.dbrepo.core.api.identifier.CreateIdentifierDto; import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierSaveDto; import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; -import at.ac.tuwien.ifs.dbrepo.config.DataCiteConfig; -import at.ac.tuwien.ifs.dbrepo.config.EndpointConfig; import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.Identifier; import at.ac.tuwien.ifs.dbrepo.core.entity.identifier.IdentifierStatusType; @@ -128,18 +128,25 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { final HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setBasicAuth(dataCiteConfig.getUsername(), dataCiteConfig.getPassword()); + final DataCiteCreateDoi attributes = metadataMapper.identifierToDataCiteCreateDoi(identifier, + endpointConfig.getWebsiteUrl() + "/pid/" + identifier.getId(), + dataCiteConfig.getPrefix(), event); final HttpEntity<DataCiteBody<DataCiteCreateDoi>> request = new HttpEntity<>( DataCiteBody.<DataCiteCreateDoi>builder() .data(DataCiteData.<DataCiteCreateDoi>builder() .type("dois") - .attributes(metadataMapper.identifierToDataCiteCreateDoi(identifier, - endpointConfig.getWebsiteUrl() + "/pid/" + identifier.getId(), - dataCiteConfig.getPrefix(), event)) + .attributes(attributes) .build()) .build(), headers ); final String url = dataCiteConfig.getUrl() + "/dois"; + log.atDebug() + .setMessage("register doi from datacite url: " + url) + .addKeyValue("type", "dois") + .addKeyValue("event", event) + .addKeyValue("attributes", attributes) + .log(); log.trace("request doi from url {}", url); try { final ResponseEntity<DataCiteBody<DataCiteDoi>> response = restTemplate.exchange(url, HttpMethod.POST, @@ -148,15 +155,26 @@ public class DataCiteIdentifierServiceImpl implements IdentifierService { log.error("Failed to mint doi: {}", response); throw new ExternalServiceException("Failed to mint doi: " + response.getBody()); } - return response.getBody() + final String doi = response.getBody() .getData() .getAttributes() .getDoi(); + log.atInfo() + .setMessage("Saved doi: " + doi) + .addKeyValue("doi", doi) + .log(); + return doi; } catch (HttpClientErrorException e) { - log.error("Failed to mint doi: malformed metadata: {}", e.getMessage()); - throw new MalformedException("Failed to mint doi: malformed metadata: " + e.getMessage(), e); + log.atError() + .setMessage("Failed to mint doi") + .setCause(e) + .log(); + throw new MalformedException("Failed to mint doi: " + e.getMessage(), e); } catch (RestClientException e) { - log.error("Failed to mint doi: {}", e.getMessage()); + log.atError() + .setMessage("Failed to mint doi") + .setCause(e) + .log(); throw new DataServiceConnectionException("Failed to mint doi: " + e.getMessage(), e); } } diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/IdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/IdentifierServiceImpl.java index f8b2c273e8c9032a103b327f84892528aad7826f..c04d388f8ce4142bacb609b8f62098383fc99303 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/IdentifierServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/IdentifierServiceImpl.java @@ -1,11 +1,11 @@ package at.ac.tuwien.ifs.dbrepo.service.impl; +import at.ac.tuwien.ifs.dbrepo.config.MetadataConfig; import at.ac.tuwien.ifs.dbrepo.core.api.database.query.QueryDto; import at.ac.tuwien.ifs.dbrepo.core.api.identifier.BibliographyTypeDto; import at.ac.tuwien.ifs.dbrepo.core.api.identifier.CreateIdentifierDto; import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierSaveDto; import at.ac.tuwien.ifs.dbrepo.core.api.identifier.IdentifierTypeDto; -import at.ac.tuwien.ifs.dbrepo.config.MetadataConfig; import at.ac.tuwien.ifs.dbrepo.core.entity.database.Database; import at.ac.tuwien.ifs.dbrepo.core.entity.database.LanguageType; import at.ac.tuwien.ifs.dbrepo.core.entity.database.View; @@ -22,6 +22,7 @@ import at.ac.tuwien.ifs.dbrepo.service.IdentifierService; import at.ac.tuwien.ifs.dbrepo.service.ViewService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; +import org.slf4j.spi.LoggingEventBuilder; import org.springframework.core.io.InputStreamResource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -150,7 +151,10 @@ public class IdentifierServiceImpl implements IdentifierService { identifier = identifierRepository.save(identifier); /* update in search service */ searchServiceGateway.update(identifier.getDatabase()); - log.info("Published identifier with id {}", identifier.getId()); + log.atInfo() + .setMessage("Published identifier") + .addKeyValue("id", identifier.getId()) + .log(); return identifier; } @@ -280,10 +284,14 @@ public class IdentifierServiceImpl implements IdentifierService { public Identifier save(Identifier identifier) throws DataServiceException, DataServiceConnectionException, ViewNotFoundException, DatabaseNotFoundException, QueryNotFoundException, SearchServiceException, SearchServiceConnectionException { + LoggingEventBuilder loggingBuilder = log.atDebug() + .setMessage("save identifier") + .addKeyValue("type", identifier.getType()) + .addKeyValue("database_id", identifier.getDatabase().getId()); /* save identifier */ switch (identifier.getType()) { case SUBSET -> { - log.debug("identifier type: subset with id {}", identifier.getQueryId()); + loggingBuilder = loggingBuilder.addKeyValue("query_id", identifier.getQueryId()); final QueryDto query = dataServiceGateway.findQuery(identifier.getDatabase().getId(), identifier.getQueryId()); identifier.setQuery(query.getQuery()); identifier.setQueryId(query.getId()); @@ -294,16 +302,16 @@ public class IdentifierServiceImpl implements IdentifierService { identifier.setResultHash(query.getResultHash()); } case VIEW -> { - log.debug("identifier type: view with id {}", identifier.getViewId()); + loggingBuilder = loggingBuilder.addKeyValue("view_id", identifier.getViewId()); final View view = viewService.findById(identifier.getDatabase(), identifier.getViewId()); identifier.setViewId(view.getId()); identifier.setQuery(view.getQuery()); identifier.setQueryNormalized(view.getQuery()); identifier.setQueryHash(view.getQueryHash()); } - case DATABASE -> log.debug("identifier type: database with id {}", identifier.getDatabase().getId()); - case TABLE -> log.debug("identifier type: table with id {}", identifier.getTableId()); + case TABLE -> loggingBuilder = loggingBuilder.addKeyValue("table_id", identifier.getTableId()); } + loggingBuilder.log(); /* save identifier in metadata database */ final Identifier out = identifierRepository.save(identifier); /* update in search database */ @@ -327,7 +335,6 @@ public class IdentifierServiceImpl implements IdentifierService { final String body = templateEngine.process("record_oai_datacite.xml", context) .replaceAll("\\s+", " "); final InputStreamResource resource = new InputStreamResource(IOUtils.toInputStream(body, Charset.defaultCharset())); - log.debug("mapped file stream {}", resource.getDescription()); return resource; } @@ -366,7 +373,10 @@ public class IdentifierServiceImpl implements IdentifierService { .getIdentifiers() .remove(identifier); searchServiceGateway.update(identifier.getDatabase()); - log.info("Deleted identifier with id {}", identifier.getId()); + log.atInfo() + .setMessage("Deleted identifier") + .addKeyValue("id", identifier.getId()) + .log(); } public IdentifierTitle preferTitle(List<IdentifierTitle> titles) { diff --git a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UserServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UserServiceImpl.java index f93dacc21c112d9bdbd1be6f511c0d89829ea836..351b61e82de310ccdef35830986dd8f4d9ee1f7e 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UserServiceImpl.java +++ b/dbrepo-metadata-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/UserServiceImpl.java @@ -13,6 +13,7 @@ import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.nio.charset.StandardCharsets; import java.util.List; @@ -33,11 +34,13 @@ public class UserServiceImpl implements UserService { } @Override + @Transactional(readOnly = true) public List<User> findAll() { return userRepository.findAll(); } @Override + @Transactional(readOnly = true) public User findByUsername(String username) throws UserNotFoundException { final Optional<User> optional = userRepository.findByUsername(username); if (optional.isEmpty()) { @@ -48,11 +51,13 @@ public class UserServiceImpl implements UserService { } @Override + @Transactional(readOnly = true) public List<User> findAllInternalUsers() { return userRepository.findAllInternal(); } @Override + @Transactional(readOnly = true) public User findById(UUID id) throws UserNotFoundException { final Optional<User> optional = userRepository.findById(id); if (optional.isEmpty()) { @@ -63,6 +68,7 @@ public class UserServiceImpl implements UserService { } @Override + @Transactional public User create(CreateUserDto data) { /* create at authentication service */ final String passwordHash = "*" + DigestUtils.sha1Hex(DigestUtils.sha1(RandomStringUtils.randomAlphabetic(40) @@ -86,6 +92,7 @@ public class UserServiceImpl implements UserService { } @Override + @Transactional public User modify(User user, UserUpdateDto data) throws UserNotFoundException, AuthServiceException { user.setFirstname(data.getFirstname()); user.setLastname(data.getLastname()); diff --git a/dbrepo-search-service/Dockerfile b/dbrepo-search-service/Dockerfile index 1d0862a9e51d82a0f8e8154caea2efec9a51dba0..c290684944d7ff48d177f21c728cbb4d1ee760fc 100644 --- a/dbrepo-search-service/Dockerfile +++ b/dbrepo-search-service/Dockerfile @@ -18,6 +18,9 @@ RUN adduser -D dbrepo --uid 1001 WORKDIR /app +RUN mkdir -p /var/log/app/service/search && \ + chown -R 1001:1001 /var/log/app + USER 1001 COPY --chown=1001 ./friendly_names_overrides.json ./friendly_names_overrides.json diff --git a/dbrepo-search-service/Pipfile b/dbrepo-search-service/Pipfile index 83e75e0fb82b4caf4ab44bd5d3761aac5bf4f0e4..99ece7bda6961c60b13e34bc6e9c38b791867c1b 100644 --- a/dbrepo-search-service/Pipfile +++ b/dbrepo-search-service/Pipfile @@ -17,7 +17,7 @@ flask_httpauth = "*" jwt = "~=1.3" rdflib = "*" grafana-client = "*" -dbrepo = {path = "./lib/dbrepo-1.8.2rc6.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.8.2.tar.gz"} gunicorn = "*" [dev-packages] diff --git a/dbrepo-search-service/Pipfile.lock b/dbrepo-search-service/Pipfile.lock index e934f1f67f79d9793a5fb6a15ace17cc3752288b..65fe75dd41218de10e1b573db8c386163a3cef08 100644 --- a/dbrepo-search-service/Pipfile.lock +++ b/dbrepo-search-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "68aaa1acf2e9a0bce5e435584ced545d48713e8eeb563b27fbb3ee112a74bb81" + "sha256": "81c685d7b8966e019d5e9f0821ae592ec36dae0ab851cc342bcbb1b173e69cc0" }, "pipfile-spec": 6, "requires": { @@ -16,109 +16,6 @@ ] }, "default": { - "aiohappyeyeballs": { - "hashes": [ - "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", - "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8" - ], - "markers": "python_version >= '3.9'", - "version": "==2.6.1" - }, - "aiohttp": { - "hashes": [ - "sha256:0700055a6e05c2f4711011a44364020d7a10fbbcd02fbf3e30e8f7e7fddc8717", - "sha256:0a8d8f20c39d3fa84d1c28cdb97f3111387e48209e224408e75f29c6f8e0861d", - "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8", - "sha256:0f421843b0f70740772228b9e8093289924359d306530bcd3926f39acbe1adda", - "sha256:106032eaf9e62fd6bc6578c8b9e6dc4f5ed9a5c1c7fb2231010a1b4304393421", - "sha256:11d5391946605f445ddafda5eab11caf310f90cdda1fd99865564e3164f5cff9", - "sha256:122f3e739f6607e5e4c6a2f8562a6f476192a682a52bda8b4c6d4254e1138f4d", - "sha256:12a62691eb5aac58d65200c7ae94d73e8a65c331c3a86a2e9670927e94339ee8", - "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3", - "sha256:1596ebf17e42e293cbacc7a24c3e0dc0f8f755b40aff0402cb74c1ff6baec1d3", - "sha256:25557982dd36b9e32c0a3357f30804e80790ec2c4d20ac6bcc598533e04c6361", - "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137", - "sha256:2c828b6d23b984255b85b9b04a5b963a74278b7356a7de84fda5e3b76866597b", - "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd", - "sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8", - "sha256:3849ead845e8444f7331c284132ab314b4dac43bfae1e3cf350906d4fff4620f", - "sha256:3a621d85e85dccabd700294494d7179ed1590b6d07a35709bb9bd608c7f5dd1d", - "sha256:3b8d2b42073611c860a37f718b3d61ae8b4c2b124b2e776e2c10619d920350ec", - "sha256:3cc314245deb311364884e44242e00c18b5896e4fe6d5f942e7ad7e4cb640adb", - "sha256:3cec21dd68924179258ae14af9f5418c1ebdbba60b98c667815891293902e5e0", - "sha256:3d518ce32179f7e2096bf4e3e8438cf445f05fedd597f252de9f54c728574756", - "sha256:40fbf91f6a0ac317c0a07eb328a1384941872f6761f2e6f7208b63c4cc0a7ff6", - "sha256:427fdc56ccb6901ff8088544bde47084845ea81591deb16f957897f0f0ba1be9", - "sha256:44ff5625413fec55216da5eaa011cf6b0a2ed67a565914a212a51aa3755b0009", - "sha256:46533e6792e1410f9801d09fd40cbbff3f3518d1b501d6c3c5b218f427f6ff08", - "sha256:469ac32375d9a716da49817cd26f1916ec787fc82b151c1c832f58420e6d3533", - "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811", - "sha256:5199be2a2f01ffdfa8c3a6f5981205242986b9e63eb8ae03fd18f736e4840721", - "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118", - "sha256:554c918ec43f8480b47a5ca758e10e793bd7410b83701676a4782672d670da55", - "sha256:5691dc38750fcb96a33ceef89642f139aa315c8a193bbd42a0c33476fd4a1609", - "sha256:5bc0ae0a5e9939e423e065a3e5b00b24b8379f1db46046d7ab71753dfc7dd0e1", - "sha256:5c2eaa145bb36b33af1ff2860820ba0589e165be4ab63a49aebfd0981c173b66", - "sha256:5d61df4a05476ff891cff0030329fee4088d40e4dc9b013fac01bc3c745542c2", - "sha256:5e7007b8d1d09bce37b54111f593d173691c530b80f27c6493b928dabed9e6ef", - "sha256:5e8452ad6b2863709f8b3d615955aa0807bc093c34b8e25b3b52097fe421cb7f", - "sha256:63d71eceb9cad35d47d71f78edac41fcd01ff10cacaa64e473d1aec13fa02df2", - "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804", - "sha256:73b8870fe1c9a201b8c0d12c94fe781b918664766728783241a79e0468427e4f", - "sha256:767a97e6900edd11c762be96d82d13a1d7c4fc4b329f054e88b57cdc21fded94", - "sha256:7ccec9e72660b10f8e283e91aa0295975c7bd85c204011d9f5eb69310555cf30", - "sha256:7d0aebeb2392f19b184e3fdd9e651b0e39cd0f195cdb93328bd124a1d455cd0e", - "sha256:7e889c9df381a2433802991288a61e5a19ceb4f61bd14f5c9fa165655dcb1fd1", - "sha256:7f33a92a2fde08e8c6b0c61815521324fc1612f397abf96eed86b8e31618fdb4", - "sha256:8a4076a2b3ba5b004b8cffca6afe18a3b2c5c9ef679b4d1e9859cf76295f8d4f", - "sha256:8bd1cde83e4684324e6ee19adfc25fd649d04078179890be7b29f76b501de8e4", - "sha256:8e57da93e24303a883146510a434f0faf2f1e7e659f3041abc4e3fb3f6702a9f", - "sha256:9602044ff047043430452bc3a2089743fa85da829e6fc9ee0025351d66c332b6", - "sha256:96264854fedbea933a9ca4b7e0c745728f01380691687b7365d18d9e977179c4", - "sha256:9c23fd8d08eb9c2af3faeedc8c56e134acdaf36e2117ee059d7defa655130e5f", - "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7", - "sha256:9ea345fda05bae217b6cce2acf3682ce3b13d0d16dd47d0de7080e5e21362421", - "sha256:9f26545b9940c4b46f0a9388fd04ee3ad7064c4017b5a334dd450f616396590e", - "sha256:a2fd04ae4971b914e54fe459dd7edbbd3f2ba875d69e057d5e3c8e8cac094935", - "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c", - "sha256:ab2ef72f8605046115bc9aa8e9d14fd49086d405855f40b79ed9e5c1f9f4faea", - "sha256:ad2f41203e2808616292db5d7170cccf0c9f9c982d02544443c7eb0296e8b0c7", - "sha256:ad8c745ff9460a16b710e58e06a9dec11ebc0d8f4dd82091cefb579844d69868", - "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a", - "sha256:b2f317d1678002eee6fe85670039fb34a757972284614638f82b903a03feacdc", - "sha256:b426495fb9140e75719b3ae70a5e8dd3a79def0ae3c6c27e012fc59f16544a4a", - "sha256:b491e42183e8fcc9901d8dcd8ae644ff785590f1727f76ca86e731c61bfe6643", - "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01", - "sha256:c1b90407ced992331dd6d4f1355819ea1c274cc1ee4d5b7046c6761f9ec11829", - "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93", - "sha256:cc93a4121d87d9f12739fc8fab0a95f78444e571ed63e40bfc78cd5abe700ac9", - "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78", - "sha256:d1929da615840969929e8878d7951b31afe0bac883d84418f92e5755d7b49508", - "sha256:d9e6b0e519067caa4fd7fb72e3e8002d16a68e84e62e7291092a5433763dc0dd", - "sha256:e220e7562467dc8d589e31c1acd13438d82c03d7f385c9cd41a3f6d1d15807c1", - "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2", - "sha256:e6f3c0a3a1e73e88af384b2e8a0b9f4fb73245afd47589df2afcab6b638fa0e6", - "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261", - "sha256:eab7b040a8a873020113ba814b7db7fa935235e4cbaf8f3da17671baa1024863", - "sha256:f0ddc9337a0fb0e727785ad4f41163cc314376e82b31846d3835673786420ef1", - "sha256:f2c50bad73ed629cc326cc0f75aed8ecfb013f88c5af116f33df556ed47143eb", - "sha256:f414f37b244f2a97e79b98d48c5ff0789a0b4b4609b17d64fa81771ad780e415", - "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000", - "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1", - "sha256:fdb239f47328581e2ec7744ab5911f97afb10752332a6dd3d98e14e429e1a9e7", - "sha256:fe7cdd3f7d1df43200e1c80f1aed86bb36033bf65e3c7cf46a2b97a253ef8798" - ], - "markers": "python_version >= '3.9'", - "version": "==3.11.18" - }, - "aiosignal": { - "hashes": [ - "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", - "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54" - ], - "markers": "python_version >= '3.9'", - "version": "==1.3.2" - }, "annotated-types": { "hashes": [ "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", @@ -221,7 +118,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.17.1" }, "charset-normalizer": { @@ -375,10 +272,9 @@ }, "dbrepo": { "hashes": [ - "sha256:5dbd2230489d0af8eb4509b7231764289972e6282037b27e97a3824a5d234090" + "sha256:76f0ab97d1e914a779aa51b5e5a17591b2f1c88f15dc9df27273deb4dc7ed125" ], - "path": "./lib/dbrepo-1.8.2rc6.tar.gz", - "version": "==1.8.2rc6" + "path": "./lib/dbrepo-1.8.2.tar.gz" }, "events": { "hashes": [ @@ -399,6 +295,7 @@ "sha256:f69fcd559dc907ed196ab9df0e48471709175e696d6e698dd4dbe940f96ce66b" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==2.3.3" }, "flask-cors": { @@ -423,6 +320,7 @@ "sha256:8085d6757505b6f3291a2638c84d207e8f0ad0de662d1f46aa2f77e658a0c976" ], "index": "pypi", + "markers": "python_version >= '3.9' and python_version < '4'", "version": "==4.7.1" }, "flask-sqlalchemy": { @@ -431,124 +329,16 @@ "sha256:e4b68bb881802dda1a7d878b2fc84c06d1ee57fb40b874d3dc97dabfa36b8312" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==3.1.1" }, - "frozenlist": { - "hashes": [ - "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117", - "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2", - "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42", - "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812", - "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3", - "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a", - "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572", - "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa", - "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b", - "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626", - "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e", - "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d", - "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c", - "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530", - "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878", - "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e", - "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869", - "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd", - "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603", - "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606", - "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85", - "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64", - "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f", - "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0", - "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c", - "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4", - "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103", - "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02", - "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191", - "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0", - "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e", - "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791", - "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983", - "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f", - "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff", - "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8", - "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860", - "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8", - "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25", - "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f", - "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba", - "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24", - "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e", - "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd", - "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911", - "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c", - "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595", - "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c", - "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc", - "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2", - "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75", - "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4", - "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0", - "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe", - "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249", - "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c", - "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576", - "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b", - "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770", - "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046", - "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584", - "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497", - "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f", - "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f", - "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b", - "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f", - "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d", - "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a", - "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e", - "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68", - "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189", - "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9", - "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8", - "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1", - "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0", - "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3", - "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29", - "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0", - "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215", - "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590", - "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c", - "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821", - "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1", - "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769", - "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506", - "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3", - "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348", - "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad", - "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a", - "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad", - "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6", - "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45", - "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188", - "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e", - "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70", - "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70", - "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1", - "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106", - "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd", - "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc", - "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352", - "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91", - "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1", - "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f" - ], - "markers": "python_version >= '3.9'", - "version": "==1.6.0" - }, "grafana-client": { "hashes": [ "sha256:2477a47b923fd0637947e620b0b777c641af18a3025464fa4505783dbf05dfcc", "sha256:8cb61bb2a87ec07bca10974df276b9a1a95bfdb63f3a696f065692ffc9b8c389" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==4.3.2" }, "greenlet": { @@ -609,7 +399,7 @@ "sha256:e98328b8b8f160925d6b1c5b1879d8e64f6bd8cf11472b7127d579da575b77d9", "sha256:ff38c869ed30fff07f1452d9a204ece1ec6d3c0870e0ba6e478ce7c1515acf22" ], - "markers": "python_version < '3.14' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))))", + "markers": "python_version >= '3.9'", "version": "==3.2.1" }, "gunicorn": { @@ -618,6 +408,7 @@ "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==23.0.0" }, "h11": { @@ -776,6 +567,7 @@ "sha256:61c9170f92e736b530655e75374681d4fcca9cfa8763ab42be57353b2b203494" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==1.3.1" }, "markupsafe": { @@ -853,116 +645,6 @@ "markers": "python_version >= '3.8'", "version": "==3.1.3" }, - "multidict": { - "hashes": [ - "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756", - "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8", - "sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef", - "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c", - "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5", - "sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8", - "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db", - "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713", - "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44", - "sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378", - "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5", - "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676", - "sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08", - "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea", - "sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9", - "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9", - "sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e", - "sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b", - "sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508", - "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1", - "sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852", - "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac", - "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde", - "sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8", - "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504", - "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5", - "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02", - "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4", - "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec", - "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a", - "sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666", - "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc", - "sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf", - "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790", - "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8", - "sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589", - "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d", - "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07", - "sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56", - "sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21", - "sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7", - "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9", - "sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343", - "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9", - "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4", - "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a", - "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427", - "sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459", - "sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6", - "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208", - "sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229", - "sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0", - "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474", - "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817", - "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd", - "sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618", - "sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5", - "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3", - "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124", - "sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1", - "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb", - "sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7", - "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3", - "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375", - "sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39", - "sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752", - "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0", - "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188", - "sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451", - "sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078", - "sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7", - "sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7", - "sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f", - "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b", - "sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f", - "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c", - "sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291", - "sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897", - "sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887", - "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1", - "sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685", - "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf", - "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6", - "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731", - "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507", - "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b", - "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae", - "sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777", - "sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7", - "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be", - "sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df", - "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054", - "sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2", - "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124", - "sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c", - "sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840", - "sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8", - "sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd", - "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8", - "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3", - "sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e", - "sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2", - "sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1", - "sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad" - ], - "markers": "python_version >= '3.9'", - "version": "==6.4.3" - }, "niquests": { "hashes": [ "sha256:68e0a7e9f338466b3606945fffd11f75e3c90af7498aa9336ef03812323b7e36", @@ -1029,7 +711,7 @@ "sha256:ee461a4eaab4f165b68780a6a1af95fb23a29932be7569b9fab666c407969051", "sha256:f5045039100ed58fa817a6227a356240ea1b9a1bc141018864c306c1a16d4175" ], - "markers": "python_version == '3.11'", + "markers": "python_version >= '3.10'", "version": "==2.2.5" }, "opensearch-py": { @@ -1038,6 +720,7 @@ "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda" ], "index": "pypi", + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==2.8.0" }, "packaging": { @@ -1120,110 +803,6 @@ "index": "pypi", "version": "==0.23.2" }, - "propcache": { - "hashes": [ - "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e", - "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b", - "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf", - "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b", - "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5", - "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c", - "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c", - "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a", - "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf", - "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8", - "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5", - "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42", - "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035", - "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0", - "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e", - "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46", - "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d", - "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24", - "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d", - "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de", - "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf", - "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7", - "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371", - "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833", - "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259", - "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136", - "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25", - "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005", - "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef", - "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7", - "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f", - "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53", - "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0", - "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb", - "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566", - "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a", - "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908", - "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf", - "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458", - "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64", - "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9", - "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71", - "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b", - "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5", - "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037", - "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5", - "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894", - "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe", - "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757", - "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3", - "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976", - "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6", - "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641", - "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7", - "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649", - "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120", - "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd", - "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40", - "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e", - "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229", - "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c", - "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7", - "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111", - "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654", - "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f", - "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294", - "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da", - "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f", - "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7", - "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0", - "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073", - "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7", - "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11", - "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f", - "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27", - "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70", - "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7", - "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519", - "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5", - "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180", - "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f", - "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee", - "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18", - "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815", - "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e", - "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a", - "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7", - "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6", - "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c", - "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc", - "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8", - "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98", - "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256", - "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5", - "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744", - "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723", - "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277", - "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5" - ], - "markers": "python_version >= '3.9'", - "version": "==0.3.1" - }, "pycparser": { "hashes": [ "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", @@ -1375,6 +954,7 @@ "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==1.1.0" }, "pytz": { @@ -1541,7 +1121,7 @@ "sha256:fa1bf4d9838e4c8cdf309500a908fc412cdc325a63e5c74ad88a794bed16c943", "sha256:fcdd2f6b1b1500bde96b442d777a563eadca1b825db0c42ac6aef45ad9ec3c4d" ], - "markers": "(platform_python_implementation != 'CPython' or python_full_version > '3.7.10') and (platform_system == 'Darwin' or platform_system == 'Windows' or platform_system == 'Linux') and (platform_machine == 'x86_64' or platform_machine == 's390x' or platform_machine == 'armv7l' or platform_machine == 'ppc64le' or platform_machine == 'ppc64' or platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'arm64' or platform_machine == 'ARM64' or platform_machine == 'x86' or platform_machine == 'i686') and (platform_python_implementation == 'CPython' or (platform_python_implementation == 'PyPy' and python_version < '3.12'))", + "markers": "python_version >= '3.7'", "version": "==1.5.1" }, "rdflib": { @@ -1550,6 +1130,7 @@ "sha256:fed46e24f26a788e2ab8e445f7077f00edcf95abb73bcef4b86cefa8b62dd174" ], "index": "pypi", + "markers": "python_full_version >= '3.8.1' and python_full_version < '4.0.0'", "version": "==7.1.4" }, "referencing": { @@ -1765,24 +1346,9 @@ "sha256:bc599c8c3b3319e53ce6c5c3c471120bd325d0071fb6f38a10e924e3d07b9990" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.41.2" }, - "tinydb": { - "hashes": [ - "sha256:f7dfc39b8d7fda7a1ca62a8dbb449ffd340a117c1206b68c50b1a481fb95181d", - "sha256:f97030ee5cbc91eeadd1d7af07ab0e48ceb04aa63d4a983adbaca4cba16e86c3" - ], - "markers": "python_version >= '3.8' and python_version < '4.0'", - "version": "==4.8.2" - }, - "tuspy": { - "hashes": [ - "sha256:156734eac5c61a046cfecd70f14119f05be92cce198eb5a1a99a664482bedb89", - "sha256:7fc5ac8fb25de37c96c90213f83a1ffdede7f48a471cb5a15a2f57846828a79a" - ], - "markers": "python_full_version >= '3.5.3'", - "version": "==1.1.0" - }, "typing-extensions": { "hashes": [ "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", @@ -1812,16 +1378,16 @@ "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813" ], - "markers": "python_version >= '3.10'", + "markers": "python_version >= '3.9'", "version": "==2.4.0" }, "urllib3-future": { "hashes": [ - "sha256:ce90c1ef08b265eccf29676f759a3a30a36b6ccc8a9e97d3473ea4b26f586d52", - "sha256:f341b1ff506c0c7f92cf3d98bd6683b398cad24b62e0277ce6f386222b85951a" + "sha256:642b235a89cbddb7a3c6703a11fd0255473231be791214fd01abd465371ea8fb", + "sha256:a4f2a94da920f62f4c957931d3a1cc364efdd0fbb984624db7ad7347aa27afad" ], "markers": "python_version >= '3.7'", - "version": "==2.12.919" + "version": "==2.12.920" }, "verlib2": { "hashes": [ @@ -1934,116 +1500,6 @@ ], "markers": "python_version >= '3.9'", "version": "==3.1.3" - }, - "yarl": { - "hashes": [ - "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9", - "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa", - "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61", - "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2", - "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2", - "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33", - "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902", - "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2", - "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914", - "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0", - "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0", - "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569", - "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f", - "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7", - "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20", - "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00", - "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1", - "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc", - "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f", - "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a", - "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd", - "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c", - "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f", - "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5", - "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d", - "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501", - "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3", - "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0", - "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26", - "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2", - "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c", - "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c", - "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae", - "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de", - "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a", - "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe", - "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8", - "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124", - "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb", - "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc", - "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2", - "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac", - "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307", - "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58", - "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e", - "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e", - "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62", - "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b", - "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe", - "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda", - "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5", - "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64", - "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229", - "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62", - "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6", - "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d", - "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791", - "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672", - "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb", - "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94", - "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a", - "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10", - "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e", - "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9", - "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5", - "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da", - "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c", - "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a", - "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d", - "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195", - "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594", - "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8", - "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634", - "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051", - "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8", - "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e", - "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384", - "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076", - "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656", - "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018", - "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19", - "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a", - "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4", - "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2", - "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64", - "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145", - "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7", - "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995", - "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6", - "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f", - "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f", - "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487", - "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9", - "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a", - "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d", - "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f", - "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1", - "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22", - "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d", - "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c", - "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877", - "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5", - "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867", - "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3" - ], - "markers": "python_version >= '3.9'", - "version": "==1.20.0" } }, "develop": { @@ -2125,7 +1581,7 @@ "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87", "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b" ], - "markers": "platform_python_implementation != 'PyPy'", + "markers": "python_version >= '3.8'", "version": "==1.17.1" }, "charset-normalizer": { @@ -2293,6 +1749,7 @@ "sha256:fa260de59dfb143af06dcf30c2be0b200bed2a73737a8a59248fcb9fa601ef0f" ], "index": "pypi", + "markers": "python_version >= '3.9'", "version": "==7.8.0" }, "cryptography": { @@ -2373,6 +1830,7 @@ "sha256:61c9170f92e736b530655e75374681d4fcca9cfa8763ab42be57353b2b203494" ], "index": "pypi", + "markers": "python_version >= '3.6'", "version": "==1.3.1" }, "opensearch-py": { @@ -2381,6 +1839,7 @@ "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda" ], "index": "pypi", + "markers": "python_version >= '3.8' and python_version < '4'", "version": "==2.8.0" }, "packaging": { @@ -2413,6 +1872,7 @@ "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845" ], "index": "pypi", + "markers": "python_version >= '3.8'", "version": "==8.3.5" }, "python-dateutil": { @@ -2437,6 +1897,7 @@ "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401" ], "index": "pypi", + "markers": "python_version >= '3.5'", "version": "==1.12.1" }, "six": { @@ -2459,6 +1920,7 @@ "sha256:0bdf270b5b7f53915832f7c31dd2bd3ffdc20b534ea6b32231cc7003049bd0e1" ], "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.0.1rc1" }, "urllib3": { @@ -2466,7 +1928,7 @@ "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813" ], - "markers": "python_version >= '3.10'", + "markers": "python_version >= '3.9'", "version": "==2.4.0" }, "wrapt": { diff --git a/dbrepo-search-service/app.py b/dbrepo-search-service/app.py index f8413609a617b7e0bf639c24c2362f2a01c24e98..ef577429b79ee647d2daf9221d9a445964780863 100644 --- a/dbrepo-search-service/app.py +++ b/dbrepo-search-service/app.py @@ -29,17 +29,32 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', + }, + 'ecs': { + 'format': '{"@timestamp": "%(asctime)s", "log.level": "%(levelname)s", "log.logger": "%(module)s", "message": "%(message)s", "service_name": "search-service", "service_version": "1.8.2"}', + 'datefmt': '%Y-%m-%dT%H:%M:%S' + }, + }, + 'handlers': { + 'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'simple' + }, + 'file': { + 'class': 'logging.handlers.TimedRotatingFileHandler', + 'formatter': 'ecs', + 'filename': '/var/log/app/service/search/app.log', + 'when': 'm', + 'interval': 1, + 'backupCount': 5, + 'encoding': 'utf8' }, }, - 'handlers': {'wsgi': { - 'class': 'logging.StreamHandler', - 'stream': 'ext://flask.logging.wsgi_errors_stream', - 'formatter': 'simple' # default - }}, 'root': { 'level': 'DEBUG', - 'handlers': ['wsgi'] + 'handlers': ['wsgi', 'file'] } }) @@ -60,8 +75,8 @@ swagger_config = { "headers": [], "specs": [ { - "endpoint": "api-search", - "route": "/api-search.json", + "endpoint": "api-docs", + "route": "/api-docs.json", "rule_filter": lambda rule: rule.endpoint.startswith('search'), "model_filter": lambda tag: True, # all in } @@ -281,7 +296,7 @@ def health(): @app.route("/api/search/<string:index>", methods=["GET"], endpoint="search_get_index") @metrics.gauge(name='dbrepo_search_index_list', description='Time needed to list search index') -@swag_from("os-yml/get_index.yml") +@swag_from("/app/os-yml/get_index.yml") def get_index(index: str): """ returns all entries in a specific index @@ -305,7 +320,7 @@ def get_index(index: str): @app.route("/api/search/<string:field_type>/fields", methods=["GET"], endpoint="search_get_index_fields") @metrics.gauge(name='dbrepo_search_type_list', description='Time needed to list search types') -@swag_from("os-yml/get_fields.yml") +@swag_from("/app/os-yml/get_fields.yml") def get_fields(field_type: str): """ returns a list of attributes of the data for a specific index. @@ -324,7 +339,7 @@ def get_fields(field_type: str): @app.route("/api/search", methods=["GET"], endpoint="search_fuzzy_search") @metrics.gauge(name='dbrepo_search_fuzzy', description='Time needed to search fuzzy') -@swag_from("os-yml/get_fuzzy_search.yml") +@swag_from("/app/os-yml/get_fuzzy_search.yml") def get_fuzzy_search(): """ Main endpoint for fuzzy searching. @@ -347,7 +362,7 @@ def get_fuzzy_search(): @app.route("/api/search/<string:field_type>", methods=["POST"], endpoint="search_post_general_search") @metrics.gauge(name='dbrepo_search_type', description='Time needed to search by type') -@swag_from("os-yml/post_general_search.yml") +@swag_from("/app/os-yml/post_general_search.yml") def post_general_search(field_type): """ Main endpoint for fuzzy searching. @@ -430,8 +445,8 @@ def save_database(database_id: str): try: payload = Database.model_validate(request.json) except ValidationError as e: - logging.error(f"Failed to validate: {e}") - return ApiError(status='BAD_REQUEST', message=f'Malformed payload: {e}', + logging.error(f"Failed to validate: {str(e).strip()}") + return ApiError(status='BAD_REQUEST', message=f'Malformed payload: {str(e).strip()}', code='search.general.missing').model_dump(), 400 search_client().save_database(database_id, payload) return Response(), 202, headers diff --git a/dbrepo-search-service/init.Dockerfile b/dbrepo-search-service/init.Dockerfile index 2099df48cc53586a0cfa64bae3ea1dd4615c6780..231e8d85513adb62beac7c208b2fa97a4924ec37 100644 --- a/dbrepo-search-service/init.Dockerfile +++ b/dbrepo-search-service/init.Dockerfile @@ -18,6 +18,9 @@ RUN adduser -D dbrepo --uid 1001 WORKDIR /app +RUN mkdir -p /var/log/app/service/search && \ + chown -R 1001:1001 /var/log/app + USER 1001 COPY --chown=1001 ./database.json ./database.json diff --git a/dbrepo-search-service/init.py b/dbrepo-search-service/init.py index 48a59538e01fc232fe49675db5692cb21c2f8942..798b59b9df4e02303ac72d6268be4e63bc42c99d 100644 --- a/dbrepo-search-service/init.py +++ b/dbrepo-search-service/init.py @@ -19,17 +19,32 @@ dictConfig({ 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', }, 'simple': { - 'format': '[%(asctime)s] %(levelname)s: %(message)s', + 'format': '[%(asctime)s] [%(levelname)s] %(message)s', + }, + 'ecs': { + 'format': '{"@timestamp": "%(asctime)s", "log.level": "%(levelname)s", "log.logger": "%(module)s", "message": "%(message)s", "service_name": "search-service-init", "service_version": "1.8.2"}', + 'datefmt': '%Y-%m-%dT%H:%M:%S' + }, + }, + 'handlers': { + 'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'simple' + }, + 'file': { + 'class': 'logging.handlers.TimedRotatingFileHandler', + 'formatter': 'ecs', + 'filename': '/var/log/app/service/search/init.log', + 'when': 'm', + 'interval': 1, + 'backupCount': 5, + 'encoding': 'utf8' }, }, - 'handlers': {'wsgi': { - 'class': 'logging.StreamHandler', - 'stream': 'ext://flask.logging.wsgi_errors_stream', - 'formatter': 'simple' # default - }}, 'root': { 'level': 'DEBUG', - 'handlers': ['wsgi'] + 'handlers': ['wsgi', 'file'] } }) diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.8.2-py3-none-any.whl index 6a21f512b36f30367f641061c8efeba90108a6c7..48beeb5ebf61c7cca654e0ee66343fac70bb4d53 100644 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2-py3-none-any.whl and b/dbrepo-search-service/lib/dbrepo-1.8.2-py3-none-any.whl differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2.tar.gz b/dbrepo-search-service/lib/dbrepo-1.8.2.tar.gz index f98a45d02b802376ff7614c008eec8783f281896..3e3b65b6b93a602ee26c2f4d4c71c2d3cd331211 100644 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2.tar.gz and b/dbrepo-search-service/lib/dbrepo-1.8.2.tar.gz differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl deleted file mode 100644 index 86a1af2af41c44d35a4da7a472c180854f0cd82c..0000000000000000000000000000000000000000 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2rc3-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2rc3.tar.gz b/dbrepo-search-service/lib/dbrepo-1.8.2rc3.tar.gz deleted file mode 100644 index 9c03ed275c6da5b2eef3619c59269f398d59c7de..0000000000000000000000000000000000000000 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2rc3.tar.gz and /dev/null differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl deleted file mode 100644 index 5a0dbc7c95592f2e70bed13fa33d85cc6cdf7811..0000000000000000000000000000000000000000 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2rc4-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2rc4.tar.gz b/dbrepo-search-service/lib/dbrepo-1.8.2rc4.tar.gz deleted file mode 100644 index 1dbc78c989362d4d0c3750b1ad942abe46f205dd..0000000000000000000000000000000000000000 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2rc4.tar.gz and /dev/null differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl deleted file mode 100644 index 50bf1b8195987f6f8d23a36f34bc0f912b6fd9b3..0000000000000000000000000000000000000000 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2rc5-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2rc5.tar.gz b/dbrepo-search-service/lib/dbrepo-1.8.2rc5.tar.gz deleted file mode 100644 index be8784437f111e2d4a5cdac36baf77605114dfa5..0000000000000000000000000000000000000000 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2rc5.tar.gz and /dev/null differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl deleted file mode 100644 index 8e4c745a2ce782c174d5e1db7eef22d51d26624c..0000000000000000000000000000000000000000 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2rc6-py3-none-any.whl and /dev/null differ diff --git a/dbrepo-search-service/lib/dbrepo-1.8.2rc6.tar.gz b/dbrepo-search-service/lib/dbrepo-1.8.2rc6.tar.gz deleted file mode 100644 index 279243fd37fe033fe4aa740361b5e9a370516924..0000000000000000000000000000000000000000 Binary files a/dbrepo-search-service/lib/dbrepo-1.8.2rc6.tar.gz and /dev/null differ diff --git a/dbrepo-storage-service/init/Dockerfile b/dbrepo-storage-service/init/Dockerfile index ad0d2ae853b7a0cb9a4aa87c782c939547c3dd4b..7ea74cddf1e5d1ca5fe686aee621c5f988756560 100644 --- a/dbrepo-storage-service/init/Dockerfile +++ b/dbrepo-storage-service/init/Dockerfile @@ -7,6 +7,9 @@ RUN apk --no-cache add \ WORKDIR /app +RUN mkdir -p /var/log/app/service/storage && \ + chown -R 1001:1001 /var/log/app/service/storage + RUN adduser -D dbrepo --uid 1001 COPY --chown=1001 --chmod=0744 ./init.sh /app/init.sh diff --git a/dbrepo-storage-service/init/init.sh b/dbrepo-storage-service/init/init.sh index b112f70ac8cae6b6dae0612bf2e0d0bb7c6f5f27..f40712e81be5e7030c4c3988896411e8fde7f36a 100644 --- a/dbrepo-storage-service/init/init.sh +++ b/dbrepo-storage-service/init/init.sh @@ -10,12 +10,18 @@ use_https = False signature_v2 = False EOF +function log() { + echo "{\"@timestamp\":\"$(date --rfc-3339='seconds')\", \"log.level\": \"$1\", \"message\": \"$2\"}" >> /var/log/app/service/storage/init.log +} + # create bucket if s3cmd --config=/app/.s3cfg ls | grep -q "s3://${S3_BUCKET}"; then - echo "[INFO] Bucket s3://${S3_BUCKET} already exists, skip." + echo "[INFO] Bucket s3://${S3_BUCKET} already exists, skip" + log "INFO" "Bucket s3://${S3_BUCKET} already exists, skip" else if ! s3cmd --config=/app/.s3cfg mb s3://${S3_BUCKET}; then echo "[ERROR] Failed to create bucket s3://${S3_BUCKET}" + log "ERROR" "Failed to create bucket s3://${S3_BUCKET}" fi fi diff --git a/dbrepo-ui/bun.lockb b/dbrepo-ui/bun.lockb index a4bc73dcd16c8e4a59a34fd431a7acf3a20627fa..d455f25e4329f14f8ca9973e541a3a5a1bba5281 100755 Binary files a/dbrepo-ui/bun.lockb and b/dbrepo-ui/bun.lockb differ diff --git a/dbrepo-ui/layouts/default.vue b/dbrepo-ui/layouts/default.vue index 7267242288c5eadaf184fdb1afe4e485a03f78dc..5784905294da2842c18aa9779e191a34f3c4ab76 100644 --- a/dbrepo-ui/layouts/default.vue +++ b/dbrepo-ui/layouts/default.vue @@ -56,7 +56,7 @@ <v-spacer /> <v-btn variant="plain" - :text="commitShort" + :text="commit" size="x-small" prepend-icon="mdi-source-commit" :href="`https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/commit/${commit}`" /> @@ -249,9 +249,6 @@ export default { commit () { return this.$config.public.commit }, - commitShort () { - return this.$config.public.commit.substr(0, 8) - }, error () { if (this.identifier) { return null diff --git a/dbrepo-ui/package-lock.json b/dbrepo-ui/package-lock.json deleted file mode 100644 index 52dbae9ae9248f8c70c251817a101b95ecf42ed9..0000000000000000000000000000000000000000 --- a/dbrepo-ui/package-lock.json +++ /dev/null @@ -1,12446 +0,0 @@ -{ - "name": "dbrepo-ui", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "dbrepo-ui", - "hasInstallScript": true, - "dependencies": { - "@artmizu/nuxt-prometheus": "^2.4.0", - "@date-fns/utc": "^2.1.0", - "@fontsource/open-sans": "^5.0.24", - "@mdi/font": "^7.4.47", - "@nuxtjs/robots": "^3.0.0", - "@nuxtjs/sitemap": "^5.2.0", - "@pinia/nuxt": "^0.5.1", - "ace-builds": "^1.32.6", - "axios": "^1.6.7", - "buffer": "^6.0.3", - "chart.js": "^4.4.1", - "date-fns": "^3.3.1", - "http-status-codes": "^2.3.0", - "jwt-decode": "^4.0.0", - "merkle-json": "^2.6.0", - "moment": "^2.30.1", - "nuxt": "^3.10.3", - "nuxt-oidc-auth": "^1.0.0-beta.5", - "parse-md": "^3.0.3", - "pinia": "^2.1.7", - "qs": "^6.11.2", - "sql-formatter": "^15.2.0", - "tus-js-client": "^4.0.1", - "vue": "^3.4.21", - "vue-axios": "^3.5.2", - "vue-chartjs": "^5.3.0", - "vue-meta": "^2.4.0", - "vue-toast-notification": "^3.1.2", - "vue3-ace-editor": "^2.2.4", - "vuetify": "^3.7.2" - }, - "devDependencies": { - "@nuxtjs/i18n": "^8.1.1", - "@pinia-plugin-persistedstate/nuxt": "^1.2.0", - "@types/qs": "^6.9.12", - "sass": "^1.71.0", - "vite-plugin-vuetify": "^2.0.4" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@antfu/install-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz", - "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==", - "dependencies": { - "package-manager-detector": "^0.2.8", - "tinyexec": "^0.3.2" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@antfu/utils": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", - "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@artmizu/nuxt-prometheus": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@artmizu/nuxt-prometheus/-/nuxt-prometheus-2.4.0.tgz", - "integrity": "sha512-scLoSmOXN2SAGOkO/eFFN1MvfLUcj/FLN7cXCda5xQnHfHTKL3ac2BHgeyv4ylleirnOwYfWzco/KQXx2WixHQ==", - "dependencies": { - "@mswjs/interceptors": "^0.28.4", - "@nuxt/kit": "^3.11.2", - "consola": "^3.2.3", - "defu": "^6.1.2", - "h3": "^1.7.1", - "prom-client": "^14.2.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", - "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", - "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.26.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", - "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", - "dependencies": { - "@babel/types": "^7.26.9" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", - "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-decorators": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", - "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", - "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/standalone": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.26.9.tgz", - "integrity": "sha512-UTeQKy0kzJwWRe55kT1uK4G9H6D0lS6G4207hCU/bDaOhA5t2aC0qHN6GmID0Axv3OFLNXm27NdqcWp+BXcGtA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", - "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", - "dependencies": { - "mime": "^3.0.0" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/@cloudflare/kv-asset-handler/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@date-fns/utc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@date-fns/utc/-/utc-2.1.0.tgz", - "integrity": "sha512-176grgAgU2U303rD2/vcOmNg0kGPbhzckuH1TEP2al7n0AQipZIy9P15usd2TKQCG1g+E1jX/ZVQSzs4sUDwgA==" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@fontsource/open-sans": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-5.1.1.tgz", - "integrity": "sha512-Wfio5om0XH24ZUu6FfW4r50e4xLdoLzvd8midtqUFT2unniyWQj6GJ05RW1YQsHp4Sug3i+agFBIxEmYQzUHSg==" - }, - "node_modules/@iconify-json/carbon": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@iconify-json/carbon/-/carbon-1.2.7.tgz", - "integrity": "sha512-nqEjicnNdb3CnY21MsTr9DfU8JBkP9C8hup1bCe4zvpLKjcU9YRmYChUbqZYBP4P+BL5NdrprTSN+B7qJg3H3Q==", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify-json/logos": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@iconify-json/logos/-/logos-1.2.4.tgz", - "integrity": "sha512-XC4If5D/hbaZvUkTV8iaZuGlQCyG6CNOlaAaJaGa13V5QMYwYjgtKk3vPP8wz3wtTVNVEVk3LRx1fOJz+YnSMw==", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify-json/ri": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@iconify-json/ri/-/ri-1.2.5.tgz", - "integrity": "sha512-kWGimOXMZrlYusjBKKXYOWcKhbOHusFsmrmRGmjS7rH0BpML5A9/fy8KHZqFOwZfC4M6amObQYbh8BqO5cMC3w==", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify-json/tabler": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@iconify-json/tabler/-/tabler-1.2.16.tgz", - "integrity": "sha512-gjvKz38+aOxfZtRvycYrASYipCsHRbCZ/Df49T0tfPntT0ur+qsgJ7PxCM4JF/Xs6+n3JkaFdiUz/N4ZZxDKdQ==", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" - }, - "node_modules/@iconify/utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", - "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", - "dependencies": { - "@antfu/install-pkg": "^1.0.0", - "@antfu/utils": "^8.1.0", - "@iconify/types": "^2.0.0", - "debug": "^4.4.0", - "globals": "^15.14.0", - "kolorist": "^1.8.0", - "local-pkg": "^1.0.0", - "mlly": "^1.7.4" - } - }, - "node_modules/@iconify/utils/node_modules/@antfu/utils": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", - "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@iconify/utils/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@iconify/utils/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@intlify/bundle-utils": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.5.1.tgz", - "integrity": "sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==", - "dev": true, - "dependencies": { - "@intlify/message-compiler": "^9.4.0", - "@intlify/shared": "^9.4.0", - "acorn": "^8.8.2", - "escodegen": "^2.1.0", - "estree-walker": "^2.0.2", - "jsonc-eslint-parser": "^2.3.0", - "magic-string": "^0.30.0", - "mlly": "^1.2.0", - "source-map-js": "^1.0.1", - "yaml-eslint-parser": "^1.2.2" - }, - "engines": { - "node": ">= 14.16" - }, - "peerDependenciesMeta": { - "petite-vue-i18n": { - "optional": true - }, - "vue-i18n": { - "optional": true - } - } - }, - "node_modules/@intlify/bundle-utils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@intlify/core": { - "version": "9.14.2", - "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.14.2.tgz", - "integrity": "sha512-/YsYOtRdKn2RbIz9FjYdb4ZntcB7hJmlfHjMRrRXOH2rJE9T5kdYCTS+LS75xQkRCeHFdAmjGMADuoy4HYpHfA==", - "dev": true, - "dependencies": { - "@intlify/core-base": "9.14.2", - "@intlify/shared": "9.14.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/core-base": { - "version": "9.14.2", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.2.tgz", - "integrity": "sha512-DZyQ4Hk22sC81MP4qiCDuU+LdaYW91A6lCjq8AWPvY3+mGMzhGDfOCzvyR6YBQxtlPjFqMoFk9ylnNYRAQwXtQ==", - "dev": true, - "dependencies": { - "@intlify/message-compiler": "9.14.2", - "@intlify/shared": "9.14.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/h3": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@intlify/h3/-/h3-0.5.0.tgz", - "integrity": "sha512-cgfrtD3qu3BPJ47gfZ35J2LJpI64Riic0K8NGgid5ilyPXRQTNY7mXlT/B+HZYQg1hmBxKa5G5HJXyAZ4R2H5A==", - "dev": true, - "dependencies": { - "@intlify/core": "^9.8.0", - "@intlify/utils": "^0.12.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/message-compiler": { - "version": "9.14.2", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.2.tgz", - "integrity": "sha512-YsKKuV4Qv4wrLNsvgWbTf0E40uRv+Qiw1BeLQ0LAxifQuhiMe+hfTIzOMdWj/ZpnTDj4RSZtkXjJM7JDiiB5LQ==", - "dev": true, - "dependencies": { - "@intlify/shared": "9.14.2", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/shared": { - "version": "9.14.2", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.2.tgz", - "integrity": "sha512-uRAHAxYPeF+G5DBIboKpPgC/Waecd4Jz8ihtkpJQD5ycb5PwXp0k/+hBGl5dAjwF7w+l74kz/PKA8r8OK//RUw==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/unplugin-vue-i18n": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz", - "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==", - "dev": true, - "dependencies": { - "@intlify/bundle-utils": "^7.4.0", - "@intlify/shared": "^9.4.0", - "@rollup/pluginutils": "^5.1.0", - "@vue/compiler-sfc": "^3.2.47", - "debug": "^4.3.3", - "fast-glob": "^3.2.12", - "js-yaml": "^4.1.0", - "json5": "^2.2.3", - "pathe": "^1.0.0", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2", - "unplugin": "^1.1.0" - }, - "engines": { - "node": ">= 14.16" - }, - "peerDependencies": { - "petite-vue-i18n": "*", - "vue-i18n": "*", - "vue-i18n-bridge": "*" - }, - "peerDependenciesMeta": { - "petite-vue-i18n": { - "optional": true - }, - "vue-i18n": { - "optional": true - }, - "vue-i18n-bridge": { - "optional": true - } - } - }, - "node_modules/@intlify/unplugin-vue-i18n/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, - "node_modules/@intlify/utils": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@intlify/utils/-/utils-0.12.0.tgz", - "integrity": "sha512-yCBNcuZQ49iInqmWC2xfW0rgEQyNtCM8C8KcWKTXxyscgUE1+48gjLgZZqP75MjhlApxwph7ZMWLqyABkSgxQA==", - "dev": true, - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@isaacs/fs-minipass/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@kurkle/color": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", - "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==" - }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz", - "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==", - "dependencies": { - "consola": "^3.2.3", - "detect-libc": "^2.0.0", - "https-proxy-agent": "^7.0.5", - "node-fetch": "^2.6.7", - "nopt": "^8.0.0", - "semver": "^7.5.3", - "tar": "^7.4.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/minizlib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", - "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/tar": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", - "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "engines": { - "node": ">=18" - } - }, - "node_modules/@mdi/font": { - "version": "7.4.47", - "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz", - "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==" - }, - "node_modules/@miyaneee/rollup-plugin-json5": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@miyaneee/rollup-plugin-json5/-/rollup-plugin-json5-1.2.0.tgz", - "integrity": "sha512-JjTIaXZp9WzhUHpElrqPnl1AzBi/rvRs065F71+aTmlqvTMVkdbjZ8vfFl4nRlgJy+TPBw69ZK4pwFdmOAt4aA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "json5": "^2.2.3" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" - } - }, - "node_modules/@mswjs/interceptors": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.28.4.tgz", - "integrity": "sha512-xQpXZswUUG+V+7bD/L2hZUC5mvxW1BPba2yI5yhRq+IpEXFPEGYzUuJUuvJBELyG7RLCxgrOjmqzeE5hgqa0aQ==", - "dependencies": { - "@open-draft/deferred-promise": "^2.2.0", - "@open-draft/logger": "^0.3.0", - "@open-draft/until": "^2.0.0", - "is-node-process": "^1.2.0", - "outvariant": "^1.2.1", - "strict-event-emitter": "^0.5.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@netlify/functions": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-2.8.2.tgz", - "integrity": "sha512-DeoAQh8LuNPvBE4qsKlezjKj0PyXDryOFJfJKo3Z1qZLKzQ21sT314KQKPVjfvw6knqijj+IO+0kHXy/TJiqNA==", - "dependencies": { - "@netlify/serverless-functions-api": "1.26.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@netlify/node-cookies": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@netlify/node-cookies/-/node-cookies-0.1.0.tgz", - "integrity": "sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==", - "engines": { - "node": "^14.16.0 || >=16.0.0" - } - }, - "node_modules/@netlify/serverless-functions-api": { - "version": "1.26.1", - "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.26.1.tgz", - "integrity": "sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw==", - "dependencies": { - "@netlify/node-cookies": "^0.1.0", - "urlpattern-polyfill": "8.0.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nuxt/cli": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/@nuxt/cli/-/cli-3.22.2.tgz", - "integrity": "sha512-Xtu3Loe3fVLvOE1/NC/SrE6Buu7Aj6qrnu3hewAfamUyZ7mVUBOsJ5ScUhofSK2L6muGPvS3R1PisuJMFbdexg==", - "dependencies": { - "c12": "^2.0.2", - "chokidar": "^4.0.3", - "citty": "^0.1.6", - "clipboardy": "^4.0.0", - "consola": "^3.4.0", - "defu": "^6.1.4", - "fuse.js": "^7.1.0", - "giget": "^1.2.4", - "h3": "^1.15.0", - "httpxy": "^0.1.7", - "jiti": "^2.4.2", - "listhen": "^1.9.0", - "nypm": "^0.5.2", - "ofetch": "^1.4.1", - "ohash": "^2.0.2", - "pathe": "^2.0.3", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.3.1", - "scule": "^1.3.0", - "semver": "^7.7.1", - "std-env": "^3.8.0", - "tinyexec": "^0.3.2", - "ufo": "^1.5.4" - }, - "bin": { - "nuxi": "bin/nuxi.mjs", - "nuxi-ng": "bin/nuxi.mjs", - "nuxt": "bin/nuxi.mjs", - "nuxt-cli": "bin/nuxi.mjs" - }, - "engines": { - "node": "^16.10.0 || >=18.0.0" - } - }, - "node_modules/@nuxt/cli/node_modules/ohash": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.4.tgz", - "integrity": "sha512-ac+SFwzhdHb0hp48/dbR7Jta39qfbuj7t3hApd9uyHS8bisHTfVzSEvjOVgV0L3zG7VR2/7JjkSGimP75D+hOQ==" - }, - "node_modules/@nuxt/devalue": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz", - "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==" - }, - "node_modules/@nuxt/devtools": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-1.7.0.tgz", - "integrity": "sha512-uvnjt5Zowkz7tZmnks2cGreg1XZIiSyVzQ2MYiRXACodlXcwJ0dpUS3WTxu8BR562K+772oRdvKie9AQlyZUgg==", - "dependencies": { - "@antfu/utils": "^0.7.10", - "@nuxt/devtools-kit": "1.7.0", - "@nuxt/devtools-wizard": "1.7.0", - "@nuxt/kit": "^3.15.0", - "@vue/devtools-core": "7.6.8", - "@vue/devtools-kit": "7.6.8", - "birpc": "^0.2.19", - "consola": "^3.3.1", - "cronstrue": "^2.52.0", - "destr": "^2.0.3", - "error-stack-parser-es": "^0.1.5", - "execa": "^7.2.0", - "fast-npm-meta": "^0.2.2", - "flatted": "^3.3.2", - "get-port-please": "^3.1.2", - "hookable": "^5.5.3", - "image-meta": "^0.2.1", - "is-installed-globally": "^1.0.0", - "launch-editor": "^2.9.1", - "local-pkg": "^0.5.1", - "magicast": "^0.3.5", - "nypm": "^0.4.1", - "ohash": "^1.1.4", - "pathe": "^1.1.2", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.2.1", - "rc9": "^2.1.2", - "scule": "^1.3.0", - "semver": "^7.6.3", - "simple-git": "^3.27.0", - "sirv": "^3.0.0", - "tinyglobby": "^0.2.10", - "unimport": "^3.14.5", - "vite-plugin-inspect": "~0.8.9", - "vite-plugin-vue-inspector": "^5.3.1", - "which": "^3.0.1", - "ws": "^8.18.0" - }, - "bin": { - "devtools": "cli.mjs" - }, - "peerDependencies": { - "vite": "*" - } - }, - "node_modules/@nuxt/devtools-kit": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.7.0.tgz", - "integrity": "sha512-+NgZ2uP5BuneqvQbe7EdOEaFEDy8762c99pLABtn7/Ur0ExEsQJMP7pYjjoTfKubhBqecr5Vo9yHkPBj1eHulQ==", - "dependencies": { - "@nuxt/kit": "^3.15.0", - "@nuxt/schema": "^3.15.0", - "execa": "^7.2.0" - }, - "peerDependencies": { - "vite": "*" - } - }, - "node_modules/@nuxt/devtools-ui-kit": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@nuxt/devtools-ui-kit/-/devtools-ui-kit-1.7.0.tgz", - "integrity": "sha512-pYjwCP3FHz/rrEoJpb8plMinnPHRh+fFc90O+MncMC0aIGydtu4SGwAE3fZsg//JXqkvlY+JyozxqtF9IRA7rA==", - "dependencies": { - "@iconify-json/carbon": "^1.2.5", - "@iconify-json/logos": "^1.2.4", - "@iconify-json/ri": "^1.2.5", - "@iconify-json/tabler": "^1.2.13", - "@nuxt/devtools-kit": "1.7.0", - "@nuxt/kit": "^3.15.0", - "@unocss/core": "^0.65.3", - "@unocss/nuxt": "^0.65.3", - "@unocss/preset-attributify": "^0.65.3", - "@unocss/preset-icons": "^0.65.3", - "@unocss/preset-mini": "^0.65.3", - "@unocss/reset": "^0.65.3", - "@vueuse/core": "^12.2.0", - "@vueuse/integrations": "^12.2.0", - "@vueuse/nuxt": "^12.2.0", - "defu": "^6.1.4", - "focus-trap": "^7.6.2", - "splitpanes": "^3.1.5", - "unocss": "^0.65.3", - "v-lazy-show": "^0.3.0" - }, - "peerDependencies": { - "@nuxt/devtools": "1.7.0" - } - }, - "node_modules/@nuxt/devtools-wizard": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-1.7.0.tgz", - "integrity": "sha512-86Gd92uEw0Dh2ErIYT9TMIrMOISE96fCRN4rxeryTvyiowQOsyrbkCeMNYrEehoRL+lohoyK6iDmFajadPNwWQ==", - "dependencies": { - "consola": "^3.3.1", - "diff": "^7.0.0", - "execa": "^7.2.0", - "global-directory": "^4.0.1", - "magicast": "^0.3.5", - "pathe": "^1.1.2", - "pkg-types": "^1.2.1", - "prompts": "^2.4.2", - "rc9": "^2.1.2", - "semver": "^7.6.3" - }, - "bin": { - "devtools-wizard": "cli.mjs" - } - }, - "node_modules/@nuxt/devtools-wizard/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/@nuxt/devtools/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" - }, - "node_modules/@nuxt/devtools/node_modules/nypm": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.4.1.tgz", - "integrity": "sha512-1b9mihliBh8UCcKtcGRu//G50iHpjxIQVUqkdhPT/SDVE7KdJKoHXLS0heuYTQCx95dFqiyUbXZB9r8ikn+93g==", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.2.3", - "pathe": "^1.1.2", - "pkg-types": "^1.2.1", - "tinyexec": "^0.3.1", - "ufo": "^1.5.4" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": "^14.16.0 || >=16.10.0" - } - }, - "node_modules/@nuxt/devtools/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/@nuxt/devtools/node_modules/sirv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", - "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@nuxt/devtools/node_modules/strip-literal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", - "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@nuxt/devtools/node_modules/unimport": { - "version": "3.14.6", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.6.tgz", - "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", - "dependencies": { - "@rollup/pluginutils": "^5.1.4", - "acorn": "^8.14.0", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "fast-glob": "^3.3.3", - "local-pkg": "^1.0.0", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "pathe": "^2.0.1", - "picomatch": "^4.0.2", - "pkg-types": "^1.3.0", - "scule": "^1.3.0", - "strip-literal": "^2.1.1", - "unplugin": "^1.16.1" - } - }, - "node_modules/@nuxt/devtools/node_modules/unimport/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@nuxt/devtools/node_modules/unimport/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" - }, - "node_modules/@nuxt/devtools/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nuxt/kit": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.15.4.tgz", - "integrity": "sha512-dr7I7eZOoRLl4uxdxeL2dQsH0OrbEiVPIyBHnBpA4co24CBnoJoF+JINuP9l3PAM3IhUzc5JIVq3/YY3lEc3Hw==", - "dependencies": { - "c12": "^2.0.1", - "consola": "^3.4.0", - "defu": "^6.1.4", - "destr": "^2.0.3", - "globby": "^14.0.2", - "ignore": "^7.0.3", - "jiti": "^2.4.2", - "klona": "^2.0.6", - "knitwork": "^1.2.0", - "mlly": "^1.7.4", - "ohash": "^1.1.4", - "pathe": "^2.0.2", - "pkg-types": "^1.3.1", - "scule": "^1.3.0", - "semver": "^7.6.3", - "std-env": "^3.8.0", - "ufo": "^1.5.4", - "unctx": "^2.4.1", - "unimport": "^4.0.0", - "untyped": "^1.5.2" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@nuxt/schema": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.15.4.tgz", - "integrity": "sha512-pAYZb/3ocSC/db1EFd5y+otmgHqUkvfxfhd9EknDB5DygnJuOIQNuGJ7LMJM6S2c0DYgBIHOdEelLxKHOjwbgQ==", - "dependencies": { - "consola": "^3.4.0", - "defu": "^6.1.4", - "pathe": "^2.0.2", - "std-env": "^3.8.0" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/@nuxt/telemetry": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.6.5.tgz", - "integrity": "sha512-lwMp9OHML/m0mjh7P5iz9PxINnk5smGkGebh88Wh8PjvnRooY1TBsbyq7mlSrNibpwD1BkwqhV5IAZOXWHLxMQ==", - "dependencies": { - "@nuxt/kit": "^3.15.4", - "citty": "^0.1.6", - "consola": "^3.4.0", - "destr": "^2.0.3", - "dotenv": "^16.4.7", - "git-url-parse": "^16.0.0", - "is-docker": "^3.0.0", - "ofetch": "^1.4.1", - "package-manager-detector": "^0.2.9", - "parse-git-config": "^3.0.0", - "pathe": "^2.0.2", - "rc9": "^2.1.2", - "std-env": "^3.8.0" - }, - "bin": { - "nuxt-telemetry": "bin/nuxt-telemetry.mjs" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@nuxt/vite-builder": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.15.4.tgz", - "integrity": "sha512-yBK6tWT973+ExKC3ciTWymZpjJ+enToOtYz574kXCyGO0PbSnuXdoJKTvrwXw1lK97PajCKxExlmwI/3oLOmMQ==", - "dependencies": { - "@nuxt/kit": "3.15.4", - "@rollup/plugin-replace": "^6.0.2", - "@vitejs/plugin-vue": "^5.2.1", - "@vitejs/plugin-vue-jsx": "^4.1.1", - "autoprefixer": "^10.4.20", - "consola": "^3.4.0", - "cssnano": "^7.0.6", - "defu": "^6.1.4", - "esbuild": "^0.24.2", - "escape-string-regexp": "^5.0.0", - "externality": "^1.0.2", - "get-port-please": "^3.1.2", - "h3": "^1.14.0", - "jiti": "^2.4.2", - "knitwork": "^1.2.0", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "ohash": "^1.1.4", - "pathe": "^2.0.2", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.3.1", - "postcss": "^8.5.1", - "rollup-plugin-visualizer": "^5.13.1", - "std-env": "^3.8.0", - "ufo": "^1.5.4", - "unenv": "^1.10.0", - "unplugin": "^2.1.2", - "vite": "^6.0.11", - "vite-node": "^3.0.4", - "vite-plugin-checker": "^0.8.0", - "vue-bundle-renderer": "^2.1.1" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0.0" - }, - "peerDependencies": { - "vue": "^3.3.4" - } - }, - "node_modules/@nuxt/vite-builder/node_modules/unplugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.2.0.tgz", - "integrity": "sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@nuxtjs/i18n": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.6.tgz", - "integrity": "sha512-L+g+LygKNoaS/AXExk7tzS9wSNn9QdP1T9VdTjjEGYftpeFgv2U8AQsY0dQAhgPIbXXhIAkNYxTk4YcINj9CfA==", - "dev": true, - "dependencies": { - "@intlify/h3": "^0.5.0", - "@intlify/shared": "^9.14.1", - "@intlify/unplugin-vue-i18n": "^3.0.1", - "@intlify/utils": "^0.12.0", - "@miyaneee/rollup-plugin-json5": "^1.2.0", - "@nuxt/kit": "^3.13.1", - "@rollup/plugin-yaml": "^4.1.2", - "@vue/compiler-sfc": "^3.5.4", - "debug": "^4.3.5", - "defu": "^6.1.2", - "estree-walker": "^3.0.3", - "is-https": "^4.0.0", - "knitwork": "^1.1.0", - "magic-string": "^0.30.10", - "mlly": "^1.7.1", - "pathe": "^1.1.1", - "scule": "^1.1.1", - "sucrase": "^3.35.0", - "ufo": "^1.3.1", - "unplugin": "^1.10.1", - "vue-i18n": "^9.14.1", - "vue-router": "^4.4.4" - }, - "engines": { - "node": "^14.16.0 || >=16.11.0" - } - }, - "node_modules/@nuxtjs/i18n/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, - "node_modules/@nuxtjs/robots": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nuxtjs/robots/-/robots-3.0.0.tgz", - "integrity": "sha512-qsHGW1KXBvV5Kq7u3huPnFCUTbHS4Fk8Za2mNPgmUXcwLgp3exvhPtdZfIdjrCF/aZk3A8OZONNmGghs6CecBA==", - "dependencies": { - "@nuxt/kit": "^3.0.0", - "h3": "^1.0.1" - } - }, - "node_modules/@nuxtjs/sitemap": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@nuxtjs/sitemap/-/sitemap-5.3.5.tgz", - "integrity": "sha512-TfhEImgVHEZaI/vphZdoCaWM2TRBJqprHZPhIQwWYJz+dpQWkfY6z8UpjhmUh6npvbj5kNY9ncLenkw0cDJp9g==", - "dependencies": { - "@nuxt/devtools-kit": "^1.3.9", - "@nuxt/kit": "^3.12.3", - "chalk": "^5.3.0", - "defu": "^6.1.4", - "h3-compression": "^0.3.2", - "nuxt-site-config": "^2.2.15", - "nuxt-site-config-kit": "^2.2.15", - "ofetch": "^1.3.4", - "pathe": "^1.1.2", - "pkg-types": "^1.1.3", - "radix3": "^1.1.2", - "semver": "^7.6.2", - "sirv": "^2.0.4", - "site-config-stack": "^2.2.15", - "ufo": "^1.5.3" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@nuxtjs/sitemap/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/@open-draft/deferred-promise": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", - "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==" - }, - "node_modules/@open-draft/logger": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", - "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", - "dependencies": { - "is-node-process": "^1.2.0", - "outvariant": "^1.4.0" - } - }, - "node_modules/@open-draft/until": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", - "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==" - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "hasInstallScript": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-wasm": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.1.tgz", - "integrity": "sha512-RJxlQQLkaMMIuWRozy+z2vEqbaQlCuaCgVZIUCzQLYggY22LZbP5Y1+ia+FD724Ids9e+XIyOLXLrLgQSHIthw==", - "bundleDependencies": [ - "napi-wasm" - ], - "dependencies": { - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "napi-wasm": "^1.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { - "version": "1.1.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@pinia-plugin-persistedstate/nuxt": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@pinia-plugin-persistedstate/nuxt/-/nuxt-1.2.1.tgz", - "integrity": "sha512-q8s+4aQW/AjBMyeqLL48/qzBR5lcgnvvf1525ovNuKf6Wl9CsoLjPKh/5X8vNoKGwSow4gP7lVmdYPQRypgjgg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@nuxt/kit": "^3.12.2", - "defu": "^6.1.4", - "pinia-plugin-persistedstate": ">=3.2.1" - }, - "peerDependencies": { - "@pinia/nuxt": "^0.5.0" - } - }, - "node_modules/@pinia/nuxt": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@pinia/nuxt/-/nuxt-0.5.5.tgz", - "integrity": "sha512-wjxS7YqIesh4OLK+qE3ZjhdOJ5pYZQ+VlEmZNtTwzQn1Kavei/khovx7mzXVXNA/mvSPXVhb9xBzhyS3XMURtw==", - "dependencies": { - "@nuxt/kit": "^3.9.0", - "pinia": "^2.2.3" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==" - }, - "node_modules/@redocly/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js-replace": "^1.0.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@redocly/config": { - "version": "0.20.3", - "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.20.3.tgz", - "integrity": "sha512-Nyyv1Bj7GgYwj/l46O0nkH1GTKWbO3Ixe7KFcn021aZipkZd+z8Vlu1BwkhqtVgivcKaClaExtWU/lDHkjBzag==" - }, - "node_modules/@redocly/openapi-core": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.30.0.tgz", - "integrity": "sha512-ZZc+FXKoQXJ9cOR7qRKHxOfKOsGCj2wSodklKdtM2FofzyjzvIwn1rksD5+9iJxvHuORPOPv3ppAHcM+iMr/Ag==", - "dependencies": { - "@redocly/ajv": "^8.11.2", - "@redocly/config": "^0.20.1", - "colorette": "^1.2.0", - "https-proxy-agent": "^7.0.5", - "js-levenshtein": "^1.1.6", - "js-yaml": "^4.1.0", - "minimatch": "^5.0.1", - "pluralize": "^8.0.0", - "yaml-ast-parser": "0.0.43" - }, - "engines": { - "node": ">=18.17.0", - "npm": ">=9.5.0" - } - }, - "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@redocly/openapi-core/node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "node_modules/@redocly/openapi-core/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rollup/plugin-alias": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz", - "integrity": "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==", - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz", - "integrity": "sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "fdir": "^6.2.0", - "is-reference": "1.2.1", - "magic-string": "^0.30.3", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=16.0.0 || 14 >= 14.17" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/@rollup/plugin-inject": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", - "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-inject/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", - "dependencies": { - "@rollup/pluginutils": "^5.1.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", - "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz", - "integrity": "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "magic-string": "^0.30.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-terser": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", - "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", - "dependencies": { - "serialize-javascript": "^6.0.1", - "smob": "^1.0.0", - "terser": "^5.17.4" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-yaml": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-yaml/-/plugin-yaml-4.1.2.tgz", - "integrity": "sha512-RpupciIeZMUqhgFE97ba0s98mOFS7CWzN3EJNhJkqSv9XLlWYtwVdtE6cDw6ASOF/sZVFS7kRJXftaqM2Vakdw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "js-yaml": "^4.1.0", - "tosource": "^2.0.0-alpha.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", - "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", - "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", - "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", - "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", - "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", - "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", - "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", - "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", - "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", - "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", - "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", - "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", - "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", - "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", - "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", - "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", - "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", - "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", - "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "peer": true - }, - "node_modules/@types/node": { - "version": "22.13.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz", - "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/parse-path": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", - "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==" - }, - "node_modules/@types/qs": { - "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" - }, - "node_modules/@unhead/dom": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.11.19.tgz", - "integrity": "sha512-udkgITdIblEWH3hsoFQMKW+6QXNO2qFZlZ2FI37bVAplQSnK/PytTPt/5oA1GWkoVwT0DsQNGHbU6kOg/3SlNg==", - "dependencies": { - "@unhead/schema": "1.11.19", - "@unhead/shared": "1.11.19" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@unhead/schema": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.11.19.tgz", - "integrity": "sha512-7VhYHWK7xHgljdv+C01MepCSYZO2v6OhgsfKWPxRQBDDGfUKCUaChox0XMq3tFvXP6u4zSp6yzcDw2yxCfVMwg==", - "dependencies": { - "hookable": "^5.5.3", - "zhead": "^2.2.4" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@unhead/shared": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.11.19.tgz", - "integrity": "sha512-UYE9EIeQLJOhx8vC71bWGkAGY4Zzq/H8qYlihowUg4NiFOfL+KKMnj96datb74PRxSDvHac9V3OLktNcsX2NuA==", - "dependencies": { - "@unhead/schema": "1.11.19", - "packrup": "^0.1.2" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@unhead/ssr": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.11.19.tgz", - "integrity": "sha512-OH+rj6xBTdYyLsSntk4lEQyR+z57aEUZIiR2UpPl1zWGtBZPIr5zs3GY5+EyJ8t8e0zLemPR/Pu7VembTJ8o1w==", - "dependencies": { - "@unhead/schema": "1.11.19", - "@unhead/shared": "1.11.19" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/@unhead/vue": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.11.19.tgz", - "integrity": "sha512-/XATTP8wVLs3+2Pkj2crvr/Z55nybVQyOwISh+sAlr/48/9n3jGNiCZHKpHgL4MpOnGT4krwzWzbfhBO/G2BSQ==", - "dependencies": { - "@unhead/schema": "1.11.19", - "@unhead/shared": "1.11.19", - "hookable": "^5.5.3", - "unhead": "1.11.19" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - }, - "peerDependencies": { - "vue": ">=2.7 || >=3" - } - }, - "node_modules/@unocss/astro": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/astro/-/astro-0.65.4.tgz", - "integrity": "sha512-ex1CJOQ6yeftBEPcbA9/W47/YoV+mhQnrAoc8MA1VVrvvFKDitICFU62+nSt3NWRe53XL/fXnQbcbCb8AAgKlA==", - "dependencies": { - "@unocss/core": "0.65.4", - "@unocss/reset": "0.65.4", - "@unocss/vite": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/@unocss/cli": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/cli/-/cli-0.65.4.tgz", - "integrity": "sha512-D/4hY5Hezh3QETscl4i+ojb+q8YU9Cl9AYJ8v3gsjc/GjTmEuIOD5V4x+/aN25vY5wjqgoApOgaIDGCV3b+2Ig==", - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@rollup/pluginutils": "^5.1.4", - "@unocss/config": "0.65.4", - "@unocss/core": "0.65.4", - "@unocss/preset-uno": "0.65.4", - "cac": "^6.7.14", - "chokidar": "^3.6.0", - "colorette": "^2.0.20", - "consola": "^3.3.1", - "magic-string": "^0.30.17", - "pathe": "^1.1.2", - "perfect-debounce": "^1.0.0", - "tinyglobby": "^0.2.10" - }, - "bin": { - "unocss": "bin/unocss.mjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/cli/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@unocss/cli/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/@unocss/cli/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@unocss/cli/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@unocss/config": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/config/-/config-0.65.4.tgz", - "integrity": "sha512-/vCt4AXnJ4p4Ow6xqsYwdrelF9533yhZjzkg3SQmL3rKeSkicPayKpeq8nkYECdhDI03VTCVD+6oh5Y/26Hg7A==", - "dependencies": { - "@unocss/core": "0.65.4", - "unconfig": "~0.6.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/core": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/core/-/core-0.65.4.tgz", - "integrity": "sha512-a2JOoFutrhqd5RgPhIR5FIXrDoHDU3gwCbPrpT6KYTjsqlSc/fv02yZ+JGOZFN3MCFhCmaPTs+idDFtwb3xU8g==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/extractor-arbitrary-variants": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/extractor-arbitrary-variants/-/extractor-arbitrary-variants-0.65.4.tgz", - "integrity": "sha512-GbvTgsDaHplfWfsQtOY8RrvEZvptmvR9k9NwQ5NsZBNIG1JepYVel93CVQvsxT5KioKcoWngXxTYLNOGyxLs0g==", - "dependencies": { - "@unocss/core": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/inspector": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/inspector/-/inspector-0.65.4.tgz", - "integrity": "sha512-byg9x549Ul17U4Ety7ufDwC0UOygypoq4QnLEPzhlZ0KJG1f7WmXKYanOhupeg3h4qCj6Nc/xdZYMGbHl9QRIg==", - "dependencies": { - "@unocss/core": "0.65.4", - "@unocss/rule-utils": "0.65.4", - "colorette": "^2.0.20", - "gzip-size": "^6.0.0", - "sirv": "^3.0.0", - "vue-flow-layout": "^0.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/inspector/node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@unocss/inspector/node_modules/sirv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", - "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@unocss/nuxt": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/nuxt/-/nuxt-0.65.4.tgz", - "integrity": "sha512-dEJdqgvrukgZJk1szxRW6MiIozUZDLeFyyxmnO+iW3loPlji9hu95j2KBVHaQWIzi39XqVSORi4lH5flvAz3Pg==", - "dependencies": { - "@nuxt/kit": "^3.15.0", - "@unocss/config": "0.65.4", - "@unocss/core": "0.65.4", - "@unocss/preset-attributify": "0.65.4", - "@unocss/preset-icons": "0.65.4", - "@unocss/preset-tagify": "0.65.4", - "@unocss/preset-typography": "0.65.4", - "@unocss/preset-uno": "0.65.4", - "@unocss/preset-web-fonts": "0.65.4", - "@unocss/preset-wind": "0.65.4", - "@unocss/reset": "0.65.4", - "@unocss/vite": "0.65.4", - "@unocss/webpack": "0.65.4", - "unocss": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/postcss": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/postcss/-/postcss-0.65.4.tgz", - "integrity": "sha512-8peDRo0+rNQsnKh/H2uZEVy67sV2cC16rAeSLpgbVJUMNfZlmF0rC2DNGsOV17uconUXSwz7+mGcHKNiv+8YlQ==", - "dependencies": { - "@unocss/config": "0.65.4", - "@unocss/core": "0.65.4", - "@unocss/rule-utils": "0.65.4", - "css-tree": "^3.1.0", - "postcss": "^8.4.49", - "tinyglobby": "^0.2.10" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/@unocss/postcss/node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/@unocss/postcss/node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==" - }, - "node_modules/@unocss/preset-attributify": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/preset-attributify/-/preset-attributify-0.65.4.tgz", - "integrity": "sha512-zxE9hJJ5b37phjdzDdZsxX559ZlmH9rFlY5LVEcQySTnsfY0znviHxPbD2iRpCBCRd+YC5HfFd2jb3XlnTKMJQ==", - "dependencies": { - "@unocss/core": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-icons": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/preset-icons/-/preset-icons-0.65.4.tgz", - "integrity": "sha512-5sSzTN72X2Ag3VH48xY1pYudeWnql9jqdMiwgZuLJcmvETBNGelXy2wGxm7tsUUEx/l40Yr04Ck8XRPGT9jLBw==", - "dependencies": { - "@iconify/utils": "^2.2.1", - "@unocss/core": "0.65.4", - "ofetch": "^1.4.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-mini": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/preset-mini/-/preset-mini-0.65.4.tgz", - "integrity": "sha512-dcO2PzSl87qN1KdQWcfZDIKEhpdFeImWbYfiXtE7k6pi1393FJkdHEopgI/1ZciIQN1CkTvQJ5c7EpEVWftYRA==", - "dependencies": { - "@unocss/core": "0.65.4", - "@unocss/extractor-arbitrary-variants": "0.65.4", - "@unocss/rule-utils": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-tagify": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/preset-tagify/-/preset-tagify-0.65.4.tgz", - "integrity": "sha512-qll6koqdFEkvmz594vKnxj9+3nfM3ugkJxYHrTkqtwx7DAnTgtM8fInFFGZelvjwUzR3o3+Zw6uMhFkLTVTfvg==", - "dependencies": { - "@unocss/core": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-typography": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/preset-typography/-/preset-typography-0.65.4.tgz", - "integrity": "sha512-Dl940ATrviWD9Vh+4fcN0QZXb6wA7al+c7QkdVAzW7I+NtdN2ELvLcN0cY22KnLRpwztzmg52Qp2J/1QnqrLTw==", - "dependencies": { - "@unocss/core": "0.65.4", - "@unocss/preset-mini": "0.65.4" - } - }, - "node_modules/@unocss/preset-uno": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/preset-uno/-/preset-uno-0.65.4.tgz", - "integrity": "sha512-56bdBtf476i+soQCQmT36uGzcF2z+7DGCnG1hwWiw6XAbL6gmRMQsubwi1c8z8TcTQNBsOFUnOziFil0gbWufw==", - "dependencies": { - "@unocss/core": "0.65.4", - "@unocss/preset-mini": "0.65.4", - "@unocss/preset-wind": "0.65.4", - "@unocss/rule-utils": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-web-fonts": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/preset-web-fonts/-/preset-web-fonts-0.65.4.tgz", - "integrity": "sha512-UB/MvXHUTqMNVH1bbiKZ/ZtZUI5tsYlTYAvBrnXPO1Cztuwr8hJKSi4RCfI9g+YYtKHX4uYuxUbW5bcN85gmBQ==", - "dependencies": { - "@unocss/core": "0.65.4", - "ofetch": "^1.4.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-wind": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/preset-wind/-/preset-wind-0.65.4.tgz", - "integrity": "sha512-0rbNbw5E8Lvh2yf4R1Mq+lxI/wL5Tm6+r+crE0uAAhCPe9kxPHW4k+x1cWKDIwq6Vudlm3cNX85N49wN5tYgdA==", - "dependencies": { - "@unocss/core": "0.65.4", - "@unocss/preset-mini": "0.65.4", - "@unocss/rule-utils": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/reset": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/reset/-/reset-0.65.4.tgz", - "integrity": "sha512-m685H0KFvVMz6R2i5GDIFv4RS9Z7y2G8hJK7xg2OWli+7w8l2ZMihYvXKofPsst4q/ms8EgKXpWc/qqUOTucvA==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/rule-utils": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/rule-utils/-/rule-utils-0.65.4.tgz", - "integrity": "sha512-+EzdJEWcqGcO6HwbBTe7vEdBRpuKkBiz4MycQeLD6GEio04T45y6VHHO7/WTqxltbO4YwwW9/s2TKRMxKtoG8g==", - "dependencies": { - "@unocss/core": "^0.65.4", - "magic-string": "^0.30.17" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/transformer-attributify-jsx": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.65.4.tgz", - "integrity": "sha512-n438EzWdTKlLCOlAUSpFjmH6FflctqzIReMzMZSJDkmkorymc+C5GpjN3Nty2cKRJXIl6Vwq0oxPuB59RT+FIw==", - "dependencies": { - "@unocss/core": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/transformer-compile-class": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/transformer-compile-class/-/transformer-compile-class-0.65.4.tgz", - "integrity": "sha512-n1yHDC/iIbcj/9fBUTXkSoASKfLBuRoCN7P1a0ecPc8Gu+uOGfoxafOhrlqC+tpD3hlQGoL+0h74BHSKh+L23Q==", - "dependencies": { - "@unocss/core": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/transformer-directives": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/transformer-directives/-/transformer-directives-0.65.4.tgz", - "integrity": "sha512-zkoDEwzPkgXi6ohW7P11gbArwfTRMZ9knYSUYoPEltQz+UZYzeRQ85exiAmdz5MsbCAuhQEr577Kd/CWfhjEuA==", - "dependencies": { - "@unocss/core": "0.65.4", - "@unocss/rule-utils": "0.65.4", - "css-tree": "^3.1.0" - } - }, - "node_modules/@unocss/transformer-directives/node_modules/css-tree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", - "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", - "dependencies": { - "mdn-data": "2.12.2", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/@unocss/transformer-directives/node_modules/mdn-data": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", - "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==" - }, - "node_modules/@unocss/transformer-variant-group": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/transformer-variant-group/-/transformer-variant-group-0.65.4.tgz", - "integrity": "sha512-ggO6xMGeOeoD5GHS2xXBJrYFuzqyiZ25tM0zHAMJn9QU9GIu1NwWvcXluvLCF/MRIygBJGPpAE98aEICI6ifEA==", - "dependencies": { - "@unocss/core": "0.65.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/vite": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/vite/-/vite-0.65.4.tgz", - "integrity": "sha512-02pRcVLfb5UUxMJwudnjS/0ZQdSlskjuXVHdpZpLBZCA8hhoru2uEOsPbUOBRNNMjDj6ld00pmgk/+im07M35Q==", - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@rollup/pluginutils": "^5.1.4", - "@unocss/config": "0.65.4", - "@unocss/core": "0.65.4", - "@unocss/inspector": "0.65.4", - "chokidar": "^3.6.0", - "magic-string": "^0.30.17", - "tinyglobby": "^0.2.10" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" - } - }, - "node_modules/@unocss/vite/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@unocss/vite/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@unocss/vite/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@unocss/webpack": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/@unocss/webpack/-/webpack-0.65.4.tgz", - "integrity": "sha512-cnd0qnJdSxYlQ+zuF0Qad3xZk2X0/p70XLzlA4TaBZuKa2OPJOyulfJwJSqcrSc4PXYOd9B/B8nXJk8WQ1yBHQ==", - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@rollup/pluginutils": "^5.1.4", - "@unocss/config": "0.65.4", - "@unocss/core": "0.65.4", - "chokidar": "^3.6.0", - "magic-string": "^0.30.17", - "tinyglobby": "^0.2.10", - "unplugin": "^2.1.0", - "webpack-sources": "^3.2.3" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "webpack": "^4 || ^5" - } - }, - "node_modules/@unocss/webpack/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/@unocss/webpack/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@unocss/webpack/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/@unocss/webpack/node_modules/unplugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.2.0.tgz", - "integrity": "sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@vercel/nft": { - "version": "0.27.10", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.27.10.tgz", - "integrity": "sha512-zbaF9Wp/NsZtKLE4uVmL3FyfFwlpDyuymQM1kPbeT0mVOHKDQQNjnnfslB3REg3oZprmNFJuh3pkHBk2qAaizg==", - "dependencies": { - "@mapbox/node-pre-gyp": "^2.0.0-rc.0", - "@rollup/pluginutils": "^5.1.3", - "acorn": "^8.6.0", - "acorn-import-attributes": "^1.9.5", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "node-gyp-build": "^4.2.2", - "picomatch": "^4.0.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@vercel/nft/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", - "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vitejs/plugin-vue-jsx": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.1.1.tgz", - "integrity": "sha512-uMJqv/7u1zz/9NbWAD3XdjaY20tKTf17XVfQ9zq4wY1BjsB/PjpJPMe2xiG39QpP4ZdhYNhm4Hvo66uJrykNLA==", - "dependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-transform-typescript": "^7.25.9", - "@vue/babel-plugin-jsx": "^1.2.5" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.0.0" - } - }, - "node_modules/@vue-macros/common": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.16.1.tgz", - "integrity": "sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==", - "dependencies": { - "@vue/compiler-sfc": "^3.5.13", - "ast-kit": "^1.4.0", - "local-pkg": "^1.0.0", - "magic-string-ast": "^0.7.0", - "pathe": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=16.14.0" - }, - "peerDependencies": { - "vue": "^2.7.0 || ^3.2.25" - }, - "peerDependenciesMeta": { - "vue": { - "optional": true - } - } - }, - "node_modules/@vue-macros/common/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vue/babel-helper-vue-transform-on": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz", - "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==" - }, - "node_modules/@vue/babel-plugin-jsx": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz", - "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.6", - "@babel/types": "^7.25.6", - "@vue/babel-helper-vue-transform-on": "1.2.5", - "@vue/babel-plugin-resolve-type": "1.2.5", - "html-tags": "^3.3.1", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - } - } - }, - "node_modules/@vue/babel-plugin-resolve-type": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz", - "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/parser": "^7.25.6", - "@vue/compiler-sfc": "^3.5.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-core/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", - "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" - }, - "node_modules/@vue/devtools-core": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.6.8.tgz", - "integrity": "sha512-8X4roysTwzQ94o7IobjVcOd1aZF5iunikrMrHPI2uUdigZCi2kFTQc7ffYiFiTNaLElCpjOhCnM7bo7aK1yU7A==", - "dependencies": { - "@vue/devtools-kit": "^7.6.8", - "@vue/devtools-shared": "^7.6.8", - "mitt": "^3.0.1", - "nanoid": "^5.0.9", - "pathe": "^1.1.2", - "vite-hot-client": "^0.2.4" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/@vue/devtools-core/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/@vue/devtools-kit": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.6.8.tgz", - "integrity": "sha512-JhJ8M3sPU+v0P2iZBF2DkdmR9L0dnT5RXJabJqX6o8KtFs3tebdvfoXV2Dm3BFuqeECuMJIfF1aCzSt+WQ4wrw==", - "dependencies": { - "@vue/devtools-shared": "^7.6.8", - "birpc": "^0.2.19", - "hookable": "^5.5.3", - "mitt": "^3.0.1", - "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1", - "superjson": "^2.2.1" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz", - "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==", - "dependencies": { - "rfdc": "^1.4.1" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", - "dependencies": { - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/runtime-core": "3.5.13", - "@vue/shared": "3.5.13", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", - "dependencies": { - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "vue": "3.5.13" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" - }, - "node_modules/@vuetify/loader-shared": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.1.0.tgz", - "integrity": "sha512-dNE6Ceym9ijFsmJKB7YGW0cxs7xbYV8+1LjU6jd4P14xOt/ji4Igtgzt0rJFbxu+ZhAzqz853lhB0z8V9Dy9cQ==", - "devOptional": true, - "dependencies": { - "upath": "^2.0.1" - }, - "peerDependencies": { - "vue": "^3.0.0", - "vuetify": "^3.0.0" - } - }, - "node_modules/@vueuse/core": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.7.0.tgz", - "integrity": "sha512-jtK5B7YjZXmkGNHjviyGO4s3ZtEhbzSgrbX+s5o+Lr8i2nYqNyHuPVOeTdM1/hZ5Tkxg/KktAuAVDDiHMraMVA==", - "dependencies": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "12.7.0", - "@vueuse/shared": "12.7.0", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/integrations": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.7.0.tgz", - "integrity": "sha512-IEq7K4bCl7mn3uKJaWtNXnd1CAPaHLUMuyj5K1/k/pVcItt0VONZW8xiGxdIovJcQjkzOHjImhX5t6gija+0/g==", - "dependencies": { - "@vueuse/core": "12.7.0", - "@vueuse/shared": "12.7.0", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "async-validator": "^4", - "axios": "^1", - "change-case": "^5", - "drauu": "^0.4", - "focus-trap": "^7", - "fuse.js": "^7", - "idb-keyval": "^6", - "jwt-decode": "^4", - "nprogress": "^0.2", - "qrcode": "^1.5", - "sortablejs": "^1", - "universal-cookie": "^7" - }, - "peerDependenciesMeta": { - "async-validator": { - "optional": true - }, - "axios": { - "optional": true - }, - "change-case": { - "optional": true - }, - "drauu": { - "optional": true - }, - "focus-trap": { - "optional": true - }, - "fuse.js": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "jwt-decode": { - "optional": true - }, - "nprogress": { - "optional": true - }, - "qrcode": { - "optional": true - }, - "sortablejs": { - "optional": true - }, - "universal-cookie": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.7.0.tgz", - "integrity": "sha512-4VvTH9mrjXqFN5LYa5YfqHVRI6j7R00Vy4995Rw7PQxyCL3z0Lli86iN4UemWqixxEvYfRjG+hF9wL8oLOn+3g==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/nuxt": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/@vueuse/nuxt/-/nuxt-12.7.0.tgz", - "integrity": "sha512-JG1yjJifcIZkFr+X1VmfNsdNZyHia/wXcpUHqVI2gwax5+bgmUlybqh9nStNGbX9NLUuPvPNNq043es5DlSJKg==", - "dependencies": { - "@nuxt/kit": "^3.15.4", - "@vueuse/core": "12.7.0", - "@vueuse/metadata": "12.7.0", - "local-pkg": "^1.0.0", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "nuxt": "^3.0.0" - } - }, - "node_modules/@vueuse/nuxt/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.7.0.tgz", - "integrity": "sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==", - "dependencies": { - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "peer": true - }, - "node_modules/abbrev": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz", - "integrity": "sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/ace-builds": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.39.0.tgz", - "integrity": "sha512-MqoZojv4gpc5QyTMor/dS6kmruDV9db9LVZbCiT4qYz6WsDiv4qyG5f7ZPc+wjUl6oLMqgCAsBjo1whdSVyMlQ==" - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/archiver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", - "dependencies": { - "archiver-utils": "^5.0.2", - "async": "^3.2.4", - "buffer-crc32": "^1.0.0", - "readable-stream": "^4.0.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^6.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/archiver-utils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", - "dependencies": { - "glob": "^10.0.0", - "graceful-fs": "^4.2.0", - "is-stream": "^2.0.1", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/archiver-utils/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/archiver-utils/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/archiver-utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/archiver-utils/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/ast-kit": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.4.0.tgz", - "integrity": "sha512-BlGeOw73FDsX7z0eZE/wuuafxYoek2yzNJ6l6A1nsb4+z/p87TOPbHaWuN53kFKNuUXiCQa2M+xLF71IqQmRSw==", - "dependencies": { - "@babel/parser": "^7.26.5", - "pathe": "^2.0.2" - }, - "engines": { - "node": ">=16.14.0" - } - }, - "node_modules/ast-walker-scope": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz", - "integrity": "sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==", - "dependencies": { - "@babel/parser": "^7.25.3", - "ast-kit": "^1.0.1" - }, - "engines": { - "node": ">=16.14.0" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" - }, - "node_modules/async-sema": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", - "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/b4a": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/bare-events": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", - "optional": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bintrees": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" - }, - "node_modules/birpc": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", - "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bundle-require": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", - "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", - "dependencies": { - "load-tsconfig": "^0.2.3" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "esbuild": ">=0.18" - } - }, - "node_modules/c12": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.4.tgz", - "integrity": "sha512-3DbbhnFt0fKJHxU4tEUPmD1ahWE4PWPMomqfYsTJdrhpmEnRKJi3qSC4rO5U6E6zN1+pjBY7+z8fUmNRMaVKLw==", - "dependencies": { - "chokidar": "^4.0.3", - "confbox": "^0.1.8", - "defu": "^6.1.4", - "dotenv": "^16.4.7", - "giget": "^1.2.4", - "jiti": "^2.4.2", - "mlly": "^1.7.4", - "ohash": "^2.0.4", - "pathe": "^2.0.3", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.3.1", - "rc9": "^2.1.2" - }, - "peerDependencies": { - "magicast": "^0.3.5" - }, - "peerDependenciesMeta": { - "magicast": { - "optional": true - } - } - }, - "node_modules/c12/node_modules/ohash": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.4.tgz", - "integrity": "sha512-ac+SFwzhdHb0hp48/dbR7Jta39qfbuj7t3hApd9uyHS8bisHTfVzSEvjOVgV0L3zG7VR2/7JjkSGimP75D+hOQ==" - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001700", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", - "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/change-case": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==" - }, - "node_modules/chart.js": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.8.tgz", - "integrity": "sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==", - "dependencies": { - "@kurkle/color": "^0.3.0" - }, - "engines": { - "pnpm": ">=8" - } - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dependencies": { - "consola": "^3.2.3" - } - }, - "node_modules/clipboardy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", - "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", - "dependencies": { - "execa": "^8.0.1", - "is-wsl": "^3.1.0", - "is64bit": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/clipboardy/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboardy/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/clipboardy/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combine-errors": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/combine-errors/-/combine-errors-3.0.3.tgz", - "integrity": "sha512-C8ikRNRMygCwaTx+Ek3Yr+OuZzgZjduCOfSQBjbM8V3MfgcjSTeto/GXP6PAwKvJz/v15b7GHZvx5rOlczFw/Q==", - "dependencies": { - "custom-error-instance": "2.1.1", - "lodash.uniqby": "4.5.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compatx": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.1.8.tgz", - "integrity": "sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==" - }, - "node_modules/compress-commons": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", - "dependencies": { - "crc-32": "^1.2.0", - "crc32-stream": "^6.0.0", - "is-stream": "^2.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/compress-commons/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" - }, - "node_modules/consola": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.0.tgz", - "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie-es": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", - "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==" - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/croner": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/croner/-/croner-9.0.0.tgz", - "integrity": "sha512-onMB0OkDjkXunhdW9htFjEhqrD54+M94i6ackoUkjHKbRnXdyEyKRelp4nJ1kAz32+s27jP1FsebpJCVl0BsvA==", - "engines": { - "node": ">=18.0" - } - }, - "node_modules/cronstrue": { - "version": "2.55.0", - "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-2.55.0.tgz", - "integrity": "sha512-ZsBZNtQWb0Rk6CNGJlzpPBYqNE7t93Aez5ZCExLihGwmIpE5qThSTDQzDV8Z1Nw6ksmLkwI98nPKyciZ5sH7dw==", - "bin": { - "cronstrue": "bin/cli.js" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crossws": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.4.tgz", - "integrity": "sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==", - "dependencies": { - "uncrypto": "^0.1.3" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", - "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", - "dependencies": { - "cssnano-preset-default": "^7.0.6", - "lilconfig": "^3.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", - "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", - "dependencies": { - "browserslist": "^4.23.3", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^5.0.0", - "postcss-calc": "^10.0.2", - "postcss-colormin": "^7.0.2", - "postcss-convert-values": "^7.0.4", - "postcss-discard-comments": "^7.0.3", - "postcss-discard-duplicates": "^7.0.1", - "postcss-discard-empty": "^7.0.0", - "postcss-discard-overridden": "^7.0.0", - "postcss-merge-longhand": "^7.0.4", - "postcss-merge-rules": "^7.0.4", - "postcss-minify-font-values": "^7.0.0", - "postcss-minify-gradients": "^7.0.0", - "postcss-minify-params": "^7.0.2", - "postcss-minify-selectors": "^7.0.4", - "postcss-normalize-charset": "^7.0.0", - "postcss-normalize-display-values": "^7.0.0", - "postcss-normalize-positions": "^7.0.0", - "postcss-normalize-repeat-style": "^7.0.0", - "postcss-normalize-string": "^7.0.0", - "postcss-normalize-timing-functions": "^7.0.0", - "postcss-normalize-unicode": "^7.0.2", - "postcss-normalize-url": "^7.0.0", - "postcss-normalize-whitespace": "^7.0.0", - "postcss-ordered-values": "^7.0.1", - "postcss-reduce-initial": "^7.0.2", - "postcss-reduce-transforms": "^7.0.0", - "postcss-svgo": "^7.0.1", - "postcss-unique-selectors": "^7.0.3" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", - "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/custom-error-instance": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/custom-error-instance/-/custom-error-instance-2.1.1.tgz", - "integrity": "sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==" - }, - "node_modules/date-fns": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kossnocorp" - } - }, - "node_modules/db0": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/db0/-/db0-0.2.4.tgz", - "integrity": "sha512-hIzftLH1nMsF95zSLjDLYLbE9huOXnLYUTAQ5yKF5amp0FpeD+B15XJa8BvGYSOeSCH4gl2WahB/y1FcUByQSg==", - "peerDependencies": { - "@electric-sql/pglite": "*", - "@libsql/client": "*", - "better-sqlite3": "*", - "drizzle-orm": "*", - "mysql2": "*", - "sqlite3": "*" - }, - "peerDependenciesMeta": { - "@electric-sql/pglite": { - "optional": true - }, - "@libsql/client": { - "optional": true - }, - "better-sqlite3": { - "optional": true - }, - "drizzle-orm": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "sqlite3": { - "optional": true - } - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-pick-omit": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/deep-pick-omit/-/deep-pick-omit-1.2.1.tgz", - "integrity": "sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/denque": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", - "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/devalue": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==" - }, - "node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-prop": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz", - "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==", - "dependencies": { - "type-fest": "^4.18.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.103", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.103.tgz", - "integrity": "sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-stack-parser-es": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", - "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/errx": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/errx/-/errx-0.1.0.tgz", - "integrity": "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==" - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", - "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "peer": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/externality": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/externality/-/externality-1.0.2.tgz", - "integrity": "sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==", - "dependencies": { - "enhanced-resolve": "^5.14.1", - "mlly": "^1.3.0", - "pathe": "^1.1.1", - "ufo": "^1.1.2" - } - }, - "node_modules/externality/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-npm-meta": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.2.2.tgz", - "integrity": "sha512-E+fdxeaOQGo/CMWc9f4uHFfgUPJRAu7N3uB8GBvB3SDPAIWJK4GKyYhkAGFq+GYrcbKNfQIz5VVQyJnDuPPCrg==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "peer": true - }, - "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==" - }, - "node_modules/focus-trap": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz", - "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==", - "dependencies": { - "tabbable": "^6.2.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fuse.js": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", - "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port-please": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz", - "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==" - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/giget": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.5.tgz", - "integrity": "sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.6", - "nypm": "^0.5.4", - "pathe": "^2.0.3", - "tar": "^6.2.1" - }, - "bin": { - "giget": "dist/cli.mjs" - } - }, - "node_modules/git-config-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-2.0.0.tgz", - "integrity": "sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/git-up": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.0.1.tgz", - "integrity": "sha512-2XFu1uNZMSjkyetaF+8rqn6P0XqpMq/C+2ycjI6YwrIKcszZ5/WR4UubxjN0lILOKqLkLaHDaCr2B6fP1cke6g==", - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^9.2.0" - } - }, - "node_modules/git-url-parse": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.0.1.tgz", - "integrity": "sha512-mcD36GrhAzX5JVOsIO52qNpgRyFzYWRbU1VSRFCvJt1IJvqfvH427wWw/CFqkWvjVPtdG5VTx4MKUeC5GeFPDQ==", - "dependencies": { - "git-up": "^8.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "peer": true - }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dependencies": { - "ini": "4.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gzip-size": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", - "integrity": "sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/h3": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.1.tgz", - "integrity": "sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==", - "dependencies": { - "cookie-es": "^1.2.2", - "crossws": "^0.3.3", - "defu": "^6.1.4", - "destr": "^2.0.3", - "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.0", - "radix3": "^1.1.2", - "ufo": "^1.5.4", - "uncrypto": "^0.1.3" - } - }, - "node_modules/h3-compression": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/h3-compression/-/h3-compression-0.3.2.tgz", - "integrity": "sha512-B+yCKyDRnO0BXSfjAP4tCXJgJwmnKp3GyH5Yh66mY9KuOCrrGQSPk/gBFG2TgH7OyB/6mvqNZ1X0XNVuy0qRsw==", - "funding": { - "url": "https://github.com/sponsors/codedredd" - }, - "peerDependencies": { - "h3": "^1.6.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-shutdown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", - "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/http-status-codes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", - "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==" - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/httpxy": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.1.7.tgz", - "integrity": "sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==" - }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", - "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-meta": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.1.tgz", - "integrity": "sha512-K6acvFaelNxx8wc2VjbIzXKDVB0Khs0QT35U6NkGfTdCmjLNcO2945m7RFNR9/RPVFm48hq7QPzK8uGH18HCGw==" - }, - "node_modules/immutable": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", - "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", - "devOptional": true - }, - "node_modules/importx": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/importx/-/importx-0.5.2.tgz", - "integrity": "sha512-YEwlK86Ml5WiTxN/ECUYC5U7jd1CisAVw7ya4i9ZppBoHfFkT2+hChhr3PE2fYxUKLkNyivxEQpa5Ruil1LJBQ==", - "dependencies": { - "bundle-require": "^5.1.0", - "debug": "^4.4.0", - "esbuild": "^0.20.2 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", - "jiti": "^2.4.2", - "pathe": "^2.0.3", - "tsx": "^4.19.2" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/impound": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/impound/-/impound-0.2.0.tgz", - "integrity": "sha512-gXgeSyp9Hf7qG2/PLKmywHXyQf2xFrw+mJGpoj9DsAB9L7/MIKn+DeEx98UryWXdmbv8wUUPdcQof6qXnZoCGg==", - "dependencies": { - "@rollup/pluginutils": "^5.1.2", - "mlly": "^1.7.2", - "pathe": "^1.1.2", - "unenv": "^1.10.0", - "unplugin": "^1.14.1" - } - }, - "node_modules/impound/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/index-to-position": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz", - "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ioredis": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.5.0.tgz", - "integrity": "sha512-7CutT89g23FfSa8MDoIFs2GYYa0PaNiW/OrT+nRyjRXHDZd17HmIgy+reOQ/yhh72NznNjGuS8kbCAcA4Ro4mw==", - "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, - "node_modules/iron-webcrypto": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", - "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", - "funding": { - "url": "https://github.com/sponsors/brc-dd" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-https": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-https/-/is-https-4.0.0.tgz", - "integrity": "sha512-FeMLiqf8E5g6SdiVJsPcNZX8k4h2fBs1wp5Bb6uaNxn58ufK1axBqQZdmAQsqh0t9BuwFObybrdVJh6MKyPlyg==", - "dev": true - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-installed-globally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", - "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", - "dependencies": { - "global-directory": "^4.0.1", - "is-path-inside": "^4.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "node_modules/is-node-process": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", - "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==" - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-ssh": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", - "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is64bit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", - "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", - "dependencies": { - "system-architecture": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/jose": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", - "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" - }, - "node_modules/js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-eslint-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", - "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", - "dev": true, - "dependencies": { - "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jwt-decode": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", - "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", - "engines": { - "node": ">=18" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/knitwork": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.2.0.tgz", - "integrity": "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==" - }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==" - }, - "node_modules/launch-editor": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", - "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/listhen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", - "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", - "dependencies": { - "@parcel/watcher": "^2.4.1", - "@parcel/watcher-wasm": "^2.4.1", - "citty": "^0.1.6", - "clipboardy": "^4.0.0", - "consola": "^3.2.3", - "crossws": ">=0.2.0 <0.4.0", - "defu": "^6.1.4", - "get-port-please": "^3.1.2", - "h3": "^1.12.0", - "http-shutdown": "^1.2.2", - "jiti": "^2.1.2", - "mlly": "^1.7.1", - "node-forge": "^1.3.1", - "pathe": "^1.1.2", - "std-env": "^3.7.0", - "ufo": "^1.5.4", - "untun": "^0.1.3", - "uqr": "^0.1.2" - }, - "bin": { - "listen": "bin/listhen.mjs", - "listhen": "bin/listhen.mjs" - } - }, - "node_modules/listhen/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/load-tsconfig": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/local-pkg": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", - "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash._baseiteratee": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash._baseiteratee/-/lodash._baseiteratee-4.7.0.tgz", - "integrity": "sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ==", - "dependencies": { - "lodash._stringtopath": "~4.8.0" - } - }, - "node_modules/lodash._basetostring": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-4.12.0.tgz", - "integrity": "sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw==" - }, - "node_modules/lodash._baseuniq": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz", - "integrity": "sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A==", - "dependencies": { - "lodash._createset": "~4.0.0", - "lodash._root": "~3.0.0" - } - }, - "node_modules/lodash._createset": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/lodash._createset/-/lodash._createset-4.0.3.tgz", - "integrity": "sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA==" - }, - "node_modules/lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==" - }, - "node_modules/lodash._stringtopath": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/lodash._stringtopath/-/lodash._stringtopath-4.8.0.tgz", - "integrity": "sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ==", - "dependencies": { - "lodash._basetostring": "~4.12.0" - } - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/lodash.uniqby": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.5.0.tgz", - "integrity": "sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ==", - "dependencies": { - "lodash._baseiteratee": "~4.7.0", - "lodash._baseuniq": "~4.6.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/magic-string-ast": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.7.0.tgz", - "integrity": "sha512-686fgAHaJY7wLTFEq7nnKqeQrhqmXB19d1HnqT35Ci7BN6hbAYLZUezTQ062uUHM7ggZEQlqJ94Ftls+KDXU8Q==", - "dependencies": { - "magic-string": "^0.30.17" - }, - "engines": { - "node": ">=16.14.0" - } - }, - "node_modules/magicast": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", - "dependencies": { - "@babel/parser": "^7.25.4", - "@babel/types": "^7.25.4", - "source-map-js": "^1.2.0" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/merkle-json": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/merkle-json/-/merkle-json-2.7.0.tgz", - "integrity": "sha512-yzOZPrvIydATWQMk0lLxKjudKQV7Deu4hh/EJT7+q6c4aYs7J02WVGG5Mv6B5QbLJGy78h+u2nE5f8eUpDFGEg==", - "dependencies": { - "merkle-json": "^2.1.0" - }, - "engines": { - "node": ">=6.11.0" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.6.tgz", - "integrity": "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==", - "funding": [ - "https://github.com/sponsors/broofa" - ], - "bin": { - "mime": "bin/cli.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mlly": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", - "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", - "dependencies": { - "acorn": "^8.14.0", - "pathe": "^2.0.1", - "pkg-types": "^1.3.0", - "ufo": "^1.5.4" - } - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" - } - }, - "node_modules/moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.2.tgz", - "integrity": "sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, - "node_modules/nanotar": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nanotar/-/nanotar-0.2.0.tgz", - "integrity": "sha512-9ca1h0Xjvo9bEkE4UOxgAzLV0jHKe6LMaxo37ND2DAhhAtd0j8pR1Wxz+/goMrZO8AEZTWCmyaOsFI/W5AdpCQ==" - }, - "node_modules/nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dependencies": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "bin": { - "nearley-railroad": "bin/nearley-railroad.js", - "nearley-test": "bin/nearley-test.js", - "nearley-unparse": "bin/nearley-unparse.js", - "nearleyc": "bin/nearleyc.js" - }, - "funding": { - "type": "individual", - "url": "https://nearley.js.org/#give-to-nearley" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "peer": true - }, - "node_modules/nitropack": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.10.4.tgz", - "integrity": "sha512-sJiG/MIQlZCVSw2cQrFG1H6mLeSqHlYfFerRjLKz69vUfdu0EL2l0WdOxlQbzJr3mMv/l4cOlCCLzVRzjzzF/g==", - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.3.4", - "@netlify/functions": "^2.8.2", - "@rollup/plugin-alias": "^5.1.1", - "@rollup/plugin-commonjs": "^28.0.1", - "@rollup/plugin-inject": "^5.0.5", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.3.0", - "@rollup/plugin-replace": "^6.0.1", - "@rollup/plugin-terser": "^0.4.4", - "@rollup/pluginutils": "^5.1.3", - "@types/http-proxy": "^1.17.15", - "@vercel/nft": "^0.27.5", - "archiver": "^7.0.1", - "c12": "2.0.1", - "chokidar": "^3.6.0", - "citty": "^0.1.6", - "compatx": "^0.1.8", - "confbox": "^0.1.8", - "consola": "^3.2.3", - "cookie-es": "^1.2.2", - "croner": "^9.0.0", - "crossws": "^0.3.1", - "db0": "^0.2.1", - "defu": "^6.1.4", - "destr": "^2.0.3", - "dot-prop": "^9.0.0", - "esbuild": "^0.24.0", - "escape-string-regexp": "^5.0.0", - "etag": "^1.8.1", - "fs-extra": "^11.2.0", - "globby": "^14.0.2", - "gzip-size": "^7.0.0", - "h3": "^1.13.0", - "hookable": "^5.5.3", - "httpxy": "^0.1.5", - "ioredis": "^5.4.1", - "jiti": "^2.4.0", - "klona": "^2.0.6", - "knitwork": "^1.1.0", - "listhen": "^1.9.0", - "magic-string": "^0.30.12", - "magicast": "^0.3.5", - "mime": "^4.0.4", - "mlly": "^1.7.2", - "node-fetch-native": "^1.6.4", - "ofetch": "^1.4.1", - "ohash": "^1.1.4", - "openapi-typescript": "^7.4.2", - "pathe": "^1.1.2", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.2.1", - "pretty-bytes": "^6.1.1", - "radix3": "^1.1.2", - "rollup": "^4.24.3", - "rollup-plugin-visualizer": "^5.12.0", - "scule": "^1.3.0", - "semver": "^7.6.3", - "serve-placeholder": "^2.0.2", - "serve-static": "^1.16.2", - "std-env": "^3.7.0", - "ufo": "^1.5.4", - "uncrypto": "^0.1.3", - "unctx": "^2.3.1", - "unenv": "^1.10.0", - "unimport": "^3.13.1", - "unstorage": "^1.13.1", - "untyped": "^1.5.1", - "unwasm": "^0.3.9" - }, - "bin": { - "nitro": "dist/cli/index.mjs", - "nitropack": "dist/cli/index.mjs" - }, - "engines": { - "node": "^16.11.0 || >=17.0.0" - }, - "peerDependencies": { - "xml2js": "^0.6.2" - }, - "peerDependenciesMeta": { - "xml2js": { - "optional": true - } - } - }, - "node_modules/nitropack/node_modules/c12": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/c12/-/c12-2.0.1.tgz", - "integrity": "sha512-Z4JgsKXHG37C6PYUtIxCfLJZvo6FyhHJoClwwb9ftUkLpPSkuYqn6Tr+vnaN8hymm0kIbcg6Ey3kv/Q71k5w/A==", - "dependencies": { - "chokidar": "^4.0.1", - "confbox": "^0.1.7", - "defu": "^6.1.4", - "dotenv": "^16.4.5", - "giget": "^1.2.3", - "jiti": "^2.3.0", - "mlly": "^1.7.1", - "ohash": "^1.1.4", - "pathe": "^1.1.2", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.2.0", - "rc9": "^2.1.2" - }, - "peerDependencies": { - "magicast": "^0.3.5" - }, - "peerDependenciesMeta": { - "magicast": { - "optional": true - } - } - }, - "node_modules/nitropack/node_modules/c12/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/nitropack/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/nitropack/node_modules/chokidar/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/nitropack/node_modules/chokidar/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/nitropack/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" - }, - "node_modules/nitropack/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/nitropack/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/nitropack/node_modules/strip-literal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", - "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/nitropack/node_modules/unimport": { - "version": "3.14.6", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.6.tgz", - "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", - "dependencies": { - "@rollup/pluginutils": "^5.1.4", - "acorn": "^8.14.0", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "fast-glob": "^3.3.3", - "local-pkg": "^1.0.0", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "pathe": "^2.0.1", - "picomatch": "^4.0.2", - "pkg-types": "^1.3.0", - "scule": "^1.3.0", - "strip-literal": "^2.1.1", - "unplugin": "^1.16.1" - } - }, - "node_modules/nitropack/node_modules/unimport/node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-native": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", - "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==" - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-mock-http": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.0.tgz", - "integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==" - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" - }, - "node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nuxt": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.15.4.tgz", - "integrity": "sha512-hSbZO4mR0uAMJtZPNTnCfiAtgleoOu28gvJcBNU7KQHgWnNXPjlWgwMczko2O4Tmnv9zIe/CQged+2HsPwl2ZA==", - "dependencies": { - "@nuxt/cli": "^3.21.1", - "@nuxt/devalue": "^2.0.2", - "@nuxt/devtools": "^1.7.0", - "@nuxt/kit": "3.15.4", - "@nuxt/schema": "3.15.4", - "@nuxt/telemetry": "^2.6.4", - "@nuxt/vite-builder": "3.15.4", - "@unhead/dom": "^1.11.18", - "@unhead/shared": "^1.11.18", - "@unhead/ssr": "^1.11.18", - "@unhead/vue": "^1.11.18", - "@vue/shared": "^3.5.13", - "acorn": "8.14.0", - "c12": "^2.0.1", - "chokidar": "^4.0.3", - "compatx": "^0.1.8", - "consola": "^3.4.0", - "cookie-es": "^1.2.2", - "defu": "^6.1.4", - "destr": "^2.0.3", - "devalue": "^5.1.1", - "errx": "^0.1.0", - "esbuild": "^0.24.2", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "globby": "^14.0.2", - "h3": "^1.14.0", - "hookable": "^5.5.3", - "ignore": "^7.0.3", - "impound": "^0.2.0", - "jiti": "^2.4.2", - "klona": "^2.0.6", - "knitwork": "^1.2.0", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "nanotar": "^0.2.0", - "nitropack": "^2.10.4", - "nypm": "^0.5.2", - "ofetch": "^1.4.1", - "ohash": "^1.1.4", - "pathe": "^2.0.2", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.3.1", - "radix3": "^1.1.2", - "scule": "^1.3.0", - "semver": "^7.6.3", - "std-env": "^3.8.0", - "strip-literal": "^3.0.0", - "tinyglobby": "0.2.10", - "ufo": "^1.5.4", - "ultrahtml": "^1.5.3", - "uncrypto": "^0.1.3", - "unctx": "^2.4.1", - "unenv": "^1.10.0", - "unhead": "^1.11.18", - "unimport": "^4.0.0", - "unplugin": "^2.1.2", - "unplugin-vue-router": "^0.11.2", - "unstorage": "^1.14.4", - "untyped": "^1.5.2", - "vue": "^3.5.13", - "vue-bundle-renderer": "^2.1.1", - "vue-devtools-stub": "^0.1.0", - "vue-router": "^4.5.0" - }, - "bin": { - "nuxi": "bin/nuxt.mjs", - "nuxt": "bin/nuxt.mjs" - }, - "engines": { - "node": "^18.20.5 || ^20.9.0 || >=22.0.0" - }, - "peerDependencies": { - "@parcel/watcher": "^2.1.0", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "peerDependenciesMeta": { - "@parcel/watcher": { - "optional": true - }, - "@types/node": { - "optional": true - } - } - }, - "node_modules/nuxt-oidc-auth": { - "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/nuxt-oidc-auth/-/nuxt-oidc-auth-1.0.0-beta.5.tgz", - "integrity": "sha512-/bZ3yBfKmT40Kk66RZ9757SGMvqcZqLYRX6HK3l2o4N1dPvz1gW50t6cZ6UFJ63G7FWdHUuoRyo2INEpvbXe4g==", - "dependencies": { - "@nuxt/devtools-kit": "^1.7.0", - "@nuxt/devtools-ui-kit": "^1.7.0", - "consola": "^3.4.0", - "defu": "^6.1.4", - "h3": "^1.13.1", - "jose": "^5.9.6", - "ofetch": "^1.4.1", - "scule": "^1.3.0", - "sirv": "^3.0.0", - "ufo": "^1.5.4", - "uncrypto": "^0.1.3", - "undici": "^7.2.3", - "undio": "^0.2.0" - }, - "peerDependencies": { - "undici": "^7.2.1" - }, - "peerDependenciesMeta": { - "undici": { - "optional": true - } - } - }, - "node_modules/nuxt-oidc-auth/node_modules/sirv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", - "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/nuxt-site-config": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/nuxt-site-config/-/nuxt-site-config-2.2.21.tgz", - "integrity": "sha512-VsHpR4socGrlRPjyg2F8JqbirBqH4yCkTQa60fj7saqKMPW1VcRROn21OJzfTHDpjeD+KayRdR3FB0Jxk9WFNA==", - "dependencies": { - "@nuxt/devtools-kit": "^1.6.0", - "@nuxt/kit": "^3.13.2", - "@nuxt/schema": "^3.13.2", - "nuxt-site-config-kit": "2.2.21", - "pathe": "^1.1.2", - "pkg-types": "^1.2.1", - "sirv": "^3.0.0", - "site-config-stack": "2.2.21", - "ufo": "^1.5.4" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/nuxt-site-config-kit": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/nuxt-site-config-kit/-/nuxt-site-config-kit-2.2.21.tgz", - "integrity": "sha512-xO41Zf6bXlA9Zvj+fX7ftD+ITee4LfrkzHj85Gt4FpgwonFxzGO5pMBtAqIxXKJwuyT1z2wVAixHI+ov66wV0w==", - "dependencies": { - "@nuxt/kit": "^3.13.2", - "@nuxt/schema": "^3.13.2", - "pkg-types": "^1.2.1", - "site-config-stack": "2.2.21", - "std-env": "^3.7.0", - "ufo": "^1.5.4" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/nuxt-site-config/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/nuxt-site-config/node_modules/sirv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", - "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/nuxt/node_modules/unplugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.2.0.tgz", - "integrity": "sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/nypm": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.5.4.tgz", - "integrity": "sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.4.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "tinyexec": "^0.3.2", - "ufo": "^1.5.4" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": "^14.16.0 || >=16.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ofetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", - "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", - "dependencies": { - "destr": "^2.0.3", - "node-fetch-native": "^1.6.4", - "ufo": "^1.5.4" - } - }, - "node_modules/ohash": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.4.tgz", - "integrity": "sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/openapi-typescript": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.6.1.tgz", - "integrity": "sha512-F7RXEeo/heF3O9lOXo2bNjCOtfp7u+D6W3a3VNEH2xE6v+fxLtn5nq0uvUcA1F5aT+CMhNeC5Uqtg5tlXFX/ag==", - "dependencies": { - "@redocly/openapi-core": "^1.28.0", - "ansi-colors": "^4.1.3", - "change-case": "^5.4.4", - "parse-json": "^8.1.0", - "supports-color": "^9.4.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "openapi-typescript": "bin/cli.js" - }, - "peerDependencies": { - "typescript": "^5.x" - } - }, - "node_modules/outvariant": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", - "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==" - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" - }, - "node_modules/package-manager-detector": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.9.tgz", - "integrity": "sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==" - }, - "node_modules/packrup": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/packrup/-/packrup-0.1.2.tgz", - "integrity": "sha512-ZcKU7zrr5GlonoS9cxxrb5HVswGnyj6jQvwFBa6p5VFw7G71VAHcUKL5wyZSU/ECtPM/9gacWxy2KFQKt1gMNA==", - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/parse-git-config": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz", - "integrity": "sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==", - "dependencies": { - "git-config-path": "^2.0.0", - "ini": "^1.3.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/parse-git-config/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/parse-json": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-md": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse-md/-/parse-md-3.0.3.tgz", - "integrity": "sha512-2kpNrrW1GBgli5VT9X9/Y6n4PVsIFVdG49tguq1PHwzsRSK0Cu0yJPTUFOwWouFT85atYNWQ1T/rmqfj7kLd8g==", - "dependencies": { - "js-yaml": "^4.1.0" - } - }, - "node_modules/parse-path": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.1.tgz", - "integrity": "sha512-6ReLMptznuuOEzLoGEa+I1oWRSj2Zna5jLWC+l6zlfAI4dbbSaIES29ThzuPkbhNahT65dWzfoZEO6cfJw2Ksg==", - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", - "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", - "dependencies": { - "@types/parse-path": "^7.0.0", - "parse-path": "^7.0.0" - }, - "engines": { - "node": ">=14.13.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pinia": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", - "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", - "dependencies": { - "@vue/devtools-api": "^6.6.3", - "vue-demi": "^0.14.10" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "typescript": ">=4.4.4", - "vue": "^2.7.0 || ^3.5.11" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/pinia-plugin-persistedstate": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.2.0.tgz", - "integrity": "sha512-3buhA7ac+ssbOIx3VRCC8oHkoFwhDM9oHRCjo7nj+O8WUqnW+jRqh7eYT5eS/DNa3H28zp3dYf/nd/Vc8zj8eQ==", - "dev": true, - "dependencies": { - "@nuxt/kit": "^3.14.1592", - "deep-pick-omit": "^1.2.1", - "defu": "^6.1.4", - "destr": "^2.0.3" - }, - "peerDependencies": { - "@pinia/nuxt": ">=0.9.0", - "pinia": ">=2.3.0" - }, - "peerDependenciesMeta": { - "@pinia/nuxt": { - "optional": true - }, - "pinia": { - "optional": true - } - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", - "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", - "dependencies": { - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12 || ^20.9 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.38" - } - }, - "node_modules/postcss-colormin": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", - "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", - "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", - "dependencies": { - "browserslist": "^4.23.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-comments": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", - "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", - "dependencies": { - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", - "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", - "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", - "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", - "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^7.0.4" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", - "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^5.0.0", - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", - "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", - "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", - "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", - "dependencies": { - "browserslist": "^4.23.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", - "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", - "dependencies": { - "cssesc": "^3.0.0", - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", - "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", - "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", - "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", - "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", - "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", - "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", - "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", - "dependencies": { - "browserslist": "^4.23.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", - "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", - "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-ordered-values": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", - "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", - "dependencies": { - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", - "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", - "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", - "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.3.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", - "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", - "dependencies": { - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/pretty-bytes": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", - "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/prom-client": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", - "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", - "dependencies": { - "tdigest": "^0.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/protocols": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", - "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/radix3": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", - "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==" - }, - "node_modules/railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" - }, - "node_modules/randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dependencies": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc9": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", - "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", - "dependencies": { - "defu": "^6.1.4", - "destr": "^2.0.3" - } - }, - "node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" - }, - "node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/rollup": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", - "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.8", - "@rollup/rollup-android-arm64": "4.34.8", - "@rollup/rollup-darwin-arm64": "4.34.8", - "@rollup/rollup-darwin-x64": "4.34.8", - "@rollup/rollup-freebsd-arm64": "4.34.8", - "@rollup/rollup-freebsd-x64": "4.34.8", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", - "@rollup/rollup-linux-arm-musleabihf": "4.34.8", - "@rollup/rollup-linux-arm64-gnu": "4.34.8", - "@rollup/rollup-linux-arm64-musl": "4.34.8", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", - "@rollup/rollup-linux-riscv64-gnu": "4.34.8", - "@rollup/rollup-linux-s390x-gnu": "4.34.8", - "@rollup/rollup-linux-x64-gnu": "4.34.8", - "@rollup/rollup-linux-x64-musl": "4.34.8", - "@rollup/rollup-win32-arm64-msvc": "4.34.8", - "@rollup/rollup-win32-ia32-msvc": "4.34.8", - "@rollup/rollup-win32-x64-msvc": "4.34.8", - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-visualizer": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz", - "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", - "dependencies": { - "open": "^8.4.0", - "picomatch": "^4.0.2", - "source-map": "^0.7.4", - "yargs": "^17.5.1" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "rolldown": "1.x", - "rollup": "2.x || 3.x || 4.x" - }, - "peerDependenciesMeta": { - "rolldown": { - "optional": true - }, - "rollup": { - "optional": true - } - } - }, - "node_modules/rollup-plugin-visualizer/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sass": { - "version": "1.85.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz", - "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", - "devOptional": true, - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/scule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", - "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-placeholder": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz", - "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==", - "dependencies": { - "defu": "^6.1.4" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-git": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", - "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", - "dependencies": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.5" - }, - "funding": { - "type": "github", - "url": "https://github.com/steveukx/git-js?sponsor=1" - } - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/site-config-stack": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/site-config-stack/-/site-config-stack-2.2.21.tgz", - "integrity": "sha512-HRIgIgZAEK8XFYYepL/KtygJgmcUPdgxBJl0ueSrA12lNo2tk5aMkSuA2Oz/k6chnTbEwd6ESMYCs6opgYKNHw==", - "dependencies": { - "ufo": "^1.5.4" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - }, - "peerDependencies": { - "vue": "^3" - } - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smob": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", - "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/splitpanes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-3.1.8.tgz", - "integrity": "sha512-iYir0doakV9gYBfCuflGCxCD5Yhh09OGgT+epjfc6LZfTvGDdMXuD0Q4w6jI3hlkdRR1Ta3DlARcV3MOkybymg==", - "funding": { - "url": "https://github.com/sponsors/antoniandre" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/sql-formatter": { - "version": "15.4.11", - "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-15.4.11.tgz", - "integrity": "sha512-AfIjH0mYxv0NVzs4mbcGIAcos2Si20LeF9GMk0VmVA4A3gs1PFIixVu3rtcz34ls7ghPAjrDb+XbRly/aF6HAg==", - "dependencies": { - "argparse": "^2.0.1", - "get-stdin": "=8.0.0", - "nearley": "^2.20.1" - }, - "bin": { - "sql-formatter": "bin/sql-formatter-cli.cjs" - } - }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==" - }, - "node_modules/streamx": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", - "dependencies": { - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/strict-event-emitter": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", - "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", - "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==" - }, - "node_modules/stylehacks": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", - "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", - "dependencies": { - "browserslist": "^4.23.3", - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/superjson": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", - "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/system-architecture": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", - "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/tdigest": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", - "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", - "dependencies": { - "bintrees": "1.0.2" - } - }, - "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", - "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" - }, - "node_modules/tinyglobby": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", - "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", - "dependencies": { - "fdir": "^6.4.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tosource": { - "version": "2.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/tosource/-/tosource-2.0.0-alpha.3.tgz", - "integrity": "sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/tsx": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.3.tgz", - "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", - "dependencies": { - "esbuild": "~0.25.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", - "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", - "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", - "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/android-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", - "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", - "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/darwin-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", - "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", - "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", - "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", - "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", - "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", - "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-loong64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", - "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", - "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", - "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", - "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-s390x": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", - "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/linux-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", - "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", - "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", - "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", - "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", - "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/sunos-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", - "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-arm64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", - "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-ia32": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", - "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/@esbuild/win32-x64": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", - "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/tsx/node_modules/esbuild": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", - "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.0", - "@esbuild/android-arm": "0.25.0", - "@esbuild/android-arm64": "0.25.0", - "@esbuild/android-x64": "0.25.0", - "@esbuild/darwin-arm64": "0.25.0", - "@esbuild/darwin-x64": "0.25.0", - "@esbuild/freebsd-arm64": "0.25.0", - "@esbuild/freebsd-x64": "0.25.0", - "@esbuild/linux-arm": "0.25.0", - "@esbuild/linux-arm64": "0.25.0", - "@esbuild/linux-ia32": "0.25.0", - "@esbuild/linux-loong64": "0.25.0", - "@esbuild/linux-mips64el": "0.25.0", - "@esbuild/linux-ppc64": "0.25.0", - "@esbuild/linux-riscv64": "0.25.0", - "@esbuild/linux-s390x": "0.25.0", - "@esbuild/linux-x64": "0.25.0", - "@esbuild/netbsd-arm64": "0.25.0", - "@esbuild/netbsd-x64": "0.25.0", - "@esbuild/openbsd-arm64": "0.25.0", - "@esbuild/openbsd-x64": "0.25.0", - "@esbuild/sunos-x64": "0.25.0", - "@esbuild/win32-arm64": "0.25.0", - "@esbuild/win32-ia32": "0.25.0", - "@esbuild/win32-x64": "0.25.0" - } - }, - "node_modules/tus-js-client": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/tus-js-client/-/tus-js-client-4.3.1.tgz", - "integrity": "sha512-ZLeYmjrkaU1fUsKbIi8JML52uAocjEZtBx4DKjRrqzrZa0O4MYwT6db+oqePlspV+FxXJAyFBc/L5gwUi2OFsg==", - "dependencies": { - "buffer-from": "^1.1.2", - "combine-errors": "^3.0.3", - "is-stream": "^2.0.0", - "js-base64": "^3.7.2", - "lodash.throttle": "^4.1.1", - "proper-lockfile": "^4.1.2", - "url-parse": "^1.5.7" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/tus-js-client/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-fest": { - "version": "4.35.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.35.0.tgz", - "integrity": "sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ufo": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" - }, - "node_modules/ultrahtml": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz", - "integrity": "sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==" - }, - "node_modules/unconfig": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.6.1.tgz", - "integrity": "sha512-cVU+/sPloZqOyJEAfNwnQSFCzFrZm85vcVkryH7lnlB/PiTycUkAjt5Ds79cfIshGOZ+M5v3PBDnKgpmlE5DtA==", - "dependencies": { - "@antfu/utils": "^8.1.0", - "defu": "^6.1.4", - "importx": "^0.5.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/unconfig/node_modules/@antfu/utils": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", - "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/uncrypto": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" - }, - "node_modules/unctx": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.4.1.tgz", - "integrity": "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==", - "dependencies": { - "acorn": "^8.14.0", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17", - "unplugin": "^2.1.0" - } - }, - "node_modules/unctx/node_modules/unplugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.2.0.tgz", - "integrity": "sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/undici": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.3.0.tgz", - "integrity": "sha512-Qy96NND4Dou5jKoSJ2gm8ax8AJM/Ey9o9mz7KN1bb9GP+G0l20Zw8afxTnY2f4b7hmhn/z8aC2kfArVQlAhFBw==", - "engines": { - "node": ">=20.18.1" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" - }, - "node_modules/undio": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/undio/-/undio-0.2.0.tgz", - "integrity": "sha512-1LH824ipsUNqX1qsO6qpcusv0oGPlfFWVykwWq5jJB0Mq6x4kEHO/izSq2KLjGZvOosEd91+HXoxYUSoVI0zPg==" - }, - "node_modules/unenv": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-1.10.0.tgz", - "integrity": "sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==", - "dependencies": { - "consola": "^3.2.3", - "defu": "^6.1.4", - "mime": "^3.0.0", - "node-fetch-native": "^1.6.4", - "pathe": "^1.1.2" - } - }, - "node_modules/unenv/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/unenv/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/unhead": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.11.19.tgz", - "integrity": "sha512-O5AYb3+xUOzBlwDmPfC/DgGp9rDMoGkB4gFkhoaz8IonQqP8W8qqetxYf5ZyEdntvXnFsMWS8lZF//5176xo6Q==", - "dependencies": { - "@unhead/dom": "1.11.19", - "@unhead/schema": "1.11.19", - "@unhead/shared": "1.11.19", - "hookable": "^5.5.3" - }, - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unimport": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.1.2.tgz", - "integrity": "sha512-oVUL7PSlyVV3QRhsdcyYEMaDX8HJyS/CnUonEJTYA3//bWO+o/4gG8F7auGWWWkrrxBQBYOO8DKe+C53ktpRXw==", - "dependencies": { - "acorn": "^8.14.0", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "local-pkg": "^1.0.0", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "pkg-types": "^1.3.1", - "scule": "^1.3.0", - "strip-literal": "^3.0.0", - "tinyglobby": "^0.2.11", - "unplugin": "^2.2.0", - "unplugin-utils": "^0.2.4" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/unimport/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/unimport/node_modules/tinyglobby": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", - "dependencies": { - "fdir": "^6.4.3", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/unimport/node_modules/unplugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.2.0.tgz", - "integrity": "sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unocss": { - "version": "0.65.4", - "resolved": "https://registry.npmjs.org/unocss/-/unocss-0.65.4.tgz", - "integrity": "sha512-KUCW5OzI20Ik6j1zXkkrpWhxZ59TwSKl6+DvmYHEzMfaEcrHlBZaFSApAoSt2CYSvo6SluGiKyr+Im1UTkd4KA==", - "dependencies": { - "@unocss/astro": "0.65.4", - "@unocss/cli": "0.65.4", - "@unocss/core": "0.65.4", - "@unocss/postcss": "0.65.4", - "@unocss/preset-attributify": "0.65.4", - "@unocss/preset-icons": "0.65.4", - "@unocss/preset-mini": "0.65.4", - "@unocss/preset-tagify": "0.65.4", - "@unocss/preset-typography": "0.65.4", - "@unocss/preset-uno": "0.65.4", - "@unocss/preset-web-fonts": "0.65.4", - "@unocss/preset-wind": "0.65.4", - "@unocss/transformer-attributify-jsx": "0.65.4", - "@unocss/transformer-compile-class": "0.65.4", - "@unocss/transformer-directives": "0.65.4", - "@unocss/transformer-variant-group": "0.65.4", - "@unocss/vite": "0.65.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@unocss/webpack": "0.65.4", - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" - }, - "peerDependenciesMeta": { - "@unocss/webpack": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/unplugin-utils": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.4.tgz", - "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==", - "dependencies": { - "pathe": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://github.com/sponsors/sxzz" - } - }, - "node_modules/unplugin-vue-router": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.11.2.tgz", - "integrity": "sha512-X8BbQ3BNnMqaCYeMj80jtz5jC4AB0jcpdmECIYey9qKm6jy/upaPZ/WzfuT+iTGRiQAY4WemHueXxuzH127oOg==", - "dependencies": { - "@babel/types": "^7.26.5", - "@rollup/pluginutils": "^5.1.4", - "@vue-macros/common": "^1.16.1", - "ast-walker-scope": "^0.6.2", - "chokidar": "^3.6.0", - "fast-glob": "^3.3.3", - "json5": "^2.2.3", - "local-pkg": "^1.0.0", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "pathe": "^2.0.2", - "scule": "^1.3.0", - "unplugin": "2.1.2", - "yaml": "^2.7.0" - }, - "peerDependencies": { - "vue-router": "^4.4.0" - }, - "peerDependenciesMeta": { - "vue-router": { - "optional": true - } - } - }, - "node_modules/unplugin-vue-router/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/unplugin-vue-router/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/unplugin-vue-router/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/unplugin-vue-router/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/unplugin-vue-router/node_modules/unplugin": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.1.2.tgz", - "integrity": "sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw==", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/unstorage": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.15.0.tgz", - "integrity": "sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==", - "dependencies": { - "anymatch": "^3.1.3", - "chokidar": "^4.0.3", - "destr": "^2.0.3", - "h3": "^1.15.0", - "lru-cache": "^10.4.3", - "node-fetch-native": "^1.6.6", - "ofetch": "^1.4.1", - "ufo": "^1.5.4" - }, - "peerDependencies": { - "@azure/app-configuration": "^1.8.0", - "@azure/cosmos": "^4.2.0", - "@azure/data-tables": "^13.3.0", - "@azure/identity": "^4.6.0", - "@azure/keyvault-secrets": "^4.9.0", - "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3", - "@deno/kv": ">=0.9.0", - "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", - "@planetscale/database": "^1.19.0", - "@upstash/redis": "^1.34.3", - "@vercel/blob": ">=0.27.1", - "@vercel/kv": "^1.0.1", - "aws4fetch": "^1.0.20", - "db0": ">=0.2.1", - "idb-keyval": "^6.2.1", - "ioredis": "^5.4.2", - "uploadthing": "^7.4.4" - }, - "peerDependenciesMeta": { - "@azure/app-configuration": { - "optional": true - }, - "@azure/cosmos": { - "optional": true - }, - "@azure/data-tables": { - "optional": true - }, - "@azure/identity": { - "optional": true - }, - "@azure/keyvault-secrets": { - "optional": true - }, - "@azure/storage-blob": { - "optional": true - }, - "@capacitor/preferences": { - "optional": true - }, - "@deno/kv": { - "optional": true - }, - "@netlify/blobs": { - "optional": true - }, - "@planetscale/database": { - "optional": true - }, - "@upstash/redis": { - "optional": true - }, - "@vercel/blob": { - "optional": true - }, - "@vercel/kv": { - "optional": true - }, - "aws4fetch": { - "optional": true - }, - "db0": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "uploadthing": { - "optional": true - } - } - }, - "node_modules/unstorage/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "node_modules/untun": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", - "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", - "dependencies": { - "citty": "^0.1.5", - "consola": "^3.2.3", - "pathe": "^1.1.1" - }, - "bin": { - "untun": "bin/untun.mjs" - } - }, - "node_modules/untun/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/untyped": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.5.2.tgz", - "integrity": "sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==", - "dependencies": { - "@babel/core": "^7.26.0", - "@babel/standalone": "^7.26.4", - "@babel/types": "^7.26.3", - "citty": "^0.1.6", - "defu": "^6.1.4", - "jiti": "^2.4.1", - "knitwork": "^1.2.0", - "scule": "^1.3.0" - }, - "bin": { - "untyped": "dist/cli.mjs" - } - }, - "node_modules/unwasm": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/unwasm/-/unwasm-0.3.9.tgz", - "integrity": "sha512-LDxTx/2DkFURUd+BU1vUsF/moj0JsoTvl+2tcg2AUOiEzVturhGGx17/IMgGvKUYdZwr33EJHtChCJuhu9Ouvg==", - "dependencies": { - "knitwork": "^1.0.0", - "magic-string": "^0.30.8", - "mlly": "^1.6.1", - "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "unplugin": "^1.10.0" - } - }, - "node_modules/unwasm/node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "devOptional": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uqr": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", - "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==" - }, - "node_modules/uri-js-replace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", - "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==" - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/urlpattern-polyfill": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", - "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/v-lazy-show": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/v-lazy-show/-/v-lazy-show-0.3.0.tgz", - "integrity": "sha512-xpVALnvzB+RoDkI/5gqzVC2bL/Mh0Mw5/cPpSWJTTS6K4yDwFE2hZr5OsgFS74c6IHV6/k0jzSkAFXJttnhufg==", - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/compiler-core": "^3.5" - } - }, - "node_modules/vite": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.1.tgz", - "integrity": "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==", - "dependencies": { - "esbuild": "^0.24.2", - "postcss": "^8.5.2", - "rollup": "^4.30.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite-hot-client": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.4.tgz", - "integrity": "sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==", - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0" - } - }, - "node_modules/vite-node": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.7.tgz", - "integrity": "sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.0", - "es-module-lexer": "^1.6.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite-plugin-checker": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.8.0.tgz", - "integrity": "sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "ansi-escapes": "^4.3.0", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "commander": "^8.0.0", - "fast-glob": "^3.2.7", - "fs-extra": "^11.1.0", - "npm-run-path": "^4.0.1", - "strip-ansi": "^6.0.0", - "tiny-invariant": "^1.1.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "@biomejs/biome": ">=1.7", - "eslint": ">=7", - "meow": "^9.0.0", - "optionator": "^0.9.1", - "stylelint": ">=13", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": "~2.1.6" - }, - "peerDependenciesMeta": { - "@biomejs/biome": { - "optional": true - }, - "eslint": { - "optional": true - }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { - "optional": true - } - } - }, - "node_modules/vite-plugin-checker/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/vite-plugin-checker/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/vite-plugin-checker/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-checker/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vite-plugin-checker/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/vite-plugin-checker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-inspect": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.9.tgz", - "integrity": "sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==", - "dependencies": { - "@antfu/utils": "^0.7.10", - "@rollup/pluginutils": "^5.1.3", - "debug": "^4.3.7", - "error-stack-parser-es": "^0.1.5", - "fs-extra": "^11.2.0", - "open": "^10.1.0", - "perfect-debounce": "^1.0.0", - "picocolors": "^1.1.1", - "sirv": "^3.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1" - }, - "peerDependenciesMeta": { - "@nuxt/kit": { - "optional": true - } - } - }, - "node_modules/vite-plugin-inspect/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vite-plugin-inspect/node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/vite-plugin-inspect/node_modules/sirv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", - "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/vite-plugin-vue-inspector": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.3.1.tgz", - "integrity": "sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==", - "dependencies": { - "@babel/core": "^7.23.0", - "@babel/plugin-proposal-decorators": "^7.23.0", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-transform-typescript": "^7.22.15", - "@vue/babel-plugin-jsx": "^1.1.5", - "@vue/compiler-dom": "^3.3.4", - "kolorist": "^1.8.0", - "magic-string": "^0.30.4" - }, - "peerDependencies": { - "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0" - } - }, - "node_modules/vite-plugin-vuetify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vite-plugin-vuetify/-/vite-plugin-vuetify-2.1.0.tgz", - "integrity": "sha512-4wEAQtZaigPpwbFcZbrKpYwutOsWwWdeXn22B9XHzDPQNxVsKT+K9lKcXZnI5JESO1Iaql48S9rOk8RZZEt+Mw==", - "devOptional": true, - "dependencies": { - "@vuetify/loader-shared": "^2.1.0", - "debug": "^4.3.3", - "upath": "^2.0.1" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": ">=5", - "vue": "^3.0.0", - "vuetify": "^3.0.0" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" - } - }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dependencies": { - "vscode-languageserver-protocol": "3.16.0" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==" - }, - "node_modules/vue": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-sfc": "3.5.13", - "@vue/runtime-dom": "3.5.13", - "@vue/server-renderer": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-axios": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/vue-axios/-/vue-axios-3.5.2.tgz", - "integrity": "sha512-GP+dct7UlAWkl1qoP3ppw0z6jcSua5/IrMpjB5O8bh089iIiJ+hdxPYH2NPEpajlYgkW5EVMP95ttXWdas1O0g==", - "peerDependencies": { - "axios": "*", - "vue": "^3.0.0 || ^2.0.0" - } - }, - "node_modules/vue-bundle-renderer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vue-bundle-renderer/-/vue-bundle-renderer-2.1.1.tgz", - "integrity": "sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g==", - "dependencies": { - "ufo": "^1.5.4" - } - }, - "node_modules/vue-chartjs": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-5.3.2.tgz", - "integrity": "sha512-NrkbRRoYshbXbWqJkTN6InoDVwVb90C0R7eAVgMWcB9dPikbruaOoTFjFYHE/+tNPdIe6qdLCDjfjPHQ0fw4jw==", - "peerDependencies": { - "chart.js": "^4.1.1", - "vue": "^3.0.0-0 || ^2.7.0" - } - }, - "node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/vue-devtools-stub": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz", - "integrity": "sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==" - }, - "node_modules/vue-flow-layout": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/vue-flow-layout/-/vue-flow-layout-0.1.1.tgz", - "integrity": "sha512-JdgRRUVrN0Y2GosA0M68DEbKlXMqJ7FQgsK8CjQD2vxvNSqAU6PZEpi4cfcTVtfM2GVOMjHo7GKKLbXxOBqDqA==", - "peerDependencies": { - "vue": "^3.4.37" - } - }, - "node_modules/vue-i18n": { - "version": "9.14.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.2.tgz", - "integrity": "sha512-JK9Pm80OqssGJU2Y6F7DcM8RFHqVG4WkuCqOZTVsXkEzZME7ABejAUqUdA931zEBedc4thBgSUWxeQh4uocJAQ==", - "dev": true, - "dependencies": { - "@intlify/core-base": "9.14.2", - "@intlify/shared": "9.14.2", - "@vue/devtools-api": "^6.5.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/vue-meta": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/vue-meta/-/vue-meta-2.4.0.tgz", - "integrity": "sha512-XEeZUmlVeODclAjCNpWDnjgw+t3WA6gdzs6ENoIAgwO1J1d5p1tezDhtteLUFwcaQaTtayRrsx7GL6oXp/m2Jw==", - "dependencies": { - "deepmerge": "^4.2.2" - } - }, - "node_modules/vue-router": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", - "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", - "dependencies": { - "@vue/devtools-api": "^6.6.4" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/vue-toast-notification": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vue-toast-notification/-/vue-toast-notification-3.1.3.tgz", - "integrity": "sha512-XNyWqwLIGBFfX5G9sK+clq3N3IPlhDjzNdbZaXkEElcotPlWs0wWZailk1vqhdtLYT/93Y4FHAVuzyatLmPZRA==", - "engines": { - "node": ">=12.15.0" - }, - "peerDependencies": { - "vue": "^3.0" - } - }, - "node_modules/vue3-ace-editor": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/vue3-ace-editor/-/vue3-ace-editor-2.2.4.tgz", - "integrity": "sha512-FZkEyfpbH068BwjhMyNROxfEI8135Sc+x8ouxkMdCNkuj/Tuw83VP/gStFQqZHqljyX9/VfMTCdTqtOnJZGN8g==", - "dependencies": { - "resize-observer-polyfill": "^1.5.1" - }, - "peerDependencies": { - "ace-builds": "*", - "vue": "^3" - } - }, - "node_modules/vuetify": { - "version": "3.7.13", - "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.7.13.tgz", - "integrity": "sha512-4+RuQU+zLtXhlN2eZUpKXums9ftzUzhMeiNEJvvJY4XdOzVwUCth2dTnEZkSF6EKdLHk3WhtRk0cIWXZxpBvcw==", - "engines": { - "node": "^12.20 || >=14.13" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/johnleider" - }, - "peerDependencies": { - "typescript": ">=4.7", - "vite-plugin-vuetify": ">=1.0.0", - "vue": "^3.3.0", - "webpack-plugin-vuetify": ">=2.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vite-plugin-vuetify": { - "optional": true - }, - "webpack-plugin-vuetify": { - "optional": true - } - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yaml-ast-parser": { - "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - }, - "node_modules/yaml-eslint-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", - "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.0.0", - "lodash": "^4.17.21", - "yaml": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/zhead": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz", - "integrity": "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==", - "funding": { - "url": "https://github.com/sponsors/harlan-zw" - } - }, - "node_modules/zip-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", - "dependencies": { - "archiver-utils": "^5.0.0", - "compress-commons": "^6.0.2", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - } - } -} diff --git a/docker-compose.yml b/docker-compose.yml index 5f7f2cf605ea9d27ae0af32845ed42805d3bdc5d..29035ae3c5b67406e658b8b648eb26cf3caed119 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,57 +1,3 @@ -x-resources-nano: &resources-nano - resources: - reservations: - cpus: '0.1' - memory: 128M - limits: - cpus: '0.15' - memory: 192M - -x-resources-micro: &resources-micro - resources: - reservations: - cpus: '0.25' - memory: 256M - limits: - cpus: '0.375' - memory: 384M - -x-resources-small: &resources-small - resources: - reservations: - cpus: '0.5' - memory: 512M - limits: - cpus: '0.75' - memory: 768M - -x-resources-medium: &resources-medium - resources: - reservations: - cpus: '0.5' - memory: 1024M - limits: - cpus: '0.75' - memory: 1536M - -x-resources-large: &resources-large - resources: - reservations: - cpus: '1' - memory: 2048M - limits: - cpus: '1.5' - memory: 3072M - -x-resources-xlarge: &resources-xlarge - resources: - reservations: - cpus: '1.5' - memory: 3072M - limits: - cpus: '2' - memory: 6144M - x-healthcheck-params: &healthcheck-params interval: 30s timeout: 10s @@ -90,8 +36,6 @@ services: healthcheck: test: /opt/bitnami/scripts/mariadb-galera/healthcheck.sh --connect --innodb_initialized <<: *healthcheck-params - deploy: - <<: *resources-xlarge logging: driver: json-file @@ -108,8 +52,6 @@ services: healthcheck: test: -h <<: *healthcheck-params - deploy: - <<: *resources-nano depends_on: dbrepo-metadata-db: condition: service_healthy @@ -135,8 +77,6 @@ services: healthcheck: test: /opt/bitnami/scripts/mariadb-galera/healthcheck.sh --connect --innodb_initialized <<: *healthcheck-params - deploy: - <<: *resources-xlarge logging: driver: json-file @@ -153,8 +93,6 @@ services: healthcheck: test: -h <<: *healthcheck-params - deploy: - <<: *resources-nano depends_on: dbrepo-data-db: condition: service_healthy @@ -168,8 +106,6 @@ services: image: docker.io/bitnami/postgresql:${POSTGRES_VERSION} volumes: - auth-db-data:/bitnami/postgresql - ports: - - "5432:5432" environment: POSTGRESQL_DATABASE: "${AUTH_DB_NAME:-keycloak}" POSTGRESQL_USERNAME: "${AUTH_DB_USERNAME:-keycloak}" @@ -178,8 +114,6 @@ services: healthcheck: test: "psql -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak} -c 'select version();'" <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -197,8 +131,6 @@ services: healthcheck: test: "psql -U ${DASHBOARD_DB_USERNAME:-grafana} -h 127.0.0.1 -p 5432 -d ${DASHBOARD_DB_NAME:-grafana} -c 'select version();'" <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -233,8 +165,6 @@ services: healthcheck: test: curl -fsS localhost:8080/realms/master <<: *healthcheck-params - deploy: - <<: *resources-medium depends_on: dbrepo-identity-service: condition: service_healthy @@ -259,8 +189,6 @@ services: READONLY_USERNAME: "${READONLY_USERNAME:-readonly}" SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: ${SYSTEM_PASSWORD:-admin} - deploy: - <<: *resources-nano depends_on: dbrepo-auth-service: condition: service_healthy @@ -279,8 +207,6 @@ services: build: context: ./dbrepo-metadata-service network: host - ports: - - "9099:8080" environment: ADMIN_EMAIL: "${ADMIN_EMAIL:-noreply@localhost}" ANALYSE_SERVICE_ENDPOINT: "${ANALYSE_SERVICE_ENDPOINT:-http://analyse-service:8080}" @@ -322,8 +248,6 @@ services: healthcheck: test: curl -sSL localhost:8080/actuator/health/liveness | grep 'UP' || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-small depends_on: dbrepo-auth-service: condition: service_healthy @@ -348,8 +272,6 @@ services: build: context: ./dbrepo-analyse-service network: host - ports: - - "4050:8080" environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -366,8 +288,6 @@ services: healthcheck: test: curl -sSL localhost:8080/health | grep 'UP' || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -394,8 +314,6 @@ services: healthcheck: test: rabbitmq-diagnostics -q is_running | grep 'is fully booted and running' <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -411,8 +329,6 @@ services: healthcheck: test: curl -sSL 127.0.0.1:9200 <<: *healthcheck-params - deploy: - <<: *resources-medium logging: driver: json-file @@ -424,8 +340,6 @@ services: build: context: ./dbrepo-search-service network: host - ports: - - "4060:8080" environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -440,8 +354,6 @@ services: healthcheck: test: curl -sSL localhost:8080/health | grep 'UP' || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-micro logging: driver: json-file @@ -472,8 +384,6 @@ services: healthcheck: test: curl -fsSL 127.0.0.1:3000 && curl -fsSL 127.0.0.1:3000/health <<: *healthcheck-params - deploy: - <<: *resources-micro depends_on: dbrepo-search-service: condition: service_healthy @@ -486,16 +396,14 @@ services: restart: "no" container_name: dbrepo-gateway-service hostname: gateway-service - image: docker.io/nginx:${NGINX_VERSION} + image: docker.io/bitnami/nginx:${NGINX_VERSION} ports: - "80:8080" volumes: - - ./dbrepo-gateway-service/dbrepo.conf:/etc/nginx/conf.d/default.conf + - ./dbrepo-gateway-service/dbrepo.conf:/opt/bitnami/nginx/conf/server_blocks/dbrepo.conf:ro healthcheck: - test: lsof -i TCP:80 || exit 1 + test: wget -O- http://127.0.0.1:8080 <<: *healthcheck-params - deploy: - <<: *resources-nano depends_on: dbrepo-analyse-service: condition: service_healthy @@ -535,8 +443,6 @@ services: healthcheck: test: "ldapwhoami -H ldap://localhost:1389 -D ${IDENTITY_SERVICE_ADMIN_DN:-cn=admin,dc=dbrepo,dc=at} -w ${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin} || exit 1" <<: *healthcheck-params - deploy: - <<: *resources-nano logging: driver: json-file @@ -557,8 +463,6 @@ services: OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" - deploy: - <<: *resources-nano depends_on: dbrepo-search-db: condition: service_healthy @@ -583,8 +487,6 @@ services: METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}" SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}" - deploy: - <<: *resources-nano depends_on: dbrepo-dashboard-ui: condition: service_healthy @@ -607,8 +509,6 @@ services: healthcheck: test: echo "cluster.check" | weed shell | grep "checking master.*ok" || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-nano logging: driver: json-file @@ -617,16 +517,12 @@ services: container_name: dbrepo-metric-db hostname: metric-db image: docker.io/bitnami/prometheus:${PROMETHEUS_VERSION} - ports: - - 9090:9090 volumes: - ./dbrepo-metric-db/prometheus.yml:/etc/prometheus/prometheus.yml - metric-db-data:/opt/bitnami/prometheus/data healthcheck: test: promtool check healthy <<: *healthcheck-params - deploy: - <<: *resources-nano logging: driver: json-file @@ -644,8 +540,6 @@ services: S3_BUCKET: "${S3_BUCKET:-dbrepo}" S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-seaweedfsadmin} STORAGE_ENDPOINT: ${STORAGE_ENDPOINT:-http://storage-service:9000} - deploy: - <<: *resources-nano depends_on: dbrepo-storage-service: condition: service_healthy @@ -660,8 +554,6 @@ services: build: context: ./dbrepo-data-service network: host - ports: - - "9093:8080" environment: AUTH_SERVICE_CLIENT: "${AUTH_SERVICE_CLIENT:-dbrepo-client}" AUTH_SERVICE_CLIENT_SECRET: "${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}" @@ -696,8 +588,6 @@ services: healthcheck: test: curl -sSL localhost:8080/actuator/health/liveness | grep 'UP' || exit 1 <<: *healthcheck-params - deploy: - <<: *resources-large depends_on: dbrepo-data-db: condition: service_healthy @@ -708,7 +598,7 @@ services: restart: "no" container_name: dbrepo-dashboard-ui hostname: dashboard-ui - image: docker.io/bitnami/grafana:11.5.3 + image: docker.io/bitnami/grafana:${GRAFANA_VERSION} ports: - "3000:3000" volumes: @@ -718,6 +608,7 @@ services: - ./dbrepo-dashboard-ui/provisioning/dashboards/provider.yaml:/opt/bitnami/grafana/conf/provisioning/dashboards/provider.yaml - ./dbrepo-dashboard-ui/provisioning/datasources/infinity.yaml:/opt/bitnami/grafana/conf/provisioning/datasources/infinity.yaml - ./dbrepo-dashboard-ui/provisioning/datasources/prometheus.yaml:/opt/bitnami/grafana/conf/provisioning/datasources/prometheus.yaml + - ./dbrepo-dashboard-ui/provisioning/datasources/opensearch.yaml:/opt/bitnami/grafana/conf/provisioning/datasources/opensearch.yaml environment: BASE_URL: "${BASE_URL:-http://localhost}" # do not attempt to set it in the grafana.ini, hours wasted here: 7 @@ -733,8 +624,6 @@ services: healthcheck: test: curl -fsSL --head 127.0.0.1:3000 <<: *healthcheck-params - deploy: - <<: *resources-nano extra_hosts: - "localhost:host-gateway" logging: @@ -748,8 +637,6 @@ services: build: context: ./dbrepo-dashboard-service network: host - ports: - - "4070:8080" environment: AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080} BASE_URL: "${BASE_URL:-http://localhost}" @@ -759,8 +646,6 @@ services: healthcheck: test: curl -fsSL --head 127.0.0.1:8080/health <<: *healthcheck-params - deploy: - <<: *resources-micro depends_on: dbrepo-dashboard-ui: condition: service_healthy diff --git a/helm/dbrepo/Chart.lock b/helm/dbrepo/Chart.lock index 0a15410fa69b2de832327f2d734019f30d4ffb14..43c2689e41816f86d8fac571c580e9966b900658 100644 --- a/helm/dbrepo/Chart.lock +++ b/helm/dbrepo/Chart.lock @@ -4,7 +4,10 @@ dependencies: version: 1.4.0 - name: keycloak repository: https://charts.bitnami.com/bitnami - version: 24.6.3 + version: 24.6.6 +- name: nginx + repository: https://charts.bitnami.com/bitnami + version: 20.0.2 - name: mariadb-galera repository: https://charts.bitnami.com/bitnami version: 13.2.7 @@ -16,18 +19,15 @@ dependencies: version: 14.0.0 - name: seaweedfs repository: file://../seaweedfs - version: 4.2.1 + version: 4.8.7 - name: grafana repository: https://charts.bitnami.com/bitnami version: 11.4.2 - name: prometheus repository: https://charts.bitnami.com/bitnami version: 1.3.22 -- name: nginx - repository: https://charts.bitnami.com/bitnami - version: 18.3.1 - name: postgresql repository: https://charts.bitnami.com/bitnami version: 16.1.0 -digest: sha256:fd6fb7a9547e6bb1c7d311b67dae7a3987247e16256ef3b553593ddd90b91340 -generated: "2025-05-02T14:16:07.24283973+02:00" +digest: sha256:bbe97a5c50a63d3449e457cc6973b7c58e841a82552a8c137d07cd4d6b60fe78 +generated: "2025-05-14T15:39:57.551220972+02:00" diff --git a/helm/dbrepo/Chart.yaml b/helm/dbrepo/Chart.yaml index ee659eb5386b3cdabee8c3f6ab20ea38c5a071db..0814c1a5c763bd44f508079726cb04bab317aa51 100644 --- a/helm/dbrepo/Chart.yaml +++ b/helm/dbrepo/Chart.yaml @@ -24,9 +24,14 @@ dependencies: condition: searchdb.enabled - name: keycloak alias: authservice - version: 24.6.3 # app version: 26.2.2 + version: 24.6.6 repository: https://charts.bitnami.com/bitnami condition: authservice.enabled + - name: nginx + alias: gatewayservice + version: 20.0.2 + repository: https://charts.bitnami.com/bitnami + condition: gatewayservice.enabled - name: mariadb-galera alias: datadb version: 13.2.7 @@ -44,7 +49,7 @@ dependencies: condition: brokerservice.enabled - name: seaweedfs alias: storageservice - version: 4.2.1 + version: 4.8.7 repository: file://../seaweedfs condition: storageservice.enabled - name: grafana @@ -57,11 +62,6 @@ dependencies: version: 1.3.22 repository: https://charts.bitnami.com/bitnami condition: metricdb.enabled - - name: nginx - alias: gatewayservice - version: 18.3.1 - repository: https://charts.bitnami.com/bitnami - condition: gatewayservice.enabled - name: postgresql alias: dashboarddb version: 16.1.0 diff --git a/helm/dbrepo/README.md b/helm/dbrepo/README.md index c16c138725cb1272565928bb4666c56750eab4d2..0f60690e238d473d1a20df1d1b3dbe2b3cff9e70 100644 --- a/helm/dbrepo/README.md +++ b/helm/dbrepo/README.md @@ -34,7 +34,7 @@ variable when you increase the available Pod memory for performance. To install the chart with the release name `my-release`: ```bash -helm install my-release "oci://oci://registry.datalab.tuwien.ac.at/dbrepo/helm" --values ./values.yaml --version "1.8.1" +helm install my-release "oci://oci://registry.datalab.tuwien.ac.at/dbrepo/helm" --values ./values.yaml --version "1.8.2" ``` The command deploys DBRepo on the Kubernetes cluster in the default configuration. The Parameters section lists the @@ -54,10 +54,13 @@ The command removes all the Kubernetes components associated with the chart and ### Global parameters -| Name | Description | Value | -| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -| `global.compatibility.openshift.adaptSecurityContext` | Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation) | `auto` | -| `global.storageClass` | Global StorageClass for Persistent Volume(s) | `""` | +| Name | Description | Value | +| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | +| `global.compatibility.openshift.adaptSecurityContext` | Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation) | `auto` | +| `global.storageClass` | Global StorageClass for Persistent Volume(s) | `""` | +| `global.loggingSidecar.enabled` | Enable the logging sidecars for the analyse-, dashboard-, data-, gateway-, metadata- and search service. | `true` | +| `global.loggingSidecar.image.name` | The logging sidecar image. | `docker.io/bitnami/fluent-bit:4.0.0` | +| `global.loggingSidecar.resourcesPreset` | The resource definitions for the logging sidecar. | `nano` | ### Common parameters @@ -81,11 +84,10 @@ The command removes all the Kubernetes components associated with the chart and | `metadatadb.galera.mariabackup.user` | The database backup username. | `backup` | | `metadatadb.galera.mariabackup.password` | The database backup user password | `backup` | | `metadatadb.jdbcExtraArgs` | The extra arguments for JDBC connections in the microservices. | `""` | -| `metadatadb.configurationConfigMap` | The database configuration files. | `metadata-db-config` | | `metadatadb.extraInitDbScripts` | Additional init.db scripts that are executed on the first start. | `{}` | -| `metadatadb.replicaCount` | The number of cluster nodes, should be uneven i.e. 2n+1 | `3` | | `metadatadb.resourcesPreset` | The container resource preset | `xlarge` | | `metadatadb.persistence.enabled` | Enable persistent storage. | `true` | +| `metadatadb.replicaCount` | The number of cluster nodes, should be uneven i.e. 2n+1 | `1` | ### Dashboard Database Enable the Dashboard Database. @@ -152,39 +154,48 @@ The command removes all the Kubernetes components associated with the chart and ### Broker Service -| Name | Description | Value | -| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| `brokerservice.enabled` | Enable the Broker Service. | `true` | -| `brokerservice.image.debug` | Set the logging level to `trace`. Otherwise, set to `info`. | `true` | -| `brokerservice.endpoint` | The management api endpoint for the microservices. | `http://broker-service:15672` | -| `brokerservice.host` | The hostname for the microservices. | `broker-service` | -| `brokerservice.port` | The port for the microservices. | `5672` | -| `brokerservice.virtualHost` | The default virtual host name. | `dbrepo` | -| `brokerservice.queueName` | The default queue name. | `dbrepo` | -| `brokerservice.exchangeName` | The default exchange name. | `dbrepo` | -| `brokerservice.routingKey` | The default routing key binding from the default queue to the default exchange. | `dbrepo.#` | -| `brokerservice.connectionTimeout` | The connection timeout in ms. | `60000` | -| `brokerservice.ldap.binddn` | The domain name the broker service should bind to. In many cases this is the admin user from `identityservice.global.adminUser`. | `cn=admin,dc=dbrepo,dc=at` | -| `brokerservice.ldap.bindpw` | The password to bind on the identity service. In many cases this value is equal to `identityservice.global.adminPassword`. | `admin` | -| `brokerservice.ldap.uidField` | The field containing the user id. | `uid` | -| `brokerservice.ldap.basedn` | The base domain name containing the users. | `dc=dbrepo,dc=at` | -| `brokerservice.ldap.userDnPattern` | The pattern to determine the user. | `${username}` | -| `brokerservice.auth.tls.enabled` | Enable TLS support | `false` | -| `brokerservice.auth.tls.existingSecretFullChain` | If set to `true` the service uses the full chain in the certificate `tls.crt`, otherwise it attempts to read from `ca.crt` | `false` | -| `brokerservice.auth.tls.existingSecret` | Existing secret with certificate content | `ingress-cert` | -| `brokerservice.extraPlugins` | The list of plugins to be activated. | `rabbitmq_prometheus rabbitmq_auth_backend_ldap rabbitmq_auth_mechanism_ssl rabbitmq_mqtt` | -| `brokerservice.persistence.enabled` | If set to true, a PVC will be created. | `false` | -| `brokerservice.extraConfiguration` | The extra configuration for MQTT | `mqtt.vhost = dbrepo +| Name | Description | Value | +| ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `brokerservice.enabled` | Enable the Broker Service. | `true` | +| `brokerservice.image.debug` | Set the logging level to `trace`. Otherwise, set to `info`. | `true` | +| `brokerservice.endpoint` | The management api endpoint for the microservices. | `http://broker-service:15672` | +| `brokerservice.host` | The hostname for the microservices. | `broker-service` | +| `brokerservice.port` | The port for the microservices. | `5672` | +| `brokerservice.virtualHost` | The default virtual host name. | `dbrepo` | +| `brokerservice.queueName` | The default queue name. | `dbrepo` | +| `brokerservice.exchangeName` | The default exchange name. | `dbrepo` | +| `brokerservice.routingKey` | The default routing key binding from the default queue to the default exchange. | `dbrepo.#` | +| `brokerservice.connectionTimeout` | The connection timeout in ms. | `60000` | +| `brokerservice.ldap.binddn` | The domain name the broker service should bind to. In many cases this is the admin user from `identityservice.global.adminUser`. | `cn=admin,dc=dbrepo,dc=at` | +| `brokerservice.ldap.bindpw` | The password to bind on the identity service. In many cases this value is equal to `identityservice.global.adminPassword`. | `admin` | +| `brokerservice.ldap.uidField` | The field containing the user id. | `uid` | +| `brokerservice.ldap.basedn` | The base domain name containing the users. | `dc=dbrepo,dc=at` | +| `brokerservice.ldap.userDnPattern` | The pattern to determine the user. | `${username}` | +| `brokerservice.auth.tls.enabled` | Enable TLS support | `false` | +| `brokerservice.auth.tls.existingSecretFullChain` | If set to `true` the service uses the full chain in the certificate `tls.crt`, otherwise it attempts to read from `ca.crt` | `false` | +| `brokerservice.auth.tls.existingSecret` | Existing secret with certificate content | `ingress-cert` | +| `brokerservice.extraPlugins` | The list of plugins to be activated. | `rabbitmq_prometheus rabbitmq_auth_backend_ldap rabbitmq_auth_mechanism_ssl rabbitmq_mqtt` | +| `brokerservice.extraConfiguration` | The extra configuration for MQTT | `# https://www.rabbitmq.com/docs/logging#log-message-categories +log.connection.level = warning +log.file = /opt/bitnami/rabbitmq/var/log/rabbitmq/app.log +log.file.formatter = json +log.file.level = info +# rotate when the file reaches 10 MiB +log.file.rotation.size = 10485760 +# keep up to 5 archived log files in addition to the current one +log.file.rotation.count = 5 +mqtt.vhost = dbrepo mqtt.exchange = dbrepo mqtt.prefetch = 10 -` | -| `brokerservice.replicaCount` | The number of replicas. | `1` | +` | +| `brokerservice.replicaCount` | The number of replicas. | `1` | ### Analyse Service | Name | Description | Value | | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | ------------------------- | | `analyseservice.enabled` | Enable the Broker Service. | `true` | +| `analyseservice.podAnnotations` | the pod annotations. Evaluated as a template | `{}` | | `analyseservice.podSecurityContext.enabled` | Enable pods' Security Context | `true` | | `analyseservice.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `analyseservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | @@ -211,6 +222,7 @@ mqtt.prefetch = 10 | Name | Description | Value | | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------- | | `metadataservice.enabled` | Enable the Broker Service. | `true` | +| `metadataservice.podAnnotations` | the pod annotations. Evaluated as a template | `{}` | | `metadataservice.podSecurityContext.enabled` | Enable pods' Security Context | `true` | | `metadataservice.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `metadataservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | @@ -251,6 +263,7 @@ mqtt.prefetch = 10 | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- | | `dataservice.enabled` | Enable the Broker Service. | `true` | | `dataservice.endpoint` | Absolute URL to the data service in the form of http://host:port | `http://data-service` | +| `dataservice.podAnnotations` | the pod annotations. Evaluated as a template | `{}` | | `dataservice.podSecurityContext.enabled` | Enable pods' Security Context | `true` | | `dataservice.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `dataservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | @@ -287,6 +300,7 @@ mqtt.prefetch = 10 | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------- | | `searchservice.enabled` | Enable the Broker Service. | `true` | | `searchservice.endpoint` | Absolute URL to the search service in the form of http://host:port | `http://search-service` | +| `searchservice.podAnnotations` | the pod annotations. Evaluated as a template | `{}` | | `searchservice.podSecurityContext.enabled` | Enable pods' Security Context | `true` | | `searchservice.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `searchservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | @@ -303,8 +317,9 @@ mqtt.prefetch = 10 | `searchservice.containerSecurityContext.seccompProfile.type` | Set container's Security Context seccomp profile | `RuntimeDefault` | | `searchservice.resourcesPreset` | The container resource preset | `micro` | | `searchservice.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | -| `searchservice.init.resourcesPreset` | The container resource preset | `nano` | -| `searchservice.init.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | +| `searchservice.setupJob.enabled` | Enable the setup job that syncs missing databases from the Metadata Database into the Search Database. | `true` | +| `searchservice.setupJob.resourcesPreset` | The container resource preset | `nano` | +| `searchservice.setupJob.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | | `searchservice.replicaCount` | The number of replicas. | `2` | ### Storage Service @@ -321,9 +336,10 @@ mqtt.prefetch = 10 | `storageservice.s3.auth.adminSecretAccessKey` | The S3 secret access key for the admin user. In some systems this is named `password`. | `seaweedfsadmin` | | `storageservice.s3.auth.readAccessKeyId` | The S3 access key id for the read only user. | `seaweedfsuser` | | `storageservice.s3.auth.readSecretAccessKey` | The S3 secret access key for the read only user. | `seaweedfsuser` | -| `storageservice.init.s3.endpoint` | The S3-capable endpoint the microservice connects to. | `http://storage-service-s3:8333` | -| `storageservice.init.resourcesPreset` | The container resource preset | `nano` | -| `storageservice.init.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | +| `storageservice.setupJob.enabled` | Enable the setup job that creates the bucket in the s3 endpoint. | `true` | +| `storageservice.setupJob.s3.endpoint` | The S3-capable endpoint the microservice connects to. | `http://storage-service-s3:8333` | +| `storageservice.setupJob.resourcesPreset` | The container resource preset | `nano` | +| `storageservice.setupJob.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | ### Identity Service @@ -333,6 +349,7 @@ mqtt.prefetch = 10 | `identityservice.global.ldapDomain` | The LDAP domain name in domain "dbrepo.at" form or explicit in "dc=dbrepo,dc=at" form. | `dc=dbrepo,dc=at` | | `identityservice.global.adminUser` | The admin username that is used to bind. | `admin` | | `identityservice.global.adminPassword` | The admin user password that is used to bind. | `admin` | +| `identityservice.podAnnotations` | the pod annotations. Evaluated as a template | `{}` | | `identityservice.podSecurityContext.enabled` | Enable pods' Security Context | `true` | | `identityservice.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `identityservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | @@ -363,6 +380,7 @@ mqtt.prefetch = 10 | `ui.oidc.authSessionSecret` | This should be a at least 48 characters random string. It is used to encrypt the user session. | `qJteD-fvcHNafjwDtJOT3pF7IrN1OEzQRcIyPO0xAT4gzct0` | | `ui.oidc.sessionSecret` | This should be a at least 48 characters random string. It is used to encrypt the user session. | `TjOH1lFnocixYmy5ol2I5cOdsYUdrd5_jZsGxo6aMVPNNDkh` | | `ui.oidc.tokenKey` | This needs to be a random cryptographic AES key in base64. Used to encrypt the server side token store. You can generate a key in JS with await subtle.exportKey('raw', await subtle.generateKey({ name: 'AES-GCM', length: 256, }, true, ['encrypt', 'decrypt'])). You just have to encode it to base64 afterwards. | `data:;base64,ntxOAfrF6yw22Ec1AFHK21iFz7L3PZmz9857Uqwyme0=` | +| `ui.podAnnotations` | the pod annotations. Evaluated as a template | `{}` | | `ui.podSecurityContext.enabled` | Enable pods' Security Context | `true` | | `ui.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `ui.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | @@ -401,6 +419,7 @@ mqtt.prefetch = 10 | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------- | | `dashboardservice.enabled` | Enable the Dashboard Service. | `true` | | `dashboardservice.endpoint` | The endpoint for the microservices. | `http://dashboard-service` | +| `dashboardservice.podAnnotations` | the pod annotations. Evaluated as a template | `{}` | | `dashboardservice.podSecurityContext.enabled` | Enable pods' Security Context | `true` | | `dashboardservice.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | | `dashboardservice.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | @@ -418,8 +437,9 @@ mqtt.prefetch = 10 | `dashboardservice.resourcesPreset` | The container resource preset | `micro` | | `dashboardservice.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | | `dashboardservice.replicaCount` | The number of replicas. | `2` | -| `dashboardservice.init.resourcesPreset` | The container resource preset | `nano` | -| `dashboardservice.init.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | +| `dashboardservice.setupJob.enabled` | Enable the setup job that creates dashboards for existing databases in the Dashboard UI. | `true` | +| `dashboardservice.setupJob.resourcesPreset` | The container resource preset | `nano` | +| `dashboardservice.setupJob.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | | `dashboardservice.replicaCount` | The number of replicas. | `2` | ### Dashboard UI @@ -440,13 +460,13 @@ mqtt.prefetch = 10 ### Gateway Service -| Name | Description | Value | -| --------------------------------------------- | --------------------------------------------- | ------------------------ | -| `gatewayservice.enabled` | Enable the Gateway Service. | `true` | -| `gatewayservice.service.type` | The service type. | `ClusterIP` | -| `gatewayservice.metrics.enabled` | Enable the Prometheus metrics sidecar. | `false` | -| `gatewayservice.existingServerBlockConfigmap` | The extra configuration for the reverse proxy | `gateway-service-config` | -| `gatewayservice.replicaCount` | The number of replicas. | `3` | +| Name | Description | Value | +| --------------------------------------------- | --------------------------------------------- | ----------------------- | +| `gatewayservice.enabled` | Enable the Gateway Service. | `true` | +| `gatewayservice.service.type` | The service type. | `ClusterIP` | +| `gatewayservice.metrics.enabled` | Enable the Prometheus metrics sidecar. | `false` | +| `gatewayservice.existingServerBlockConfigmap` | The extra configuration for the reverse proxy | `gateway-service-setup` | +| `gatewayservice.replicaCount` | The number of replicas. | `3` | ### Analytics Service diff --git a/helm/dbrepo/charts/keycloak-24.6.3.tgz b/helm/dbrepo/charts/keycloak-24.6.3.tgz deleted file mode 100644 index 2196f1737a0aa9a6e1c4947de17fe842b171b610..0000000000000000000000000000000000000000 Binary files a/helm/dbrepo/charts/keycloak-24.6.3.tgz and /dev/null differ diff --git a/helm/dbrepo/charts/keycloak-24.6.6.tgz b/helm/dbrepo/charts/keycloak-24.6.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9b9fc4efafb111da60cae8ad4197eb2b733dc7fd Binary files /dev/null and b/helm/dbrepo/charts/keycloak-24.6.6.tgz differ diff --git a/helm/dbrepo/charts/nginx-18.3.1.tgz b/helm/dbrepo/charts/nginx-18.3.1.tgz deleted file mode 100644 index 66ed8e26a1578edede247ba67dc160133d3bc93f..0000000000000000000000000000000000000000 Binary files a/helm/dbrepo/charts/nginx-18.3.1.tgz and /dev/null differ diff --git a/helm/dbrepo/charts/nginx-20.0.2.tgz b/helm/dbrepo/charts/nginx-20.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..91f0c9d5f253e4e2cfc7dfa011954a8e981e6552 Binary files /dev/null and b/helm/dbrepo/charts/nginx-20.0.2.tgz differ diff --git a/helm/dbrepo/charts/seaweedfs-4.2.1.tgz b/helm/dbrepo/charts/seaweedfs-4.2.1.tgz deleted file mode 100644 index 01a3290449116e207f01e24349da14aee6af8f79..0000000000000000000000000000000000000000 Binary files a/helm/dbrepo/charts/seaweedfs-4.2.1.tgz and /dev/null differ diff --git a/helm/dbrepo/charts/seaweedfs-4.8.7.tgz b/helm/dbrepo/charts/seaweedfs-4.8.7.tgz new file mode 100644 index 0000000000000000000000000000000000000000..437a8c385c0d079f33436580068eda55bd9083aa Binary files /dev/null and b/helm/dbrepo/charts/seaweedfs-4.8.7.tgz differ diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar index 4e8060b6ba6d6f0ad9bf2a71d447368492fff775..c5dc64eadaaae60cab812f38609825e3c6e08336 100644 Binary files a/helm/dbrepo/files/create-event-listener.jar and b/helm/dbrepo/files/create-event-listener.jar differ diff --git a/helm/dbrepo/files/dbrepo.conf b/helm/dbrepo/files/dbrepo.conf new file mode 100644 index 0000000000000000000000000000000000000000..b98aca8b0c890cb5312a99246e912310933dd8a5 --- /dev/null +++ b/helm/dbrepo/files/dbrepo.conf @@ -0,0 +1,187 @@ +# This is required to proxy Grafana Live WebSocket connections. +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +proxy_buffer_size 128k; +proxy_buffers 4 256k; +proxy_busy_buffers_size 256k; + +log_format structured '{"remote_addr": "$remote_addr", "remote_user": "$remote_user", "request": "$request", "status": $status, "body_bytes_sent": $body_bytes_sent, "http_referer": "$http_referer", "http_user_agent": "$http_user_agent"}'; + +server { + gzip on; + access_log /var/log/nginx/access.log structured; + + listen 8080 default_server; + server_name _; + + location /dashboard/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://dashboard-ui:3000/; + proxy_read_timeout 90; + } + + # Proxy Grafana Live WebSocket connections. + location /dashboard/api/live/ws { + rewrite ^/dashboard/(.*) /$1 break; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_http_version 1.1; + proxy_pass http://dashboard-ui:3000/; + proxy_read_timeout 90; + } + + # Proxy Keycloak OIDC connections, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations + location /realms { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://auth-service; + proxy_read_timeout 90; + } + + # Proxy Keycloak assets, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations + location /resources { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://auth-service; + proxy_read_timeout 90; + } + + location /api/search { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://search-service; + proxy_read_timeout 90; + } + + location /api/datasource { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://dashboard-service; + proxy_read_timeout 90; + } + + location /api/dashboard { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://dashboard-service; + proxy_read_timeout 90; + } + + location /api/upload { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; + proxy_pass http://data-service; + proxy_read_timeout 90; + # Disable request and response buffering + proxy_request_buffering off; + proxy_buffering off; + proxy_http_version 1.1; + } + + location /api/analyse { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://analyse-service; + proxy_read_timeout 90; + } + + location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/table/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic|history)" { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://data-service; + proxy_read_timeout 90; + } + + location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic)" { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://data-service; + proxy_read_timeout 90; + } + + location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view" { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://metadata-service; + proxy_read_timeout 90; + } + + location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/subset" { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://data-service; + proxy_read_timeout 600; + } + + location ~ "/api/(database|concept|container|identifier|image|message|license|oai|ontology|unit|user)" { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://metadata-service; + proxy_read_timeout 90; + } + + location ~ "/api/identifier/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://metadata-service; + proxy_read_timeout 90; + } + + location ~ "/pid/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { + rewrite /pid/(.*) /api/identifier/$1 break; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://metadata-service; + proxy_read_timeout 90; + } + + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://ui:3000; + proxy_read_timeout 90; + } +} diff --git a/helm/dbrepo/files/dbrepo.json b/helm/dbrepo/files/dbrepo.json index ca75b2fffe9345b8a4c9fecd825e027377932909..dc3d570df03df3c485aa9ed64caadaf2b1e75c03 100644 --- a/helm/dbrepo/files/dbrepo.json +++ b/helm/dbrepo/files/dbrepo.json @@ -18,7 +18,7 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 1, - "id": 3, + "id": 4, "links": [ { "asDropdown": false, @@ -112,7 +112,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -182,7 +182,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -250,7 +250,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -318,7 +318,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -434,7 +434,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -510,7 +510,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -604,7 +604,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -699,7 +699,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -781,7 +781,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -859,7 +859,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -933,7 +933,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1005,7 +1005,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1094,7 +1094,7 @@ "sizing": "auto", "valueMode": "color" }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1197,7 +1197,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1284,7 +1284,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1358,7 +1358,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1440,7 +1440,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1522,7 +1522,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1604,7 +1604,7 @@ "textMode": "auto", "wideLayout": true }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1735,7 +1735,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1829,7 +1829,7 @@ "sizing": "auto", "valueMode": "color" }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -1946,7 +1946,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2108,7 +2108,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2269,7 +2269,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2400,7 +2400,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2418,13 +2418,385 @@ "title": "Failed API Requests", "type": "timeseries" }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Count", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "200" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "200s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "300" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "300s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "400" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "400s" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "500" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + }, + { + "id": "displayName", + "value": "500s" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 48 + }, + "id": 43, + "options": { + "barRadius": 0, + "barWidth": 0.97, + "fullHighlight": false, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "normal", + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + }, + "xTickLabelRotation": 0, + "xTickLabelSpacing": 100 + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "status: (>=200 AND <300)", + "queryType": "lucene", + "refId": "200", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "status: (>=300 AND <400)", + "queryType": "lucene", + "refId": "300", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "status: (>=400 AND <500)", + "queryType": "lucene", + "refId": "400", + "timeField": "@timestamp" + }, + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "status: >=500", + "queryType": "lucene", + "refId": "500", + "timeField": "@timestamp" + } + ], + "title": "HTTP Status Codes over Time", + "type": "barchart" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": {}, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "200" + }, + "properties": [] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "300" + }, + "properties": [] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "400" + }, + "properties": [] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "500" + }, + "properties": [] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 48 + }, + "id": 44, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": false, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "status: >=400", + "queryType": "lucene", + "refId": "ERROR", + "timeField": "@timestamp" + } + ], + "title": "REST API Errors", + "type": "logs" + }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 48 + "y": 56 }, "id": 39, "panels": [], @@ -2496,7 +2868,7 @@ "h": 8, "w": 12, "x": 0, - "y": 49 + "y": 57 }, "id": 41, "options": { @@ -2513,7 +2885,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2607,7 +2979,7 @@ "h": 8, "w": 12, "x": 12, - "y": 49 + "y": 57 }, "id": 42, "options": { @@ -2624,7 +2996,7 @@ "sort": "none" } }, - "pluginVersion": "11.5.3", + "pluginVersion": "11.3.1", "targets": [ { "datasource": { @@ -2671,13 +3043,13 @@ "list": [] }, "time": { - "from": "now-24h", + "from": "now-3h", "to": "now" }, "timepicker": {}, "timezone": "browser", "title": "DBRepo", "uid": "bdz20owu8zn5se", - "version": 9, + "version": 1, "weekStart": "" } \ No newline at end of file diff --git a/helm/dbrepo/files/keycloak.json b/helm/dbrepo/files/keycloak.json index 7c2115a8ecc143851275d456d4c954bdd881f5b2..aa5e2a8c572b6a5273bb9c89c908b3adff857dfa 100644 --- a/helm/dbrepo/files/keycloak.json +++ b/helm/dbrepo/files/keycloak.json @@ -2342,7 +2342,7 @@ "refresh": "5m", "schemaVersion": 26, "style": "dark", - "tags": [], + "tags": ["provisioned", "auth"], "templating": { "list": [ { @@ -2357,7 +2357,7 @@ ] }, "time": { - "from": "now-24h", + "from": "now-3h", "to": "now" }, "timepicker": { @@ -2386,7 +2386,7 @@ ] }, "timezone": "", - "title": "Keycloak Metrics Dashboard", + "title": "Keycloak - Overview", "uid": "keycloak-dashboard", "version": 6, "description": "Dashboard of Keycloak metrics exported with Keycloak Metrics SPI\r\n\r\nhttps://github.com/aerogear/keycloak-metrics-spi" diff --git a/helm/dbrepo/files/logging.json b/helm/dbrepo/files/logging.json new file mode 100644 index 0000000000000000000000000000000000000000..4bd065db8e64f6da2dcb835f7b6ad13cea013cc9 --- /dev/null +++ b/helm/dbrepo/files/logging.json @@ -0,0 +1,865 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 4, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 6, + "panels": [], + "title": "System", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "orange", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 12, + "x": 0, + "y": 1 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "WARN", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "hide": false, + "id": "1", + "type": "count" + } + ], + "query": "log_level: WARN", + "queryType": "lucene", + "refId": "warn", + "timeField": "@timestamp" + } + ], + "title": "Warnings over time", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "red", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 12, + "x": 12, + "y": 1 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "ERROR", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "hide": false, + "id": "1", + "type": "count" + } + ], + "query": "log_level: ERROR", + "queryType": "lucene", + "refId": "warn", + "timeField": "@timestamp" + } + ], + "title": "Errors over time", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "description": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 5 + }, + "id": 9, + "options": { + "dedupStrategy": "none", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "@timestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "log_level: WARN", + "queryType": "lucene", + "refId": "A", + "timeField": "@timestamp" + } + ], + "title": "Warnings", + "transformations": [ + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "@timestamp", + "message", + "log_logger", + "process_pid", + "process_thread_name", + "service_name", + "service_version", + "log_level" + ] + } + } + } + ], + "type": "logs" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "description": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 5 + }, + "id": 19, + "options": { + "dedupStrategy": "none", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "@timestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "log_level: ERROR", + "queryType": "lucene", + "refId": "A", + "timeField": "@timestamp" + } + ], + "title": "Errors", + "transformations": [ + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "@timestamp", + "message", + "log_logger", + "process_pid", + "process_thread_name", + "service_name", + "service_version", + "log_level" + ] + } + } + } + ], + "type": "logs" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#ffffff", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#ffffff", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "DEBUG", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "hide": false, + "id": "1", + "type": "count" + } + ], + "query": "log_level: DEBUG", + "queryType": "lucene", + "refId": "warn", + "timeField": "@timestamp" + } + ], + "title": "Debugs over time", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "INFO", + "bucketAggs": [ + { + "id": "2", + "settings": { + "interval": "auto", + "min_doc_count": "0", + "trimEdges": "0" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Metric", + "metrics": [ + { + "hide": false, + "id": "1", + "type": "count" + } + ], + "query": "log_level: INFO", + "queryType": "lucene", + "refId": "warn", + "timeField": "@timestamp" + } + ], + "title": "Infos over time", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "description": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 19 + }, + "id": 23, + "options": { + "dedupStrategy": "none", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "@timestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "log_level: DEBUG", + "queryType": "lucene", + "refId": "A", + "timeField": "@timestamp" + } + ], + "title": "Debugs", + "transformations": [ + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "@timestamp", + "message", + "log_logger", + "process_pid", + "process_thread_name", + "service_name", + "service_version", + "log_level" + ] + } + } + } + ], + "type": "logs" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "description": "", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 19 + }, + "id": 22, + "options": { + "dedupStrategy": "none", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "@timestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "dbrepoopensearch0" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "log_level: INFO", + "queryType": "lucene", + "refId": "A", + "timeField": "@timestamp" + } + ], + "title": "Infos", + "transformations": [ + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "@timestamp", + "message", + "log_logger", + "process_pid", + "process_thread_name", + "service_name", + "service_version", + "log_level" + ] + } + } + } + ], + "type": "logs" + } + ], + "preload": false, + "refresh": "5m", + "schemaVersion": 40, + "tags": [ + "ui", + "dashboard", + "metadata", + "data", + "gateway", + "analyse", + "metrics", + "auth", + "search" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Logging - Overview", + "uid": "aejhojr0mrpj4c", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/helm/dbrepo/files/mariadb.json b/helm/dbrepo/files/mariadb.json index 3402ae51ddf74df0ea9d17da64719dcb8df7431c..b6297de19c2dcd0c179c49a8c616ab2f230caf6b 100644 --- a/helm/dbrepo/files/mariadb.json +++ b/helm/dbrepo/files/mariadb.json @@ -1366,12 +1366,12 @@ ] }, "time": { - "from": "now-24h", + "from": "now-3h", "to": "now" }, "timepicker": {}, "timezone": "", - "title": "Galera/MariaDB - Overview", + "title": "MariaDB Galera - Overview", "uid": "pXgz0qFGk", "version": 2 } \ No newline at end of file diff --git a/helm/dbrepo/files/my.cnf b/helm/dbrepo/files/my.cnf deleted file mode 100644 index 2798f37644d8b2b2691335277c50e41dcd295def..0000000000000000000000000000000000000000 --- a/helm/dbrepo/files/my.cnf +++ /dev/null @@ -1,125 +0,0 @@ -[client] -port=3306 -socket=/opt/bitnami/mariadb/tmp/mysql.sock -plugin_dir=/opt/bitnami/mariadb/plugin - -[mysqld] -explicit_defaults_for_timestamp -default_storage_engine=InnoDB -basedir=/opt/bitnami/mariadb -datadir=/bitnami/mariadb/data -plugin_dir=/opt/bitnami/mariadb/plugin -tmpdir=/opt/bitnami/mariadb/tmp -socket=/opt/bitnami/mariadb/tmp/mysql.sock -pid_file=/opt/bitnami/mariadb/tmp/mysqld.pid -bind_address=0.0.0.0 - -## Character set -## -collation_server=utf8_unicode_ci -init_connect='SET NAMES utf8' -character_set_server=utf8 - -## MyISAM -## -key_buffer_size=32M -myisam_recover_options=FORCE,BACKUP - -## Safety -## -skip_host_cache -skip_name_resolve -max_allowed_packet=16M -max_connect_errors=1000000 -sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY -sysdate_is_now=1 - -## Binary Logging -## -log_bin=mysql-bin -expire_logs_days=14 -# Disabling for performance per http://severalnines.com/blog/9-tips-going-production-galera-cluster-mysql -sync_binlog=0 -# Required for Galera -binlog_format=row - -## Caches and Limits -## -tmp_table_size=32M -max_heap_table_size=32M -# Re-enabling as now works with Maria 10.1.2 -query_cache_type=1 -query_cache_limit=4M -query_cache_size=256M -max_connections=500 -thread_cache_size=50 -open_files_limit=65535 -table_definition_cache=4096 -table_open_cache=4096 - -## InnoDB -## -innodb=FORCE -innodb_strict_mode=1 -# Mandatory per https://github.com/codership/documentation/issues/25 -innodb_autoinc_lock_mode=2 -# Per https://www.percona.com/blog/2006/08/04/innodb-double-write/ -innodb_doublewrite=1 -innodb_flush_method=O_DIRECT -innodb_log_files_in_group=2 -innodb_log_file_size=128M -innodb_flush_log_at_trx_commit=1 -innodb_file_per_table=1 -# 80% Memory is default reco. -# Need to re-evaluate when DB size grows -innodb_buffer_pool_size=1430M -innodb_file_format=Barracuda - -## Logging -## -log_error=/opt/bitnami/mariadb/logs/mysqld.log -slow_query_log_file=/opt/bitnami/mariadb/logs/mysqld.log -log_queries_not_using_indexes=1 -slow_query_log=1 - -## SSL -## Use extraVolumes and extraVolumeMounts to mount /certs filesystem -# ssl_ca=/certs/ca.pem -# ssl_cert=/certs/server-cert.pem -# ssl_key=/certs/server-key.pem - -[galera] -wsrep_on=ON -wsrep_provider=/opt/bitnami/mariadb/lib/libgalera_smm.so -wsrep_sst_method=mariabackup -wsrep_slave_threads=4 -wsrep_cluster_address=gcomm:// -wsrep_cluster_name=galera -wsrep_sst_auth="root:" -# Enabled for performance per https://mariadb.com/kb/en/innodb-system-variables/#innodb_flush_log_at_trx_commit -innodb_flush_log_at_trx_commit=2 -# MYISAM REPLICATION SUPPORT # -wsrep_mode=REPLICATE_MYISAM - -[mariadb] -plugin_load_add=auth_pam - -## Data-at-Rest Encryption -## Use extraVolumes and extraVolumeMounts to mount /encryption filesystem -# plugin_load_add=file_key_management -# file_key_management_filename=/encryption/keyfile.enc -# file_key_management_filekey=FILE:/encryption/keyfile.key -# file_key_management_encryption_algorithm=AES_CTR -# encrypt_binlog=ON -# encrypt_tmp_files=ON - -## InnoDB/XtraDB Encryption -# innodb_encrypt_tables=ON -# innodb_encrypt_temporary_tables=ON -# innodb_encrypt_log=ON -# innodb_encryption_threads=4 -# innodb_encryption_rotate_key_age=1 - -## Aria Encryption -# aria_encrypt_tables=ON -# encrypt_tmp_disk_tables=ON \ No newline at end of file diff --git a/helm/dbrepo/files/rabbitmq.json b/helm/dbrepo/files/rabbitmq.json index 99d810c39226c30aa8aa6e834971c67ef2a1ce1d..fbaaf04ba0f7b32f7da9a10ac3edbafab23f273a 100644 --- a/helm/dbrepo/files/rabbitmq.json +++ b/helm/dbrepo/files/rabbitmq.json @@ -8133,7 +8133,7 @@ ] }, "time": { - "from": "now-24h", + "from": "now-3h", "to": "now" }, "timepicker": { diff --git a/helm/dbrepo/hack/add-hosts.sh b/helm/dbrepo/hack/add-hosts.sh deleted file mode 100755 index 93d1bbcb52c80ce3d3c173b4d458fd76489fde21..0000000000000000000000000000000000000000 --- a/helm/dbrepo/hack/add-hosts.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -cat /etc/hosts | grep "dbrepo.local" -if [ "$?" -ne 0 ]; then - echo "$(minikube ip) dbrepo.local" | sudo tee -a /etc/hosts -fi \ No newline at end of file diff --git a/helm/dbrepo/hack/generate-rabbitmq-pw.sh b/helm/dbrepo/hack/generate-rabbitmq-pw.sh deleted file mode 100755 index 4bccc93d7b0b9dc8a9e8b4116bcd6826f83f3f71..0000000000000000000000000000000000000000 --- a/helm/dbrepo/hack/generate-rabbitmq-pw.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -# https://stackoverflow.com/a/53175209/2634294 -# THIS SCRIPT REQUIRES xxd TO BE INSTALLED: -# DEBIAN: apt install xxd -# MACOS: brew install coreutils -function encode_password() -{ - SALT=$(od -A n -t x -N 4 /dev/urandom) - PASS=$SALT$(echo -n $1 | xxd -ps | tr -d '\n' | tr -d ' ') - PASS=$(echo -n $PASS | xxd -r -p | sha256sum | head -c 128) - PASS=$(echo -n $SALT$PASS | xxd -r -p | base64 | tr -d '\n') - echo $PASS -} -encode_password $1 \ No newline at end of file diff --git a/helm/dbrepo/hack/generate-tls-cert.sh b/helm/dbrepo/hack/generate-tls-cert.sh deleted file mode 100755 index cfe69dfdb0e59f7c2b0895b63f4bf039e074c9e4..0000000000000000000000000000000000000000 --- a/helm/dbrepo/hack/generate-tls-cert.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -HOSTNAME="dbrepo.local" - -openssl genrsa -out ./tls/ca.key 2048 -openssl req -new -x509 -days 365 -key ./tls/ca.key -subj "/C=AT/O=Acme, Inc./CN=Acme Root CA" -out ./tls/ca.crt -openssl req -newkey rsa:2048 -nodes -keyout ./tls/tls.key -subj "/C=AT/O=DBRepo/CN=${HOSTNAME}" -out ./tls/tls.csr -openssl x509 -req -extfile <(printf "subjectAltName=DNS:${HOSTNAME},DNS:www.${HOSTNAME}") -days 365 -in ./tls/tls.csr \ - -CA ./tls/ca.crt -CAkey ./tls/ca.key -CAcreateserial -out ./tls/tls.crt \ No newline at end of file diff --git a/helm/dbrepo/hack/install-cert-manager.sh b/helm/dbrepo/hack/install-cert-manager.sh deleted file mode 100755 index 8b0569b733164132d0932e3e645e1fb025a3d84f..0000000000000000000000000000000000000000 --- a/helm/dbrepo/hack/install-cert-manager.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v${CERT_MANAGER_VERSION}/cert-manager.yaml -if [ $? -ne 0 ]; then - echo "ERROR: Failed to install cert-manager" > /dev/stderr -else - echo "SUCCESS: Installed cert-manager" -fi -cat <<EOF | kubectl apply -f - -apiVersion: cert-manager.io/v1 -kind: ClusterIssuer -metadata: - name: selfsigned-cluster-issuer -spec: - selfSigned: {} -EOF diff --git a/helm/dbrepo/hack/install-seaweedfs.sh b/helm/dbrepo/hack/install-seaweedfs.sh deleted file mode 100755 index 5842de8eafcb47bb163645b6a51a14e5ab140fd7..0000000000000000000000000000000000000000 --- a/helm/dbrepo/hack/install-seaweedfs.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -helm upgrade -n seaweedfs seaweedfs https://seaweedfs.github.io/seaweedfs-csi-driver/helm/seaweedfs-csi-driver-0.1.3.tgz \ - --install --create-namespace \ No newline at end of file diff --git a/helm/dbrepo/hack/tls/.gitkeep b/helm/dbrepo/hack/tls/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/helm/dbrepo/templates/_helpers.tpl b/helm/dbrepo/templates/_helpers.tpl index b58ad0e517c2d1e9ff34a89e3700c0505eafe3b0..b9b6534de6ebab17707d0f19124698fda0e524fd 100644 --- a/helm/dbrepo/templates/_helpers.tpl +++ b/helm/dbrepo/templates/_helpers.tpl @@ -61,6 +61,57 @@ Create the name of the service account to use {{- end }} {{- end }} +{{/* +Service configuration for the sidecar metrics +*/}} +{{- define "dbrepo.logging.sidecarOpensearchService" -}} +[SERVICE] + Flush 5 + Daemon Off + Log_Level debug + Parsers_File /opt/bitnami/fluent-bit/conf/parsers.conf +{{- end -}} + +{{/* +Input configuration for the sidecar metrics +*/}} +{{- define "dbrepo.logging.sidecarOpensearchInput" -}} +[INPUT] + Name tail + Tag * + Path /var/log/app/service/*/*.log + Parser docker + Mem_Buf_Limit 5MB + Buffer_Chunk_size 32k + Buffer_Max_size 32k +{{- end -}} + +{{/* +Output configuration for the sidecar metrics +*/}} +{{- define "dbrepo.logging.sidecarOpensearchOutput" -}} +[OUTPUT] + Name opensearch + Match * + Host search-db + Port 9200 + Index logging + Replace_Dots On + Suppress_Type_Name On + Trace_Error On +{{- end -}} + +{{/* +Output configuration for the sidecar metrics +*/}} +{{- define "dbrepo.logging.sidecarMetricsOutput" -}} +[OUTPUT] + name prometheus_exporter + match internal_metrics + host 0.0.0.0 + port 2021 +{{- end -}} + {{/* Broker connections */}} diff --git a/helm/dbrepo/templates/analyse-configmap.yaml b/helm/dbrepo/templates/analyse-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..45d4cb32219d114b9bec6e50e56a7f165ce93097 --- /dev/null +++ b/helm/dbrepo/templates/analyse-configmap.yaml @@ -0,0 +1,15 @@ +{{- if .Values.analyseservice.enabled }} +{{- if .Values.global.loggingSidecar.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: analyse-service-config + namespace: {{ include "common.names.namespace" . | quote }} +data: + fluent-bit.conf: |- + {{- include "dbrepo.logging.sidecarOpensearchService" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchInput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchOutput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarMetricsOutput" . | nindent 4 }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/analyse-deployment.yaml b/helm/dbrepo/templates/analyse-deployment.yaml index d3e6b699c0b66e1100bdae7aab6a560380a6f19e..07f02ce9192b2ebcbaf1477378ee2435e1630546 100644 --- a/helm/dbrepo/templates/analyse-deployment.yaml +++ b/helm/dbrepo/templates/analyse-deployment.yaml @@ -18,6 +18,10 @@ spec: service: analyse-service template: metadata: + annotations: + {{- if .Values.analyseservice.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.analyseservice.podAnnotations "context" $) | nindent 8 }} + {{- end }} labels: app: analyse-service service: analyse-service @@ -35,6 +39,9 @@ spec: ports: - containerPort: 8080 protocol: TCP + volumeMounts: + - name: empty-dir + mountPath: /var/log/app/service/analyse envFrom: - secretRef: name: analyse-service-secret @@ -59,4 +66,37 @@ spec: {{- else if ne .Values.analyseservice.resourcesPreset "none" }} resources: {{- include "common.resources.preset" (dict "type" .Values.analyseservice.resourcesPreset) | nindent 12 }} {{- end }} + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-agent + image: {{ .Values.global.loggingSidecar.image.name }} + imagePullPolicy: {{ .Values.analyseservice.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.analyseservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.analyseservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + volumeMounts: + - name: logging-config + mountPath: /opt/bitnami/fluent-bit/conf/fluent-bit.conf + subPath: fluent-bit.conf + - name: empty-dir + mountPath: /var/log/app/service/analyse + livenessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 150 + periodSeconds: 10 + readinessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: {{- include "common.resources.preset" (dict "type" .Values.global.loggingSidecar.resourcesPreset) | nindent 12 }} + {{- end }} + volumes: + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-config + configMap: + name: analyse-service-config + {{- end }} + - name: empty-dir + emptyDir: {} {{- end }} diff --git a/helm/dbrepo/templates/auth-configmap.yaml b/helm/dbrepo/templates/auth-configmap.yaml index 8d8340bd9bb3db42e8a1385cdf4a0e631963f525..4e95365743d17062227c2095d745e92b8a04207f 100644 --- a/helm/dbrepo/templates/auth-configmap.yaml +++ b/helm/dbrepo/templates/auth-configmap.yaml @@ -8,19 +8,6 @@ binaryData: create-event-listener.jar: |- {{ .Files.Get "files/create-event-listener.jar" | b64enc }} data: - AUTH_SERVICE_ADMIN: "{{ .Values.authservice.auth.adminUser }}" - AUTH_SERVICE_ADMIN_PASSWORD: "{{ .Values.authservice.auth.adminPassword }}" - AUTH_SERVICE_ENDPOINT: "{{ .Values.authservice.endpoint }}" - KEYCLOAK_HOSTNAME: "{{ .Values.gateway }}" - LDAP_ROOT: "{{ .Values.identityservice.global.ldapDomain }}" - LDAP_ADMIN_DN: "cn={{ .Values.identityservice.global.adminUser }},{{ .Values.identityservice.global.ldapDomain }}" - LDAP_ADMIN_PASSWORD: "{{ .Values.identityservice.global.adminPassword }}" - METADATA_DB: "{{ .Values.metadatadb.db.name }}" - METADATA_DB_PASSWORD: "{{ .Values.metadatadb.rootUser.password }}" - METADATA_SERVICE_ENDPOINT: "{{ .Values.metadataservice.endpoint }}" - METADATA_USERNAME: "{{ .Values.metadatadb.rootUser.user }}" - SYSTEM_USERNAME: "{{ .Values.identityservice.users }}" - SYSTEM_PASSWORD: "{{ .Values.identityservice.userPasswords }}" {{ (.Files.Glob "files/dbrepo-realm.json").AsConfig | nindent 2 }} {{ (.Files.Glob "files/master-realm.json").AsConfig | nindent 2 }} {{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/auth-secret.yaml b/helm/dbrepo/templates/auth-secret.yaml new file mode 100644 index 0000000000000000000000000000000000000000..da47194ddfd93d225242ed84df35802d42501ecf --- /dev/null +++ b/helm/dbrepo/templates/auth-secret.yaml @@ -0,0 +1,26 @@ +{{- if .Values.authservice.enabled }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: auth-service-secret + namespace: {{ include "common.names.namespace" . | quote }} +stringData: + AUTH_SERVICE_ADMIN: "{{ .Values.authservice.auth.adminUser }}" + AUTH_SERVICE_ADMIN_PASSWORD: "{{ .Values.authservice.auth.adminPassword }}" + AUTH_SERVICE_ENDPOINT: "{{ .Values.authservice.endpoint }}" + KC_LOG: "console,file" + KC_LOG_FILE_JSON_FORMAT: "ecs" + KC_LOG_FILE_LEVEL: "debug" + KC_LOG_FILE_OUTPUT: "json" + KEYCLOAK_HOSTNAME: "{{ .Values.gateway }}" + LDAP_ROOT: "{{ .Values.identityservice.global.ldapDomain }}" + LDAP_ADMIN_DN: "cn={{ .Values.identityservice.global.adminUser }},{{ .Values.identityservice.global.ldapDomain }}" + LDAP_ADMIN_PASSWORD: "{{ .Values.identityservice.global.adminPassword }}" + METADATA_DB: "{{ .Values.metadatadb.db.name }}" + METADATA_DB_PASSWORD: "{{ .Values.metadatadb.rootUser.password }}" + METADATA_SERVICE_ENDPOINT: "{{ .Values.metadataservice.endpoint }}" + METADATA_USERNAME: "{{ .Values.metadatadb.rootUser.user }}" + SYSTEM_USERNAME: "{{ .Values.identityservice.users }}" + SYSTEM_PASSWORD: "{{ .Values.identityservice.userPasswords }}" +{{- end }} diff --git a/helm/dbrepo/templates/auth-job.yaml b/helm/dbrepo/templates/auth-setup-job.yaml similarity index 80% rename from helm/dbrepo/templates/auth-job.yaml rename to helm/dbrepo/templates/auth-setup-job.yaml index ca58e6a287cb97365b62fa4bec597ae8cb0ebab9..9b83684bf501402d5387b295eeab7b83869b2293 100644 --- a/helm/dbrepo/templates/auth-job.yaml +++ b/helm/dbrepo/templates/auth-setup-job.yaml @@ -16,6 +16,9 @@ spec: - name: init image: {{ .Values.authservice.setupJob.image.name }} imagePullPolicy: {{ .Values.authservice.setupJob.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.authservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.authservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} env: - name: POD_IP valueFrom: @@ -30,8 +33,8 @@ spec: fieldRef: fieldPath: metadata.namespace envFrom: - - configMapRef: - name: auth-service-config + - secretRef: + name: auth-service-secret {{- if .Values.authservice.setupJob.resources }} resources: {{- toYaml .Values.authservice.setupJob.resources | nindent 12 }} {{- else if ne .Values.authservice.setupJob.resourcesPreset "none" }} diff --git a/helm/dbrepo/templates/broker-configmap.yaml b/helm/dbrepo/templates/broker-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e39e2cebd1c5fa6b830ed31303774318f343dfb6 --- /dev/null +++ b/helm/dbrepo/templates/broker-configmap.yaml @@ -0,0 +1,41 @@ +{{- if .Values.brokerservice.enabled }} +{{- if .Values.global.loggingSidecar.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: broker-service-config + namespace: {{ include "common.names.namespace" . | quote }} +data: + fluent-bit.conf: |- + [SERVICE] + Flush 5 + Daemon Off + Log_Level debug + Parsers_File /opt/bitnami/fluent-bit/conf/parsers.conf + [INPUT] + Name tail + Tag * + Path /opt/bitnami/rabbitmq/var/log/rabbitmq/*.log + Parser rabbitmq + Mem_Buf_Limit 5MB + Buffer_Chunk_size 32k + Buffer_Max_size 32k + [FILTER] + Name modify + Match * + Rename time @timestamp + Rename level log.level + Rename pid process.pid + Rename msg message + Add service.name broker-service + {{- include "dbrepo.logging.sidecarOpensearchOutput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarMetricsOutput" . | nindent 4 }} + parsers.conf: |- + [PARSER] + Name rabbitmq + Format json + Time_Key time + Time_Format %Y-%m-%d %H:%M:%S.%L + Time_Keep On +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/dashboard-configmap.yaml b/helm/dbrepo/templates/dashboard-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..567878c48e500d7e432963e4cbbd1c3d8a7dfb23 --- /dev/null +++ b/helm/dbrepo/templates/dashboard-configmap.yaml @@ -0,0 +1,15 @@ +{{- if .Values.dashboardservice.enabled }} +{{- if .Values.global.loggingSidecar.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: dashboard-service-config + namespace: {{ include "common.names.namespace" . | quote }} +data: + fluent-bit.conf: |- + {{- include "dbrepo.logging.sidecarOpensearchService" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchInput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchOutput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarMetricsOutput" . | nindent 4 }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/dashboard-deployment.yaml b/helm/dbrepo/templates/dashboard-deployment.yaml index f2c1a6fff16b55ada432db13abca7fb40f5d45e8..9671d4ddd5aaecc54fd867c164802c37c310f998 100644 --- a/helm/dbrepo/templates/dashboard-deployment.yaml +++ b/helm/dbrepo/templates/dashboard-deployment.yaml @@ -18,6 +18,10 @@ spec: service: dashboard-service template: metadata: + annotations: + {{- if .Values.dashboardservice.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.dashboardservice.podAnnotations "context" $) | nindent 8 }} + {{- end }} labels: app: dashboard-service service: dashboard-service @@ -25,21 +29,6 @@ spec: {{- if .Values.dashboardservice.podSecurityContext.enabled }} securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.dashboardservice.podSecurityContext "context" $) | nindent 8 }} {{- end }} - initContainers: - - name: init - image: {{ .Values.dashboardservice.init.image.name }} - imagePullPolicy: {{ .Values.dashboardservice.init.image.pullPolicy | default "IfNotPresent" }} - {{- if .Values.dashboardservice.containerSecurityContext.enabled }} - securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.dashboardservice.containerSecurityContext "context" $) | nindent 12 }} - {{- end }} - envFrom: - - secretRef: - name: dashboard-service-secret - {{- if .Values.dashboardservice.init.resources }} - resources: {{- toYaml .Values.dashboardservice.init.resources | nindent 12 }} - {{- else if ne .Values.dashboardservice.init.resourcesPreset "none" }} - resources: {{- include "common.resources.preset" (dict "type" .Values.dashboardservice.init.resourcesPreset) | nindent 12 }} - {{- end }} containers: - name: dashboard-service image: {{ .Values.dashboardservice.image.name }} @@ -50,6 +39,9 @@ spec: ports: - containerPort: 8080 protocol: TCP + volumeMounts: + - name: empty-dir + mountPath: /var/log/app/service/dashboard envFrom: - secretRef: name: dashboard-service-secret @@ -74,4 +66,37 @@ spec: {{- else if ne .Values.dashboardservice.resourcesPreset "none" }} resources: {{- include "common.resources.preset" (dict "type" .Values.dashboardservice.resourcesPreset) | nindent 12 }} {{- end }} + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-agent + image: {{ .Values.global.loggingSidecar.image.name }} + imagePullPolicy: {{ .Values.dashboardservice.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.dashboardservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.dashboardservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + volumeMounts: + - name: logging-config + mountPath: /opt/bitnami/fluent-bit/conf/fluent-bit.conf + subPath: fluent-bit.conf + - name: empty-dir + mountPath: /var/log/app/service/dashboard + livenessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 150 + periodSeconds: 10 + readinessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: {{- include "common.resources.preset" (dict "type" .Values.global.loggingSidecar.resourcesPreset) | nindent 12 }} + {{- end }} + volumes: + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-config + configMap: + name: dashboard-service-config + {{- end }} + - name: empty-dir + emptyDir: { } {{- end }} diff --git a/helm/dbrepo/templates/dashboard-setup-job.yaml b/helm/dbrepo/templates/dashboard-setup-job.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a12228661b6af4b1d0c3cb8700c017b0e5573399 --- /dev/null +++ b/helm/dbrepo/templates/dashboard-setup-job.yaml @@ -0,0 +1,49 @@ +{{- if .Values.dashboardservice.enabled }} +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: dashboard-service-setup-job + namespace: {{ include "common.names.namespace" . | quote }} +spec: + backoffLimit: {{ .Values.dashboardservice.setupJob.backoffLimit | default "10" }} + template: + metadata: + name: auth-service-setup-job + spec: + restartPolicy: OnFailure + containers: + - name: init + image: {{ .Values.dashboardservice.setupJob.image.name }} + imagePullPolicy: {{ .Values.dashboardservice.setupJob.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.dashboardservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.dashboardservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + envFrom: + - secretRef: + name: dashboard-service-secret + volumeMounts: + - name: empty-dir + mountPath: /var/log/app/service/dashboard + {{- if .Values.dashboardservice.setupJob.resources }} + resources: {{- toYaml .Values.dashboardservice.setupJob.resources | nindent 12 }} + {{- else if ne .Values.dashboardservice.setupJob.resourcesPreset "none" }} + resources: {{- include "common.resources.preset" (dict "type" .Values.dashboardservice.setupJob.resourcesPreset) | nindent 12 }} + {{- end }} + volumes: + - name: empty-dir + emptyDir: { } +{{- end }} diff --git a/helm/dbrepo/templates/dashboard-ui-configmap.yaml b/helm/dbrepo/templates/dashboard-ui-configmap.yaml index ba15e681d234c08a2a7fb8921964ad2a54c1fb7a..9fe92bc9e2aca14e59805388e4a723d85593d5fd 100644 --- a/helm/dbrepo/templates/dashboard-ui-configmap.yaml +++ b/helm/dbrepo/templates/dashboard-ui-configmap.yaml @@ -6,8 +6,9 @@ metadata: name: dashboard-ui-config namespace: {{ include "common.names.namespace" . | quote }} data: - {{ (.Files.Glob "files/mariadb.json").AsConfig | nindent 2 }} - {{ (.Files.Glob "files/rabbitmq.json").AsConfig | nindent 2 }} {{ (.Files.Glob "files/dbrepo.json").AsConfig | nindent 2 }} {{ (.Files.Glob "files/keycloak.json").AsConfig | nindent 2 }} + {{ (.Files.Glob "files/logging.json").AsConfig | nindent 2 }} + {{ (.Files.Glob "files/mariadb.json").AsConfig | nindent 2 }} + {{ (.Files.Glob "files/rabbitmq.json").AsConfig | nindent 2 }} {{- end }} diff --git a/helm/dbrepo/templates/dashboard-ui-datasources-secret.yaml b/helm/dbrepo/templates/dashboard-ui-datasources-secret.yaml index 5ce6c299e9094bb14500df16ad53e428034a4e33..8a21a20db8dd41dad8f36174cf23ca5420562a60 100644 --- a/helm/dbrepo/templates/dashboard-ui-datasources-secret.yaml +++ b/helm/dbrepo/templates/dashboard-ui-datasources-secret.yaml @@ -30,4 +30,18 @@ stringData: type: prometheus uid: dbrepometrics0 url: http://metric-db-server + opensearch.yaml: |- + apiVersion: 1 + datasources: + - name: dbrepo-opensearch + uid: dbrepoopensearch0 + type: grafana-opensearch-datasource + basicAuth: false + url: http://search-db:9200 + jsonData: + flavor: "opensearch" + logLevelField: "level" + logMessageField: "message" + timeField: "@timestamp" + version: "2.19.0" {{- end }} diff --git a/helm/dbrepo/templates/data-configmap.yaml b/helm/dbrepo/templates/data-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8d9d4b6334a90101e8c348afe6c1c8243697bdcf --- /dev/null +++ b/helm/dbrepo/templates/data-configmap.yaml @@ -0,0 +1,15 @@ +{{- if .Values.dataservice.enabled }} +{{- if .Values.global.loggingSidecar.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: data-service-config + namespace: {{ include "common.names.namespace" . | quote }} +data: + fluent-bit.conf: |- + {{- include "dbrepo.logging.sidecarOpensearchService" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchInput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchOutput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarMetricsOutput" . | nindent 4 }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/data-deployment.yaml b/helm/dbrepo/templates/data-deployment.yaml index 7e77d2020e39a877b6d0165452adcf25f2b34eba..6a2a1be15eff868a283fb973856a58cc7f3d3b01 100644 --- a/helm/dbrepo/templates/data-deployment.yaml +++ b/helm/dbrepo/templates/data-deployment.yaml @@ -18,6 +18,10 @@ spec: service: data-service template: metadata: + annotations: + {{- if .Values.dataservice.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.dataservice.podAnnotations "context" $) | nindent 8 }} + {{- end }} labels: app: data-service service: data-service @@ -35,6 +39,9 @@ spec: ports: - containerPort: 8080 protocol: TCP + volumeMounts: + - name: empty-dir + mountPath: /var/log/app/service/data envFrom: - secretRef: name: data-service-secret @@ -59,4 +66,37 @@ spec: {{- else if ne .Values.dataservice.resourcesPreset "none" }} resources: {{- include "common.resources.preset" (dict "type" .Values.dataservice.resourcesPreset) | nindent 12 }} {{- end }} + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-agent + image: {{ .Values.global.loggingSidecar.image.name }} + imagePullPolicy: {{ .Values.metadataservice.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.metadataservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.metadataservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + volumeMounts: + - name: logging-config + mountPath: /opt/bitnami/fluent-bit/conf/fluent-bit.conf + subPath: fluent-bit.conf + - name: empty-dir + mountPath: /var/log/app/service/data + livenessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 150 + periodSeconds: 10 + readinessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: {{- include "common.resources.preset" (dict "type" .Values.global.loggingSidecar.resourcesPreset) | nindent 12 }} + {{- end }} + volumes: + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-config + configMap: + name: data-service-config + {{- end }} + - name: empty-dir + emptyDir: { } {{- end }} diff --git a/helm/dbrepo/templates/gateway-configmap.yaml b/helm/dbrepo/templates/gateway-configmap.yaml index 3f500f0d9b0683e427e86a45a6d988900b5d9cbd..e92ccaab9a23b78c21c65a0e63419cb1bf34c281 100644 --- a/helm/dbrepo/templates/gateway-configmap.yaml +++ b/helm/dbrepo/templates/gateway-configmap.yaml @@ -1,201 +1,22 @@ {{- if .Values.gatewayservice.enabled }} +{{- if .Values.global.loggingSidecar.enabled }} apiVersion: v1 kind: ConfigMap metadata: name: gateway-service-config namespace: {{ include "common.names.namespace" . | quote }} data: - dbrepo.conf: |- - # This is required to proxy Grafana Live WebSocket connections. - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - proxy_buffer_size 128k; - proxy_buffers 4 256k; - proxy_busy_buffers_size 256k; - - server { - listen 8080 default_server; - server_name _; - - location /assets/ { - root /app/assets; - expires max; - access_log off; - autoindex on; - autoindex_exact_size off; - autoindex_format html; - autoindex_localtime on; - } - - location /dashboard/ { - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://dashboard-ui:3000/; - proxy_read_timeout 90; - } - - # Proxy Grafana Live WebSocket connections. - location /dashboard/api/live/ws { - rewrite ^/dashboard/(.*) /$1 break; - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $connection_upgrade; - proxy_http_version 1.1; - proxy_pass http://dashboard-ui:3000/; - proxy_read_timeout 90; - } - - # Proxy Keycloak OIDC connections, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations - location /realms { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://auth-service; - proxy_read_timeout 90; - } - - # Proxy Keycloak assets, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations - location /resources { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://auth-service; - proxy_read_timeout 90; - } - - location /api/search { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://search-service; - proxy_read_timeout 90; - } - - location /api/datasource { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://dashboard-service; - proxy_read_timeout 90; - } - - location /api/dashboard { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://dashboard-service; - proxy_read_timeout 90; - } - - location /api/upload { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Host $host; - proxy_pass http://data-service; - proxy_read_timeout 90; - # Disable request and response buffering - proxy_request_buffering off; - proxy_buffering off; - proxy_http_version 1.1; - } - - location /api/analyse { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://analyse-service; - proxy_read_timeout 90; - } - - location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/table/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic|history)" { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://data-service; - proxy_read_timeout 90; - } - - location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic)" { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://data-service; - proxy_read_timeout 90; - } - - location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view" { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata-service; - proxy_read_timeout 90; - } - - location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/subset" { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://data-service; - proxy_read_timeout 600; - } - - location ~ "/api/(database|concept|container|identifier|image|message|license|oai|ontology|unit|user)" { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata-service; - proxy_read_timeout 90; - } - - location ~ "/api/identifier/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata-service; - proxy_read_timeout 90; - } - - location ~ "/pid/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { - rewrite /pid/(.*) /api/identifier/$1 break; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://metadata-service; - proxy_read_timeout 90; - } - - location / { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://ui; - proxy_read_timeout 90; - } - } + fluent-bit.conf: |- + {{- include "dbrepo.logging.sidecarOpensearchService" . | nindent 4 }} + [INPUT] + Name tail + Tag * + Path /var/log/nginx/*.log + Parser docker + Mem_Buf_Limit 5MB + Buffer_Chunk_size 32k + Buffer_Max_size 32k + {{- include "dbrepo.logging.sidecarOpensearchOutput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarMetricsOutput" . | nindent 4 }} +{{- end }} {{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/gateway-serverblock-configmap.yaml b/helm/dbrepo/templates/gateway-serverblock-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2a50958d9d7edf6c78322fd0299e41b14df43e53 --- /dev/null +++ b/helm/dbrepo/templates/gateway-serverblock-configmap.yaml @@ -0,0 +1,9 @@ +{{- if .Values.gatewayservice.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: gateway-service-setup + namespace: {{ include "common.names.namespace" . | quote }} +data: + {{ (.Files.Glob "files/dbrepo.conf").AsConfig | nindent 2 }} +{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/identity-statefulset.yaml b/helm/dbrepo/templates/identity-statefulset.yaml index 57b3dd7c328b6cc24caf2df59c1bde970065c26d..4c1d9b3f29a66e55af1738fd1050ebf56b3a1510 100644 --- a/helm/dbrepo/templates/identity-statefulset.yaml +++ b/helm/dbrepo/templates/identity-statefulset.yaml @@ -16,6 +16,10 @@ spec: service: identity-service template: metadata: + annotations: + {{- if .Values.identityservice.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.identityservice.podAnnotations "context" $) | nindent 8 }} + {{- end }} labels: app: identity-service service: identity-service diff --git a/helm/dbrepo/templates/metadata-configmap.yaml b/helm/dbrepo/templates/metadata-configmap.yaml index e837c8072ada18d0bb9a364456834bfaecc3e697..4d4960aa62bad21dcccdbc26039e4b8f6bfa4e5d 100644 --- a/helm/dbrepo/templates/metadata-configmap.yaml +++ b/helm/dbrepo/templates/metadata-configmap.yaml @@ -1,24 +1,15 @@ -{{- if .Values.metadatadb.enabled }} ---- +{{- if .Values.metadataservice.enabled }} +{{- if .Values.global.loggingSidecar.enabled }} apiVersion: v1 kind: ConfigMap metadata: - name: metadata-db-config + name: metadata-service-config namespace: {{ include "common.names.namespace" . | quote }} data: - {{- with .Values.metadatadb.extraInitDbScripts }} - {{ toYaml . | nindent 2 }} - {{- end }} - {{ (.Files.Glob "files/01-setup-schema.sql").AsConfig | nindent 2 }} - 02-setup-data.sql: |- - BEGIN; - INSERT INTO `mdb_containers` (id, name, internal_name, image_id, host, port, ui_host, ui_port, privileged_username, - privileged_password, readonly_username, readonly_password) - VALUES ('6cfb3b8e-1792-4e46-871a-f3d103527203', 'mariadb:11.1.3-debian-11-r6', 'mariadb_11_1_3', - 'd79cb089-363c-488b-9717-649e44d8fcc5', 'data-db', {{ .Values.datadb.containerPorts.mysql }}, - '{{ .Values.hostname }}', {{ .Values.datadb.containerPorts.mysql }}, '{{ .Values.datadb.rootUser.user }}', - '{{ .Values.datadb.rootUser.password }}', '{{ .Values.datadb.db.user }}', - '{{ .Values.datadb.db.password }}'); - COMMIT; - {{ (.Files.Glob "files/my.cnf").AsConfig | nindent 2 }} + fluent-bit.conf: |- + {{- include "dbrepo.logging.sidecarOpensearchService" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchInput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchOutput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarMetricsOutput" . | nindent 4 }} {{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/metadata-db-configmap.yaml b/helm/dbrepo/templates/metadata-db-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..09fa8a566157890d788d661228fe45620eb83436 --- /dev/null +++ b/helm/dbrepo/templates/metadata-db-configmap.yaml @@ -0,0 +1,23 @@ +{{- if .Values.metadatadb.enabled }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: metadata-db-config + namespace: {{ include "common.names.namespace" . | quote }} +data: + {{- with .Values.metadatadb.extraInitDbScripts }} + {{ toYaml . | nindent 2 }} + {{- end }} + {{ (.Files.Glob "files/01-setup-schema.sql").AsConfig | nindent 2 }} + 02-setup-data.sql: |- + BEGIN; + INSERT INTO `mdb_containers` (id, name, internal_name, image_id, host, port, ui_host, ui_port, privileged_username, + privileged_password, readonly_username, readonly_password) + VALUES ('6cfb3b8e-1792-4e46-871a-f3d103527203', 'mariadb:11.1.3-debian-11-r6', 'mariadb_11_1_3', + 'd79cb089-363c-488b-9717-649e44d8fcc5', 'data-db', {{ .Values.datadb.containerPorts.mysql }}, + '{{ .Values.hostname }}', {{ .Values.datadb.containerPorts.mysql }}, '{{ .Values.datadb.rootUser.user }}', + '{{ .Values.datadb.rootUser.password }}', '{{ .Values.datadb.db.user }}', + '{{ .Values.datadb.db.password }}'); + COMMIT; +{{- end }} diff --git a/helm/dbrepo/templates/metadata-deployment.yaml b/helm/dbrepo/templates/metadata-deployment.yaml index f5f27378e1d88c2ee59743a5d2dbbcbe110e0235..c175341703aff14dd07b76b6e9753442d42d2409 100644 --- a/helm/dbrepo/templates/metadata-deployment.yaml +++ b/helm/dbrepo/templates/metadata-deployment.yaml @@ -18,6 +18,10 @@ spec: service: metadata-service template: metadata: + annotations: + {{- if .Values.metadataservice.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.metadataservice.podAnnotations "context" $) | nindent 8 }} + {{- end }} labels: app: metadata-service service: metadata-service @@ -35,6 +39,9 @@ spec: ports: - containerPort: 8080 protocol: TCP + volumeMounts: + - name: empty-dir + mountPath: /var/log/app/service/metadata envFrom: - secretRef: name: metadata-service-secret @@ -59,4 +66,37 @@ spec: {{- else if ne .Values.metadataservice.resourcesPreset "none" }} resources: {{- include "common.resources.preset" (dict "type" .Values.metadataservice.resourcesPreset) | nindent 12 }} {{- end }} + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-agent + image: {{ .Values.global.loggingSidecar.image.name }} + imagePullPolicy: {{ .Values.metadataservice.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.metadataservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.metadataservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + volumeMounts: + - name: logging-config + mountPath: /opt/bitnami/fluent-bit/conf/fluent-bit.conf + subPath: fluent-bit.conf + - name: empty-dir + mountPath: /var/log/app/service/metadata + livenessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 150 + periodSeconds: 10 + readinessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: {{- include "common.resources.preset" (dict "type" .Values.global.loggingSidecar.resourcesPreset) | nindent 12 }} + {{- end }} + volumes: + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-config + configMap: + name: metadata-service-config + {{- end }} + - name: empty-dir + emptyDir: { } {{- end }} diff --git a/helm/dbrepo/templates/metadata-setup-configmap.yaml b/helm/dbrepo/templates/metadata-setup-configmap.yaml deleted file mode 100644 index 608f1d13e162665464faeaf3eaa789834f6a8429..0000000000000000000000000000000000000000 --- a/helm/dbrepo/templates/metadata-setup-configmap.yaml +++ /dev/null @@ -1,19 +0,0 @@ -{{- if .Values.metadatadb.enabled }} ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: metadata-db-setup - namespace: {{ include "common.names.namespace" . | quote }} -data: - {{- with .Values.metadatadb.extraInitDbScripts }} - {{ toYaml . | nindent 2 }} - {{- end }} - {{ (.Files.Glob "files/01-setup-schema.sql").AsConfig | nindent 2 }} - 02-setup-data.sql: | - BEGIN; - INSERT INTO `mdb_containers` (name, internal_name, image_id, host, port, privileged_username, privileged_password) - VALUES ('mariadb-galera:11.3.2-debian-12-r9', 'mariadb-galera:11.3.2-debian-12-r9', 1, 'data-db', 3306, '{{ .Values.datadb.rootUser.user }}', '{{ .Values.datadb.rootUser.password }}'); - COMMIT; - {{ (.Files.Glob "files/my.cnf").AsConfig | nindent 2 }} -{{- end }} diff --git a/helm/dbrepo/templates/search-configmap.yaml b/helm/dbrepo/templates/search-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..407d7ee90ec6a297b0be728eaba6a68ec22b9b1a --- /dev/null +++ b/helm/dbrepo/templates/search-configmap.yaml @@ -0,0 +1,15 @@ +{{- if .Values.searchservice.enabled }} +{{- if .Values.global.loggingSidecar.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: search-service-config + namespace: {{ include "common.names.namespace" . | quote }} +data: + fluent-bit.conf: |- + {{- include "dbrepo.logging.sidecarOpensearchService" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchInput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarOpensearchOutput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarMetricsOutput" . | nindent 4 }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/search-deployment.yaml b/helm/dbrepo/templates/search-deployment.yaml index 98908f0c4202f31fdbf9e0915a1eeaea866193ad..cdaddbafe0283cdeaf7c12df929c5b9bdf915f81 100644 --- a/helm/dbrepo/templates/search-deployment.yaml +++ b/helm/dbrepo/templates/search-deployment.yaml @@ -18,6 +18,10 @@ spec: service: search-service template: metadata: + annotations: + {{- if .Values.searchservice.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.searchservice.podAnnotations "context" $) | nindent 8 }} + {{- end }} labels: app: search-service service: search-service @@ -25,21 +29,6 @@ spec: {{- if .Values.searchservice.podSecurityContext.enabled }} securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.searchservice.podSecurityContext "context" $) | nindent 8 }} {{- end }} - initContainers: - - name: init - image: {{ .Values.searchservice.init.image.name }} - imagePullPolicy: {{ .Values.searchservice.init.image.pullPolicy | default "IfNotPresent" }} - {{- if .Values.searchservice.containerSecurityContext.enabled }} - securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.searchservice.containerSecurityContext "context" $) | nindent 12 }} - {{- end }} - envFrom: - - secretRef: - name: search-service-secret - {{- if .Values.searchservice.init.resources }} - resources: {{- toYaml .Values.searchservice.init.resources | nindent 12 }} - {{- else if ne .Values.searchservice.init.resourcesPreset "none" }} - resources: {{- include "common.resources.preset" (dict "type" .Values.searchservice.init.resourcesPreset) | nindent 12 }} - {{- end }} containers: - name: search-service image: {{ .Values.searchservice.image.name }} @@ -54,8 +43,10 @@ spec: - secretRef: name: search-service-secret volumeMounts: - - mountPath: /tmp - name: cache + - name: empty-dir + mountPath: /tmp + - name: empty-dir + mountPath: /var/log/app/service/search livenessProbe: exec: command: @@ -77,8 +68,37 @@ spec: {{- else if ne .Values.searchservice.resourcesPreset "none" }} resources: {{- include "common.resources.preset" (dict "type" .Values.searchservice.resourcesPreset) | nindent 12 }} {{- end }} + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-agent + image: {{ .Values.global.loggingSidecar.image.name }} + imagePullPolicy: {{ .Values.searchservice.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.searchservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.searchservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + volumeMounts: + - name: logging-config + mountPath: /opt/bitnami/fluent-bit/conf/fluent-bit.conf + subPath: fluent-bit.conf + - name: empty-dir + mountPath: /var/log/app/service/search + livenessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 150 + periodSeconds: 10 + readinessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: {{- include "common.resources.preset" (dict "type" .Values.global.loggingSidecar.resourcesPreset) | nindent 12 }} + {{- end }} volumes: - - name: cache - emptyDir: - sizeLimit: 100Mi + {{- if .Values.global.loggingSidecar.enabled }} + - name: logging-config + configMap: + name: search-service-config + {{- end }} + - name: empty-dir + emptyDir: { } {{- end }} diff --git a/helm/dbrepo/templates/search-setup-job.yaml b/helm/dbrepo/templates/search-setup-job.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4c01e19e0f54378f699be94627d63d96a10fd632 --- /dev/null +++ b/helm/dbrepo/templates/search-setup-job.yaml @@ -0,0 +1,49 @@ +{{- if .Values.searchservice.enabled }} +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: search-service-setup-job + namespace: {{ include "common.names.namespace" . | quote }} +spec: + backoffLimit: {{ .Values.searchservice.setupJob.backoffLimit | default "10" }} + template: + metadata: + name: search-service-setup-job + spec: + restartPolicy: OnFailure + containers: + - name: init + image: {{ .Values.searchservice.setupJob.image.name }} + imagePullPolicy: {{ .Values.searchservice.setupJob.image.pullPolicy | default "IfNotPresent" }} + {{- if .Values.searchservice.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.searchservice.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + envFrom: + - secretRef: + name: search-service-secret + volumeMounts: + - name: empty-dir + mountPath: /var/log/app/service/search + {{- if .Values.searchservice.setupJob.resources }} + resources: {{- toYaml .Values.searchservice.setupJob.resources | nindent 12 }} + {{- else if ne .Values.searchservice.setupJob.resourcesPreset "none" }} + resources: {{- include "common.resources.preset" (dict "type" .Values.searchservice.setupJob.resourcesPreset) | nindent 12 }} + {{- end }} + volumes: + - name: empty-dir + emptyDir: { } +{{- end }} diff --git a/helm/dbrepo/templates/storage-configmap.yaml b/helm/dbrepo/templates/storage-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c3d2469e069e029ec4f1efef8fa3cce190d466c0 --- /dev/null +++ b/helm/dbrepo/templates/storage-configmap.yaml @@ -0,0 +1,26 @@ +{{- if .Values.storageservice.setupJob.enabled }} +{{- if .Values.global.loggingSidecar.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: storage-service-config + namespace: {{ include "common.names.namespace" . | quote }} +data: + fluent-bit.conf: |- + [SERVICE] + Flush 5 + Daemon Off + Log_Level debug + Parsers_File /opt/bitnami/fluent-bit/conf/parsers.conf + [INPUT] + Name tail + Tag * + Path /var/log/app/service/*/*.log + Parser docker + Mem_Buf_Limit 5MB + Buffer_Chunk_size 32k + Buffer_Max_size 32k + {{- include "dbrepo.logging.sidecarOpensearchOutput" . | nindent 4 }} + {{- include "dbrepo.logging.sidecarMetricsOutput" . | nindent 4 }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/helm/dbrepo/templates/storage-secret.yaml b/helm/dbrepo/templates/storage-secret.yaml index 452baecbf9480295e86fcc3975ab62996431f52c..7df792fc4bd371571ec168250f64e5dce749c690 100644 --- a/helm/dbrepo/templates/storage-secret.yaml +++ b/helm/dbrepo/templates/storage-secret.yaml @@ -7,7 +7,7 @@ metadata: namespace: {{ include "common.names.namespace" . | quote }} stringData: S3_BUCKET: "{{ .Values.storageservice.s3.bucket }}" - STORAGE_ENDPOINT: "{{ .Values.storageservice.init.s3.endpoint }}" + STORAGE_ENDPOINT: "{{ .Values.storageservice.setupJob.s3.endpoint }}" admin_access_key_id: "{{ .Values.storageservice.s3.auth.adminAccessKeyId }}" admin_secret_access_key: "{{ .Values.storageservice.s3.auth.adminSecretAccessKey }}" read_access_key_id: "{{ .Values.storageservice.s3.auth.readAccessKeyId }}" diff --git a/helm/dbrepo/templates/storage-job.yaml b/helm/dbrepo/templates/storage-setup-job.yaml similarity index 71% rename from helm/dbrepo/templates/storage-job.yaml rename to helm/dbrepo/templates/storage-setup-job.yaml index ebc26f22125a10e94d910e0b385729b10b0c3c19..69845b1846deed121c66587413d611ba834b6d9d 100644 --- a/helm/dbrepo/templates/storage-job.yaml +++ b/helm/dbrepo/templates/storage-setup-job.yaml @@ -6,7 +6,7 @@ metadata: name: storage-service-setup-job namespace: {{ include "common.names.namespace" . | quote }} spec: - backoffLimit: {{ .Values.storageservice.init.backoffLimit | default "10" }} + backoffLimit: {{ .Values.storageservice.setupJob.backoffLimit | default "10" }} template: metadata: name: storage-service-setup-job @@ -14,8 +14,8 @@ spec: restartPolicy: OnFailure containers: - name: init - image: {{ .Values.storageservice.init.image.name }} - imagePullPolicy: {{ .Values.storageservice.init.image.pullPolicy | default "IfNotPresent" }} + image: {{ .Values.storageservice.setupJob.image.name }} + imagePullPolicy: {{ .Values.storageservice.setupJob.image.pullPolicy | default "IfNotPresent" }} env: - name: POD_IP valueFrom: @@ -50,14 +50,14 @@ spec: name: storage-service-secret key: STORAGE_ENDPOINT volumeMounts: - - name: app-cache + - name: empty-dir mountPath: /app/config - {{- if .Values.storageservice.init.resources }} - resources: {{- toYaml .Values.storageservice.init.resources | nindent 12 }} - {{- else if ne .Values.storageservice.init.resourcesPreset "none" }} - resources: {{- include "common.resources.preset" (dict "type" .Values.storageservice.init.resourcesPreset) | nindent 12 }} + {{- if .Values.storageservice.setupJob.resources }} + resources: {{- toYaml .Values.storageservice.setupJob.resources | nindent 12 }} + {{- else if ne .Values.storageservice.setupJob.resourcesPreset "none" }} + resources: {{- include "common.resources.preset" (dict "type" .Values.storageservice.setupJob.resourcesPreset) | nindent 12 }} {{- end }} volumes: - - name: app-cache - emptyDir: {} + - name: empty-dir + emptyDir: { } {{- end }} diff --git a/helm/dbrepo/templates/ui-deployment.yaml b/helm/dbrepo/templates/ui-deployment.yaml index 512b3f403f8f18a4949de2c6b8d835f894da46a9..32e2f5905ff9e955a2ca93fafb7824b83b49d969 100644 --- a/helm/dbrepo/templates/ui-deployment.yaml +++ b/helm/dbrepo/templates/ui-deployment.yaml @@ -18,6 +18,10 @@ spec: service: ui template: metadata: + annotations: + {{- if .Values.ui.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.ui.podAnnotations "context" $) | nindent 8 }} + {{- end }} labels: app: ui service: ui diff --git a/helm/dbrepo/templates/ui-service.yaml b/helm/dbrepo/templates/ui-service.yaml index 1ec140db603c075948b18cf933e2f5f322ac6aae..1f4fc63a133f0b3a2cab0241062e07d558270548 100644 --- a/helm/dbrepo/templates/ui-service.yaml +++ b/helm/dbrepo/templates/ui-service.yaml @@ -11,7 +11,7 @@ spec: type: ClusterIP ports: - name: "" - port: 80 + port: 3000 targetPort: 3000 protocol: TCP selector: diff --git a/helm/dbrepo/values.schema.json b/helm/dbrepo/values.schema.json index bd549d45cdecbd222353e809b8bcb20defba5c61..141dd1b385a6c05c1b94006223093b92eb8d15be 100644 --- a/helm/dbrepo/values.schema.json +++ b/helm/dbrepo/values.schema.json @@ -63,6 +63,10 @@ }, "type": "object" }, + "podAnnotations": { + "properties": {}, + "type": "object" + }, "podSecurityContext": { "properties": { "enabled": { @@ -126,7 +130,7 @@ "endpoint": { "type": "string" }, - "extraEnvVarsCM": { + "extraEnvVarsSecret": { "type": "string" }, "extraVolumeMounts": { @@ -157,14 +161,6 @@ }, "type": "object" }, - "emptyDir": { - "properties": { - "sizeLimit": { - "type": "string" - } - }, - "type": "object" - }, "name": { "type": "string" } @@ -301,6 +297,39 @@ "extraPlugins": { "type": "string" }, + "extraVolumeMounts": { + "items": { + "properties": { + "mountPath": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "extraVolumes": { + "items": { + "properties": { + "configMap": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, "fullnameOverride": { "type": "string" }, @@ -361,15 +390,10 @@ }, "type": "object" }, - "metrics": { - "properties": { - "enabled": { - "type": "boolean" - } - }, - "type": "object" + "logs": { + "type": "string" }, - "persistence": { + "metrics": { "properties": { "enabled": { "type": "boolean" @@ -415,16 +439,158 @@ "type": "object" }, "type": "array" - }, - "managerPortEnabled": { - "type": "boolean" - }, - "type": { - "type": "string" } }, "type": "object" }, + "sidecars": { + "items": { + "properties": { + "image": { + "type": "string" + }, + "imagePullPolicy": { + "type": "string" + }, + "livenessProbe": { + "properties": { + "httpGet": { + "properties": { + "port": { + "type": "integer" + } + }, + "type": "object" + }, + "initialDelaySeconds": { + "type": "integer" + }, + "periodSeconds": { + "type": "integer" + } + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "readinessProbe": { + "properties": { + "httpGet": { + "properties": { + "port": { + "type": "integer" + } + }, + "type": "object" + }, + "initialDelaySeconds": { + "type": "integer" + }, + "periodSeconds": { + "type": "integer" + } + }, + "type": "object" + }, + "resources": { + "properties": { + "limits": { + "properties": { + "cpu": { + "type": "string" + }, + "ephemeral-storage": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + }, + "requests": { + "properties": { + "cpu": { + "type": "string" + }, + "ephemeral-storage": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "securityContext": { + "properties": { + "allowPrivilegeEscalation": { + "type": "boolean" + }, + "capabilities": { + "properties": { + "drop": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "readOnlyRootFilesystem": { + "type": "boolean" + }, + "runAsGroup": { + "type": "integer" + }, + "runAsNonRoot": { + "type": "boolean" + }, + "runAsUser": { + "type": "integer" + }, + "seLinuxOptions": { + "properties": {}, + "type": "object" + }, + "seccompProfile": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "volumeMounts": { + "items": { + "properties": { + "mountPath": { + "type": "string" + }, + "name": { + "type": "string" + }, + "subPath": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, "virtualHost": { "type": "string" } @@ -540,24 +706,8 @@ }, "type": "object" }, - "init": { - "properties": { - "image": { - "properties": { - "name": { - "type": "string" - } - }, - "type": "object" - }, - "resources": { - "properties": {}, - "type": "object" - }, - "resourcesPreset": { - "type": "string" - } - }, + "podAnnotations": { + "properties": {}, "type": "object" }, "podSecurityContext": { @@ -589,6 +739,29 @@ }, "resourcesPreset": { "type": "string" + }, + "setupJob": { + "properties": { + "enabled": { + "type": "boolean" + }, + "image": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "resources": { + "properties": {}, + "type": "object" + }, + "resourcesPreset": { + "type": "string" + } + }, + "type": "object" } }, "type": "object" @@ -856,6 +1029,10 @@ }, "type": "object" }, + "podAnnotations": { + "properties": {}, + "type": "object" + }, "podSecurityContext": { "properties": { "enabled": { @@ -950,6 +1127,39 @@ "existingServerBlockConfigmap": { "type": "string" }, + "extraVolumeMounts": { + "items": { + "properties": { + "mountPath": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "extraVolumes": { + "items": { + "properties": { + "configMap": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, "fullnameOverride": { "type": "string" }, @@ -971,6 +1181,154 @@ } }, "type": "object" + }, + "sidecars": { + "items": { + "properties": { + "image": { + "type": "string" + }, + "imagePullPolicy": { + "type": "string" + }, + "livenessProbe": { + "properties": { + "httpGet": { + "properties": { + "port": { + "type": "integer" + } + }, + "type": "object" + }, + "initialDelaySeconds": { + "type": "integer" + }, + "periodSeconds": { + "type": "integer" + } + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "readinessProbe": { + "properties": { + "httpGet": { + "properties": { + "port": { + "type": "integer" + } + }, + "type": "object" + }, + "initialDelaySeconds": { + "type": "integer" + }, + "periodSeconds": { + "type": "integer" + } + }, + "type": "object" + }, + "resources": { + "properties": { + "limits": { + "properties": { + "cpu": { + "type": "string" + }, + "ephemeral-storage": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + }, + "requests": { + "properties": { + "cpu": { + "type": "string" + }, + "ephemeral-storage": { + "type": "string" + }, + "memory": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "securityContext": { + "properties": { + "allowPrivilegeEscalation": { + "type": "boolean" + }, + "capabilities": { + "properties": { + "drop": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "readOnlyRootFilesystem": { + "type": "boolean" + }, + "runAsGroup": { + "type": "integer" + }, + "runAsNonRoot": { + "type": "boolean" + }, + "runAsUser": { + "type": "integer" + }, + "seLinuxOptions": { + "properties": {}, + "type": "object" + }, + "seccompProfile": { + "properties": { + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "volumeMounts": { + "items": { + "properties": { + "mountPath": { + "type": "string" + }, + "name": { + "type": "string" + }, + "subPath": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" } }, "type": "object" @@ -990,6 +1348,25 @@ }, "type": "object" }, + "loggingSidecar": { + "properties": { + "enabled": { + "type": "boolean" + }, + "image": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "resourcesPreset": { + "type": "string" + } + }, + "type": "object" + }, "storageClass": { "type": "string" } @@ -1100,6 +1477,10 @@ }, "type": "object" }, + "podAnnotations": { + "properties": {}, + "type": "object" + }, "podSecurityContext": { "properties": { "enabled": { @@ -1164,9 +1545,6 @@ }, "metadatadb": { "properties": { - "configurationConfigMap": { - "type": "string" - }, "db": { "properties": { "name": { @@ -1353,6 +1731,10 @@ }, "type": "object" }, + "podAnnotations": { + "properties": {}, + "type": "object" + }, "podSecurityContext": { "properties": { "enabled": { @@ -1654,24 +2036,8 @@ }, "type": "object" }, - "init": { - "properties": { - "image": { - "properties": { - "name": { - "type": "string" - } - }, - "type": "object" - }, - "resources": { - "properties": {}, - "type": "object" - }, - "resourcesPreset": { - "type": "string" - } - }, + "podAnnotations": { + "properties": {}, "type": "object" }, "podSecurityContext": { @@ -1703,28 +2069,12 @@ }, "resourcesPreset": { "type": "string" - } - }, - "type": "object" - }, - "storageservice": { - "properties": { - "enabled": { - "type": "boolean" }, - "filer": { + "setupJob": { "properties": { "enabled": { "type": "boolean" - } - }, - "type": "object" - }, - "fullnameOverride": { - "type": "string" - }, - "init": { - "properties": { + }, "image": { "properties": { "name": { @@ -1739,17 +2089,28 @@ }, "resourcesPreset": { "type": "string" - }, - "s3": { - "properties": { - "endpoint": { - "type": "string" - } - }, - "type": "object" } }, "type": "object" + } + }, + "type": "object" + }, + "storageservice": { + "properties": { + "enabled": { + "type": "boolean" + }, + "filer": { + "properties": { + "enabled": { + "type": "boolean" + } + }, + "type": "object" + }, + "fullnameOverride": { + "type": "string" }, "mariadb": { "properties": { @@ -1822,6 +2183,37 @@ }, "type": "object" }, + "setupJob": { + "properties": { + "enabled": { + "type": "boolean" + }, + "image": { + "properties": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "resources": { + "properties": {}, + "type": "object" + }, + "resourcesPreset": { + "type": "string" + }, + "s3": { + "properties": { + "endpoint": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, "volume": { "properties": { "enabled": { @@ -1915,6 +2307,10 @@ }, "type": "object" }, + "podAnnotations": { + "properties": {}, + "type": "object" + }, "podSecurityContext": { "properties": { "enabled": { diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml index 9020cae3acf7577f65487504b81c139aecbd4c33..bffbc00c339d56115e82a6bda85e1c1d0e2d99f6 100644 --- a/helm/dbrepo/values.yaml +++ b/helm/dbrepo/values.yaml @@ -12,6 +12,14 @@ global: adaptSecurityContext: auto ## @param global.storageClass Global StorageClass for Persistent Volume(s) storageClass: "" + loggingSidecar: + ## @param global.loggingSidecar.enabled Enable the logging sidecars for the analyse-, dashboard-, data-, gateway-, metadata- and search service. + enabled: true + image: + ## @param global.loggingSidecar.image.name The logging sidecar image. + name: docker.io/bitnami/fluent-bit:4.0.0 + ## @param global.loggingSidecar.resourcesPreset The resource definitions for the logging sidecar. + resourcesPreset: nano ## @section Common parameters @@ -56,8 +64,6 @@ metadatadb: enabled: true ## @skip metadatadb.initdbScriptsConfigMap The initial database scripts. initdbScriptsConfigMap: metadata-db-config - ## @param metadatadb.configurationConfigMap The database configuration files. - configurationConfigMap: metadata-db-config ## @param metadatadb.extraInitDbScripts Additional init.db scripts that are executed on the first start. extraInitDbScripts: { } # 03-additional-data.sql: | @@ -65,13 +71,13 @@ metadatadb: # INSERT INTO `mdb_containers` (name, internal_name, image_id, host, port, sidecar_host, sidecar_port, privileged_username, privileged_password) # VALUES ('MariaDB Galera TEST', 'mariadb_11_1_3', 1, 'data-db', 3306, 'data-db', 80, 'root', 'dbrepo'); # COMMIT; - ## @param metadatadb.replicaCount The number of cluster nodes, should be uneven i.e. 2n+1 - replicaCount: 3 ## @param metadatadb.resourcesPreset The container resource preset resourcesPreset: "xlarge" persistence: ## @param metadatadb.persistence.enabled Enable persistent storage. enabled: true + ## @param metadatadb.replicaCount The number of cluster nodes, should be uneven i.e. 2n+1 + replicaCount: 1 ## @section Dashboard Database Enable the Dashboard Database. @@ -146,29 +152,24 @@ authservice: ## limits: ## cpu: 500m ## memory: 1024Mi - ## @skip authservice.extraEnvVarsCM - extraEnvVarsCM: auth-service-config + ## @skip authservice.extraEnvVarsSecret + extraEnvVarsSecret: auth-service-secret ## @skip authservice.extraVolumes extraVolumes: - - name: config-map + - name: config configMap: name: auth-service-config - - name: cache - emptyDir: - sizeLimit: 100Mi ## @skip authservice.extraVolumeMounts extraVolumeMounts: - - name: config-map + - name: config mountPath: /opt/keycloak/data/import/dbrepo-realm.json subPath: dbrepo-realm.json - - name: config-map + - name: config mountPath: /opt/keycloak/data/import/master-realm.json subPath: master-realm.json - - name: config-map + - name: config mountPath: /opt/bitnami/keycloak/providers/create-event-listener.jar subPath: create-event-listener.jar - - name: cache - mountPath: /bitnami/keycloak/ ## @skip authservice.replicaCount The number of replicas. replicaCount: 2 @@ -300,7 +301,7 @@ brokerservice: servers: - identity-service ## @skip brokerservice.ldap.port - port: 389 + port: 1389 ## @param brokerservice.ldap.binddn The domain name the broker service should bind to. In many cases this is the admin user from `identityservice.global.adminUser`. binddn: cn=admin,dc=dbrepo,dc=at ## @param brokerservice.ldap.bindpw The password to bind on the identity service. In many cases this value is equal to `identityservice.global.adminPassword`. @@ -330,23 +331,84 @@ brokerservice: existingSecret: broker-service-secret ## @param brokerservice.extraPlugins The list of plugins to be activated. extraPlugins: rabbitmq_prometheus rabbitmq_auth_backend_ldap rabbitmq_auth_mechanism_ssl rabbitmq_mqtt - persistence: - ## @param brokerservice.persistence.enabled If set to true, a PVC will be created. - enabled: false - ## @skip brokerservice.service service: - type: ClusterIP - managerPortEnabled: true + ## @skip brokerservice.service.extraPorts extraPorts: - name: mqtt port: 1883 targetPort: 1883 # loadBalancerIP: + ## @skip brokerservice.logs + logs: "" ## @param brokerservice.extraConfiguration The extra configuration for MQTT extraConfiguration: | + # https://www.rabbitmq.com/docs/logging#log-message-categories + log.connection.level = warning + log.file = /opt/bitnami/rabbitmq/var/log/rabbitmq/app.log + log.file.formatter = json + log.file.level = info + # rotate when the file reaches 10 MiB + log.file.rotation.size = 10485760 + # keep up to 5 archived log files in addition to the current one + log.file.rotation.count = 5 mqtt.vhost = dbrepo mqtt.exchange = dbrepo mqtt.prefetch = 10 + ## @skip brokerservice.sidecars + sidecars: + - name: logging-agent + image: docker.io/bitnami/fluent-bit:4.0.0 + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: false + runAsGroup: 1001 + runAsNonRoot: true + runAsUser: 1001 + seLinuxOptions: { } + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: logging-config + mountPath: /opt/bitnami/fluent-bit/conf/fluent-bit.conf + subPath: fluent-bit.conf + - name: logging-config + mountPath: /opt/bitnami/fluent-bit/conf/parsers.conf + subPath: parsers.conf + - name: empty-dir + mountPath: /opt/bitnami/rabbitmq/var/log/rabbitmq + subPath: app-logs-dir + livenessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 150 + periodSeconds: 10 + readinessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: + requests: + cpu: 100m + memory: 128Mi + ephemeral-storage: 50Mi + limits: + cpu: 150m + memory: 192Mi + ephemeral-storage: 2Gi + ## @skip brokerservice.extraVolumes + extraVolumes: + - name: logging-config + configMap: + name: broker-service-config + ## @skip brokerservice.extraVolumeMounts + extraVolumeMounts: + - name: logging-config + mountPath: /tmp/rabbitmq # irrelevant but needed from bitnami chart ## @param brokerservice.replicaCount The number of replicas. replicaCount: 1 @@ -358,6 +420,9 @@ analyseservice: image: ## @skip analyseservice.image.name name: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.8.2 + ## @param analyseservice.podAnnotations the pod annotations. Evaluated as a template + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + podAnnotations: { } ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param analyseservice.podSecurityContext.enabled Enable pods' Security Context @@ -419,6 +484,9 @@ metadataservice: image: ## @skip metadataservice.image.name name: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.8.2 + ## @param metadataservice.podAnnotations the pod annotations. Evaluated as a template + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + podAnnotations: { } ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param metadataservice.podSecurityContext.enabled Enable pods' Security Context @@ -516,6 +584,9 @@ dataservice: image: ## @skip dataservice.image.name name: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.8.2 + ## @param dataservice.podAnnotations the pod annotations. Evaluated as a template + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + podAnnotations: { } ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param dataservice.podSecurityContext.enabled Enable pods' Security Context @@ -602,6 +673,9 @@ searchservice: image: ## @skip searchservice.image.name name: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.8.2 + ## @param searchservice.podAnnotations the pod annotations. Evaluated as a template + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + podAnnotations: { } ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param searchservice.podSecurityContext.enabled Enable pods' Security Context @@ -645,13 +719,15 @@ searchservice: ## limits: ## cpu: 500m ## memory: 1024Mi - init: + setupJob: + ## @param searchservice.setupJob.enabled Enable the setup job that syncs missing databases from the Metadata Database into the Search Database. + enabled: true image: - ## @skip searchservice.init.image.name + ## @skip searchservice.setupJob.image.name name: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.8.2 - ## @param searchservice.init.resourcesPreset The container resource preset + ## @param searchservice.setupJob.resourcesPreset The container resource preset resourcesPreset: "nano" - ## @param searchservice.init.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) + ## @param searchservice.setupJob.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) resources: { } ## requests: ## cpu: 250m @@ -706,16 +782,18 @@ storageservice: readAccessKeyId: seaweedfsuser ## @param storageservice.s3.auth.readSecretAccessKey The S3 secret access key for the read only user. readSecretAccessKey: seaweedfsuser - init: + setupJob: + ## @param storageservice.setupJob.enabled Enable the setup job that creates the bucket in the s3 endpoint. + enabled: true image: - ## @skip storageservice.init.image.name + ## @skip storageservice.setupJob.image.name name: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.8.2 s3: - ## @param storageservice.init.s3.endpoint The S3-capable endpoint the microservice connects to. + ## @param storageservice.setupJob.s3.endpoint The S3-capable endpoint the microservice connects to. endpoint: http://storage-service-s3:8333 - ## @param storageservice.init.resourcesPreset The container resource preset + ## @param storageservice.setupJob.resourcesPreset The container resource preset resourcesPreset: "nano" - ## @param storageservice.init.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) + ## @param storageservice.setupJob.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) resources: { } ## requests: ## cpu: 250m @@ -741,6 +819,9 @@ identityservice: adminPassword: admin ## @skip identityservice.global.configUserEnabled configUserEnabled: false + ## @param identityservice.podAnnotations the pod annotations. Evaluated as a template + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + podAnnotations: { } ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param identityservice.podSecurityContext.enabled Enable pods' Security Context @@ -827,6 +908,9 @@ ui: sessionSecret: TjOH1lFnocixYmy5ol2I5cOdsYUdrd5_jZsGxo6aMVPNNDkh ## @param ui.oidc.tokenKey This needs to be a random cryptographic AES key in base64. Used to encrypt the server side token store. You can generate a key in JS with await subtle.exportKey('raw', await subtle.generateKey({ name: 'AES-GCM', length: 256, }, true, ['encrypt', 'decrypt'])). You just have to encode it to base64 afterwards. tokenKey: data:;base64,ntxOAfrF6yw22Ec1AFHK21iFz7L3PZmz9857Uqwyme0= + ## @param ui.podAnnotations the pod annotations. Evaluated as a template + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + podAnnotations: { } ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param ui.podSecurityContext.enabled Enable pods' Security Context @@ -939,6 +1023,9 @@ dashboardservice: name: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.8.2 ## @param dashboardservice.endpoint The endpoint for the microservices. endpoint: http://dashboard-service + ## @param dashboardservice.podAnnotations the pod annotations. Evaluated as a template + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + podAnnotations: { } ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param dashboardservice.podSecurityContext.enabled Enable pods' Security Context @@ -983,13 +1070,15 @@ dashboardservice: ## cpu: 500m ## memory: 1024Mi ## @param dashboardservice.replicaCount The number of replicas. - init: + setupJob: + ## @param dashboardservice.setupJob.enabled Enable the setup job that creates dashboards for existing databases in the Dashboard UI. + enabled: true image: - ## @skip dashboardservice.init.image.name + ## @skip dashboardservice.setupJob.image.name name: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service-init:1.8.2 - ## @param dashboardservice.init.resourcesPreset The container resource preset + ## @param dashboardservice.setupJob.resourcesPreset The container resource preset resourcesPreset: "nano" - ## @param dashboardservice.init.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) + ## @param dashboardservice.setupJob.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads) resources: { } ## requests: ## cpu: 250m @@ -1072,27 +1161,27 @@ metricdb: metrics_path: '/actuator/prometheus' static_configs: - targets: - - data-service - - metadata-service + - data-service + - metadata-service - job_name: 'metrics scrape' metrics_path: '/metrics' static_configs: - targets: - - analyse-service - - auth-service-metrics:9000 - - broker-service:9419 - - dashboard-db-metrics:9187 - - dashboard-service - - data-db-metrics:9104 - - metadata-db-metrics:9104 - - search-service - - storage-service-master-metrics:9327 - - ui + - analyse-service + - auth-service-metrics:9000 + - broker-service:9419 + - dashboard-db-metrics:9187 + - dashboard-service + - data-db-metrics:9104 + - metadata-db-metrics:9104 + - search-service + - storage-service-master-metrics:9327 + - ui:3000 - job_name: 'realm scrape' metrics_path: '/realms/dbrepo/metrics' static_configs: - targets: - - auth-service-metrics:8080 + - auth-service-metrics:8080 ## @section Gateway Service @@ -1108,7 +1197,60 @@ gatewayservice: ## @param gatewayservice.metrics.enabled Enable the Prometheus metrics sidecar. enabled: false ## @param gatewayservice.existingServerBlockConfigmap The extra configuration for the reverse proxy - existingServerBlockConfigmap: gateway-service-config + existingServerBlockConfigmap: gateway-service-setup + ## @skip gatewayservice.sidecars + sidecars: + - name: logging-agent + image: docker.io/bitnami/fluent-bit:4.0.0 + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: false + runAsGroup: 1001 + runAsNonRoot: true + runAsUser: 1001 + seLinuxOptions: { } + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: logging-config + mountPath: /opt/bitnami/fluent-bit/conf/fluent-bit.conf + subPath: fluent-bit.conf + - name: empty-dir + mountPath: /var/log/nginx/ + livenessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 150 + periodSeconds: 10 + readinessProbe: + httpGet: + port: 2021 + initialDelaySeconds: 30 + periodSeconds: 10 + resources: + requests: + cpu: 100m + memory: 128Mi + ephemeral-storage: 50Mi + limits: + cpu: 150m + memory: 192Mi + ephemeral-storage: 2Gi + ## @skip gatewayservice.extraVolumes + extraVolumes: + - name: logging-config + configMap: + name: gateway-service-config + ## @skip gatewayservice.extraVolumeMounts + extraVolumeMounts: + - name: empty-dir + mountPath: /var/log/nginx + - name: logging-config + mountPath: /app # irrelevant but needed from bitnami chart ## @param gatewayservice.replicaCount The number of replicas. replicaCount: 3 @@ -1118,6 +1260,7 @@ computeservice: ## @param computeservice.endpoint Configure the number of parallel workers with local[n] endpoint: local[2] + ## @section Ingress ingress: diff --git a/helm/seaweedfs/CHANGELOG.md b/helm/seaweedfs/CHANGELOG.md index e880917876b0c345b35c2706b379a006bc41de99..ac474a8e78abe8978ad2659e5267ecdccb43b6bb 100644 --- a/helm/seaweedfs/CHANGELOG.md +++ b/helm/seaweedfs/CHANGELOG.md @@ -1,8 +1,102 @@ # Changelog +## 4.8.7 (2025-05-07) + +* [bitnami/seaweedfs] Release 4.8.7 ([#33539](https://github.com/bitnami/charts/pull/33539)) + +## <small>4.8.6 (2025-05-06)</small> + +* [bitnami/seaweedfs] chore: :recycle: :arrow_up: Update common and remove k8s < 1.23 references (#334 ([3789e42](https://github.com/bitnami/charts/commit/3789e42484b6f398325c81a52f273d9218129b89)), closes [#33434](https://github.com/bitnami/charts/issues/33434) + +## <small>4.8.5 (2025-05-05)</small> + +* [bitnami/seaweedfs] Release 4.8.5 (#33315) ([af40402](https://github.com/bitnami/charts/commit/af40402b56235183cc899c55777c0267e0c50312)), closes [#33315](https://github.com/bitnami/charts/issues/33315) + +## <small>4.8.4 (2025-05-02)</small> + +* [bitnami/seaweedfs] Release 4.8.4 (#33300) ([6078309](https://github.com/bitnami/charts/commit/60783099201f5864d286b6da2f272c5c9bdfa1db)), closes [#33300](https://github.com/bitnami/charts/issues/33300) + +## <small>4.8.3 (2025-04-02)</small> + +* [bitnami/*] Add tanzuCategory annotation (#32409) ([a8fba5c](https://github.com/bitnami/charts/commit/a8fba5cb01f6f4464ca7f69c50b0fbe97d837a95)), closes [#32409](https://github.com/bitnami/charts/issues/32409) +* [bitnami/seaweedfs] Release 4.8.3 (#32763) ([e6f401a](https://github.com/bitnami/charts/commit/e6f401a180a1ba2452c52072192119442b72c8a5)), closes [#32763](https://github.com/bitnami/charts/issues/32763) + +## <small>4.8.2 (2025-03-10)</small> + +* [bitnami/seaweedfs]: fix README for loglevel (#31735) ([b537041](https://github.com/bitnami/charts/commit/b53704137dc1722164ee6cd3c60968bc7154abb3)), closes [#31735](https://github.com/bitnami/charts/issues/31735) + +## <small>4.8.1 (2025-03-05)</small> + +* [bitnami/seaweedfs] Release 4.8.1 (#32317) ([f248247](https://github.com/bitnami/charts/commit/f248247c983ac0c353a3ddc214dba911883b11a2)), closes [#32317](https://github.com/bitnami/charts/issues/32317) + +## 4.8.0 (2025-03-03) + +* [bitnami/seaweedfs] Add support for `s3.allowEmptyFolder` (#32234) ([ce208fa](https://github.com/bitnami/charts/commit/ce208faae53c07ca52f4f239604f37af7ae1786a)), closes [#32234](https://github.com/bitnami/charts/issues/32234) + +## 4.7.0 (2025-02-24) + +* [bitnami/seaweedfs] Set `usePasswordFiles=true` by default (#32119) ([dbc5cb6](https://github.com/bitnami/charts/commit/dbc5cb6ebacef3036f8bbb32ae1d761f171b8bdd)), closes [#32119](https://github.com/bitnami/charts/issues/32119) + +## <small>4.6.2 (2025-02-20)</small> + +* [bitnami/seaweedfs] Release 4.6.2 (#32035) ([efa99db](https://github.com/bitnami/charts/commit/efa99db7094cc5f19ec968634b5a87850c40cb73)), closes [#32035](https://github.com/bitnami/charts/issues/32035) + +## <small>4.6.1 (2025-02-12)</small> + +* [bitnami/*] Use CDN url for the Bitnami Application Icons (#31881) ([d9bb11a](https://github.com/bitnami/charts/commit/d9bb11a9076b9bfdcc70ea022c25ef50e9713657)), closes [#31881](https://github.com/bitnami/charts/issues/31881) +* [bitnami/seaweedfs] Release 4.6.1 (#31902) ([f15c5ed](https://github.com/bitnami/charts/commit/f15c5ed37c1829961a0ba4391809c524237382fb)), closes [#31902](https://github.com/bitnami/charts/issues/31902) +* [bitnami/seaweedfs]: correct typo in README (#31867) ([bb5c61b](https://github.com/bitnami/charts/commit/bb5c61b6fe4c89ac0b115b63ebed43b312f31809)), closes [#31867](https://github.com/bitnami/charts/issues/31867) + +## 4.6.0 (2025-02-05) + +* [bitnami/seaweedfs] Add support for log persistence (#31793) ([2561c2a](https://github.com/bitnami/charts/commit/2561c2aaba3b08507f1c10bdae3b933d74f01427)), closes [#31793](https://github.com/bitnami/charts/issues/31793) + +## <small>4.5.5 (2025-02-05)</small> + +* [bitnami/seaweedfs] Release 4.5.5 (#31779) ([db2813f](https://github.com/bitnami/charts/commit/db2813f08e07f03142c8acd5b587c47bf66a0057)), closes [#31779](https://github.com/bitnami/charts/issues/31779) + +## <small>4.5.4 (2025-02-03)</small> + +* [bitnami/seaweedfs] Release 4.5.4 (#31718) ([b4de2a7](https://github.com/bitnami/charts/commit/b4de2a7edbae2d1bba926a18ffc1415c39a5ca9d)), closes [#31718](https://github.com/bitnami/charts/issues/31718) + +## <small>4.5.3 (2025-02-03)</small> + +* [bitnami/seaweedfs] Release 4.5.3 (#31700) ([6752afa](https://github.com/bitnami/charts/commit/6752afab2f7805c38dfca3ab7e75afffcb0db3e7)), closes [#31700](https://github.com/bitnami/charts/issues/31700) +* Update copyright year (#31682) ([e9f02f5](https://github.com/bitnami/charts/commit/e9f02f5007068751f7eb2270fece811e685c99b6)), closes [#31682](https://github.com/bitnami/charts/issues/31682) + +## <small>4.5.2 (2025-01-24)</small> + +* [bitnami/seaweedfs] Release 4.5.2 (#31583) ([fd84724](https://github.com/bitnami/charts/commit/fd8472445476e56d22e2f54014e90d54fef780db)), closes [#31583](https://github.com/bitnami/charts/issues/31583) + +## <small>4.5.1 (2025-01-21)</small> + +* [bitnami/seaweedfs] Release 4.5.1 (#31490) ([97dae84](https://github.com/bitnami/charts/commit/97dae844ebf47a25522c0b7752595849ca3b711a)), closes [#31490](https://github.com/bitnami/charts/issues/31490) + +## 4.5.0 (2025-01-20) + +* [bitnami/seaweedfs]: add pod for `weed iam` (#31334) ([5f5a702](https://github.com/bitnami/charts/commit/5f5a70213129a814f4a0d4be92409b9fec9686a5)), closes [#31334](https://github.com/bitnami/charts/issues/31334) + +## <small>4.3.2 (2025-01-17)</small> + +* [bitnami/seaweedfs] Release 4.3.2 (#31443) ([942718e](https://github.com/bitnami/charts/commit/942718e8ec1eef14fcd63ebc11e2f2ce7a180c17)), closes [#31443](https://github.com/bitnami/charts/issues/31443) + +## <small>4.3.1 (2025-01-13)</small> + +* [bitnami/seaweedfs]: correct typo in values.yaml regarding s3.auth.existingSecret (#31339) ([31d0532](https://github.com/bitnami/charts/commit/31d0532a517bd0669b445e6974c2c5aace41697d)), closes [#31339](https://github.com/bitnami/charts/issues/31339) + +## 4.3.0 (2025-01-10) + +* [bitnami/seaweedfs] Make database check on start optional (#31277) ([ddb8a97](https://github.com/bitnami/charts/commit/ddb8a97d80c5bc87f2c33be751fbc35797f5f1be)), closes [#31277](https://github.com/bitnami/charts/issues/31277) + +## <small>4.2.1 (2025-01-07)</small> + +* [bitnami/*] Fix typo in README (#31052) ([b41a51d](https://github.com/bitnami/charts/commit/b41a51d1bd04841fc108b78d3b8357a5292771c8)), closes [#31052](https://github.com/bitnami/charts/issues/31052) +* [bitnami/seaweedfs] Release 4.2.1 (#31244) ([75fba5d](https://github.com/bitnami/charts/commit/75fba5d61dbf307dabd130d1ff3f621bb85320cc)), closes [#31244](https://github.com/bitnami/charts/issues/31244) + ## 4.2.0 (2024-12-10) -* [bitnami/seaweedfs] Detect non-standard images ([#30967](https://github.com/bitnami/charts/pull/30967)) +* [bitnami/*] Add Bitnami Premium to NOTES.txt (#30854) ([3dfc003](https://github.com/bitnami/charts/commit/3dfc00376df6631f0ce54b8d440d477f6caa6186)), closes [#30854](https://github.com/bitnami/charts/issues/30854) +* [bitnami/seaweedfs] Detect non-standard images (#30967) ([a4d9265](https://github.com/bitnami/charts/commit/a4d9265e61197d5ed5e6c4a0f85ce7460abd4a66)), closes [#30967](https://github.com/bitnami/charts/issues/30967) ## <small>4.1.2 (2024-12-04)</small> diff --git a/helm/seaweedfs/Chart.lock b/helm/seaweedfs/Chart.lock index 961967091af3ad7989746d89b7732777a6f6f7b0..039c66b559f25f3801a766a9bb074a20eb722fda 100644 --- a/helm/seaweedfs/Chart.lock +++ b/helm/seaweedfs/Chart.lock @@ -1,12 +1,12 @@ dependencies: - name: mariadb repository: oci://registry-1.docker.io/bitnamicharts - version: 20.5.3 + version: 20.5.5 - name: postgresql repository: oci://registry-1.docker.io/bitnamicharts - version: 16.6.6 + version: 16.7.2 - name: common repository: oci://registry-1.docker.io/bitnamicharts - version: 2.30.2 -digest: sha256:79a3aee363cd4d88cd19f0c034d739b8dea199b2762f5d238bd9904ed77849d6 -generated: "2025-05-02T13:23:11.176099554+02:00" + version: 2.31.1 +digest: sha256:07ea3df0034b01d47e5e8b3764de78232d8b0e23c3c2fce27a6d4e8bd71837ba +generated: "2025-05-11T13:55:38.808367927+02:00" diff --git a/helm/seaweedfs/Chart.yaml b/helm/seaweedfs/Chart.yaml index 0c7bf3c684c6c3bcee0ebe2d521a9794c4634c59..d3531a424a17629fb197eb52706f9bd12120352c 100644 --- a/helm/seaweedfs/Chart.yaml +++ b/helm/seaweedfs/Chart.yaml @@ -3,18 +3,19 @@ annotations: category: Infrastructure - licenses: Apache-2.0 images: | - name: mariadb - image: docker.io/bitnami/mariadb:11.4.4-debian-12-r1 + image: docker.io/bitnami/mariadb:11.4.5-debian-12-r12 - name: os-shell - image: docker.io/bitnami/os-shell:12-debian-12-r33 + image: docker.io/bitnami/os-shell:12-debian-12-r43 - name: postgresql - image: docker.io/bitnami/postgresql:17.2.0-debian-12-r2 + image: docker.io/bitnami/postgresql:17.4.0-debian-12-r19 - name: seaweedfs - image: docker.io/bitnami/seaweedfs:3.80.0-debian-12-r1 + image: docker.io/bitnami/seaweedfs:3.87.0-debian-12-r1 + licenses: Apache-2.0 + tanzuCategory: clusterUtility apiVersion: v2 -appVersion: 3.80.0 +appVersion: 3.87.0 dependencies: - condition: mariadb.enabled name: mariadb @@ -35,7 +36,7 @@ dependencies: version: 2.x.x description: SeaweedFS is a simple and highly scalable distributed file system. home: https://bitnami.com -icon: https://bitnami.com/assets/stacks/seaweedfs/img/seaweedfs-stack-220x234.png +icon: https://dyltqmyl993wv.cloudfront.net/assets/stacks/seaweedfs/img/seaweedfs-stack-220x234.png keywords: - seaweedfs - storage @@ -50,4 +51,4 @@ name: seaweedfs sources: - https://github.com/bitnami/charts/tree/main/bitnami/seawwedfs - https://github.com/bitnami/containers/tree/main/bitnami/seaweedfs -version: 4.2.1 +version: 4.8.7 diff --git a/helm/seaweedfs/README.md b/helm/seaweedfs/README.md index 7506718dc1087f1ede7d95d9ebb28f40632a0b86..cd0c7e1cc30c7c56e4357523b12b3abbb6bbe8f8 100644 --- a/helm/seaweedfs/README.md +++ b/helm/seaweedfs/README.md @@ -22,8 +22,6 @@ Bitnami charts for Helm are carefully engineered, actively maintained and are th This chart bootstraps a [SeaweedFS](https://github.com/seaweedfs/seaweedfs) deployment in a [Kubernetes](https://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. -Bitnami charts can be used with [Kubeapps](https://kubeapps.dev/) for deployment and management of Helm Charts in clusters. - ## Prerequisites - Kubernetes 1.23+ @@ -166,7 +164,7 @@ You can manually create the required TLS certificates for each SeaweedFS compone #### S3 Authentication Authentication can be enabled in the SeaweedFS S3 API by setting the `s3.auth.enabled` parameter to `true`. -You can provide your custom authentication configuration creating a secret with the configuration and setting the `s3.auth.cexistingSecret` parameter with the name of the secret. +You can provide your custom authentication configuration creating a secret with the configuration and setting the `s3.auth.existingSecret` parameter with the name of the secret. Alternatively, you can rely on the chart to create a basic configuration with two main users: `admin` and `read-only`. You can provide the admin user credentials using the `s3.auth.adminAccessKeyId` and `s3.auth.adminSecretAccessKey` parameters, and the read-only user credentials using the `s3.auth.readAccessKeyId` and `s3.auth.readSecretAccessKey` parameters. ### Additional environment variables @@ -349,7 +347,7 @@ If you encounter errors when working with persistent volumes, refer to our [trou | `master.containerSecurityContext.allowPrivilegeEscalation` | Set allowPrivilegeEscalation in Master Server container' Security Context | `false` | | `master.containerSecurityContext.capabilities.drop` | List of capabilities to be dropped in Master Server container | `["ALL"]` | | `master.containerSecurityContext.seccompProfile.type` | Set seccomp profile in Master Server container | `RuntimeDefault` | -| `master.logLevel` | Master Server log level [0|1|2|3|4] | `1` | +| `master.logLevel` | Master Server log level (0, 1, 2, 3, or 4) | `1` | | `master.bindAddress` | Master Server bind address | `0.0.0.0` | | `master.volumeSizeLimitMB` | Limit (in MB) to stop directing writes to oversized volumes | `1000` | | `master.config` | Master Server configuration | `""` | @@ -436,16 +434,26 @@ If you encounter errors when working with persistent volumes, refer to our [trou | Name | Description | Value | | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------- | -| `master.persistence.enabled` | Enable persistence on Master Server using Persistent Volume Claims | `true` | +| `master.persistence.enabled` | Enable data persistence on Master Server using Persistent Volume Claims | `true` | | `master.persistence.mountPath` | Path to mount the volume at. | `/data` | | `master.persistence.subPath` | The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services | `""` | | `master.persistence.storageClass` | Storage class of backing PVC | `""` | | `master.persistence.annotations` | Persistent Volume Claim annotations | `{}` | | `master.persistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` | | `master.persistence.size` | Size of data volume | `8Gi` | -| `master.persistence.existingClaim` | The name of an existing PVC to use for persistence | `""` | +| `master.persistence.existingClaim` | The name of an existing PVC to use for data persistence | `""` | | `master.persistence.selector` | Selector to match an existing Persistent Volume for data PVC | `{}` | | `master.persistence.dataSource` | Custom PVC data source | `{}` | +| `master.logPersistence.enabled` | Enable logs persistence on Master Server using Persistent Volume Claims | `false` | +| `master.logPersistence.mountPath` | Path to mount the volume at. | `/logs` | +| `master.logPersistence.subPath` | The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services | `""` | +| `master.logPersistence.storageClass` | Storage class of backing PVC | `""` | +| `master.logPersistence.annotations` | Persistent Volume Claim annotations | `{}` | +| `master.logPersistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` | +| `master.logPersistence.size` | Size of logs volume | `8Gi` | +| `master.logPersistence.existingClaim` | The name of an existing PVC to use for logs persistence | `""` | +| `master.logPersistence.selector` | Selector to match an existing Persistent Volume for logs PVC | `{}` | +| `master.logPersistence.dataSource` | Custom PVC data source | `{}` | | `master.persistentVolumeClaimRetentionPolicy.enabled` | Controls if and how PVCs are deleted during the lifecycle of the Master Server StatefulSet | `false` | | `master.persistentVolumeClaimRetentionPolicy.whenScaled` | Volume retention behavior when the replica count of the StatefulSet is reduced | `Retain` | | `master.persistentVolumeClaimRetentionPolicy.whenDeleted` | Volume retention behavior that applies when the StatefulSet is deleted | `Retain` | @@ -516,7 +524,7 @@ If you encounter errors when working with persistent volumes, refer to our [trou | `volume.containerSecurityContext.allowPrivilegeEscalation` | Set allowPrivilegeEscalation in Volume Server container' Security Context | `false` | | `volume.containerSecurityContext.capabilities.drop` | List of capabilities to be dropped in Volume Server container | `["ALL"]` | | `volume.containerSecurityContext.seccompProfile.type` | Set seccomp profile in Volume Server container | `RuntimeDefault` | -| `volume.logLevel` | Volume Server log level [0|1|2|3|4] | `1` | +| `volume.logLevel` | Volume Server log level (0, 1, 2, 3, or 4) | `1` | | `volume.bindAddress` | Volume Server bind address | `0.0.0.0` | | `volume.publicUrl` | Volume Server public URL | `""` | | `volume.config` | Volume Server configuration | `""` | @@ -615,6 +623,16 @@ If you encounter errors when working with persistent volumes, refer to our [trou | `volume.dataVolumes[0].persistence.existingClaim` | The name of an existing PVC to use for persistence | `""` | | `volume.dataVolumes[0].persistence.selector` | Selector to match an existing Persistent Volume for data PVC | `{}` | | `volume.dataVolumes[0].persistence.dataSource` | Custom PVC data source | `{}` | +| `volume.logPersistence.enabled` | Enable logs persistence on Volume Server using Persistent Volume Claims | `false` | +| `volume.logPersistence.mountPath` | Path to mount the volume at. | `/logs` | +| `volume.logPersistence.subPath` | The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services | `""` | +| `volume.logPersistence.storageClass` | Storage class of backing PVC | `""` | +| `volume.logPersistence.annotations` | Persistent Volume Claim annotations | `{}` | +| `volume.logPersistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` | +| `volume.logPersistence.size` | Size of logs volume | `8Gi` | +| `volume.logPersistence.existingClaim` | The name of an existing PVC to use for logs persistence | `""` | +| `volume.logPersistence.selector` | Selector to match an existing Persistent Volume for logs PVC | `{}` | +| `volume.logPersistence.dataSource` | Custom PVC data source | `{}` | | `volume.persistentVolumeClaimRetentionPolicy.enabled` | Controls if and how PVCs are deleted during the lifecycle of the Volume Server StatefulSet | `false` | | `volume.persistentVolumeClaimRetentionPolicy.whenScaled` | Volume retention behavior when the replica count of the StatefulSet is reduced | `Retain` | | `volume.persistentVolumeClaimRetentionPolicy.whenDeleted` | Volume retention behavior that applies when the StatefulSet is deleted | `Retain` | @@ -686,12 +704,14 @@ If you encounter errors when working with persistent volumes, refer to our [trou | `filer.containerSecurityContext.allowPrivilegeEscalation` | Set allowPrivilegeEscalation in Filer Server container' Security Context | `false` | | `filer.containerSecurityContext.capabilities.drop` | List of capabilities to be dropped in Filer Server container | `["ALL"]` | | `filer.containerSecurityContext.seccompProfile.type` | Set seccomp profile in Filer Server container | `RuntimeDefault` | -| `filer.logLevel` | Filer Server log level [0|1|2|3|4] | `1` | +| `filer.logLevel` | Filer Server log level (0, 1, 2, 3, or 4) | `1` | | `filer.bindAddress` | Filer Server bind address | `0.0.0.0` | | `filer.config` | Filer Server configuration | `[leveldb2] enabled = false ` | | `filer.existingConfigmap` | The name of an existing ConfigMap with your custom configuration for Filer Server | `""` | +| `filer.notificationConfig` | Filer Server notification configuration | `""` | +| `filer.existingNotificationConfigmap` | The name of an existing ConfigMap with your custom notification configuration for Filer Server | `""` | | `filer.command` | Override default Filer Server container command (useful when using custom images) | `[]` | | `filer.args` | Override default Filer Server container args (useful when using custom images) | `[]` | | `filer.automountServiceAccountToken` | Mount Service Account token in Filer Server pods | `false` | @@ -770,6 +790,24 @@ enabled = false | `filer.ingress.secrets` | Custom TLS certificates as secrets | `[]` | | `filer.ingress.extraRules` | Additional rules to be covered with this ingress record | `[]` | +### Filer Server Persistence Parameters + +| Name | Description | Value | +| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------- | +| `filer.logPersistence.enabled` | Enable logs persistence on Filer Server using Persistent Volume Claims | `false` | +| `filer.logPersistence.mountPath` | Path to mount the volume at. | `/logs` | +| `filer.logPersistence.subPath` | The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services | `""` | +| `filer.logPersistence.storageClass` | Storage class of backing PVC | `""` | +| `filer.logPersistence.annotations` | Persistent Volume Claim annotations | `{}` | +| `filer.logPersistence.accessModes` | Persistent Volume Access Modes | `["ReadWriteOnce"]` | +| `filer.logPersistence.size` | Size of logs volume | `8Gi` | +| `filer.logPersistence.existingClaim` | The name of an existing PVC to use for logs persistence | `""` | +| `filer.logPersistence.selector` | Selector to match an existing Persistent Volume for logs PVC | `{}` | +| `filer.logPersistence.dataSource` | Custom PVC data source | `{}` | +| `filer.persistentVolumeClaimRetentionPolicy.enabled` | Controls if and how PVCs are deleted during the lifecycle of the Master Server StatefulSet | `false` | +| `filer.persistentVolumeClaimRetentionPolicy.whenScaled` | Volume retention behavior when the replica count of the StatefulSet is reduced | `Retain` | +| `filer.persistentVolumeClaimRetentionPolicy.whenDeleted` | Volume retention behavior that applies when the StatefulSet is deleted | `Retain` | + ### Filer Server Metrics Parameters | Name | Description | Value | @@ -837,15 +875,16 @@ enabled = false | `s3.containerSecurityContext.allowPrivilegeEscalation` | Set allowPrivilegeEscalation in Amazon S3 API container' Security Context | `false` | | `s3.containerSecurityContext.capabilities.drop` | List of capabilities to be dropped in Amazon S3 API container | `["ALL"]` | | `s3.containerSecurityContext.seccompProfile.type` | Set seccomp profile in Amazon S3 API container | `RuntimeDefault` | -| `s3.logLevel` | Amazon S3 API log level [0|1|2|3|4] | `1` | +| `s3.logLevel` | Amazon S3 API log level (0, 1, 2, 3, or 4) | `1` | | `s3.bindAddress` | Amazon S3 API bind address | `0.0.0.0` | +| `s3.allowEmptyFolder` | Allow empty folders in Amazon S3 API | `true` | | `s3.auth.enabled` | Enable Amazon S3 API authentication | `false` | | `s3.auth.existingSecret` | Existing secret with Amazon S3 API authentication configuration | `""` | | `s3.auth.existingSecretConfigKey` | Key of the above existing secret with S3 API authentication configuration, defaults to `config.json` | `""` | -| `s3.auth.adminAccessKeyId` | Amazon S3 API access key with admin privileges. Ignored if `security.mTLS.volume.existingSecret` is set | `""` | -| `s3.auth.adminSecretAccessKey` | Amazon S3 API secret key with admin privileges. Ignored if `security.mTLS.volume.existingSecret` is set | `""` | -| `s3.auth.readAccessKeyId` | Amazon S3 API read access key with read-only privileges. Ignored if `security.mTLS.volume.existingSecret` is set | `""` | -| `s3.auth.readSecretAccessKey` | Amazon S3 API read secret key with read-only privileges. Ignored if `security.mTLS.volume.existingSecret` is set | `""` | +| `s3.auth.adminAccessKeyId` | Amazon S3 API access key with admin privileges. Ignored if `s3.auth.existingSecret` is set | `""` | +| `s3.auth.adminSecretAccessKey` | Amazon S3 API secret key with admin privileges. Ignored if `s3.auth.existingSecret` is set | `""` | +| `s3.auth.readAccessKeyId` | Amazon S3 API read access key with read-only privileges. Ignored if `s3.auth.existingSecret` is set | `""` | +| `s3.auth.readSecretAccessKey` | Amazon S3 API read secret key with read-only privileges. Ignored if `s3.auth.existingSecret` is set | `""` | | `s3.command` | Override default Amazon S3 API container command (useful when using custom images) | `[]` | | `s3.args` | Override default Amazon S3 API container args (useful when using custom images) | `[]` | | `s3.automountServiceAccountToken` | Mount Service Account token in Amazon S3 API pods | `false` | @@ -988,7 +1027,7 @@ enabled = false | `webdav.containerSecurityContext.allowPrivilegeEscalation` | Set allowPrivilegeEscalation in WebDAV container' Security Context | `false` | | `webdav.containerSecurityContext.capabilities.drop` | List of capabilities to be dropped in WebDAV container | `["ALL"]` | | `webdav.containerSecurityContext.seccompProfile.type` | Set seccomp profile in WebDAV container | `RuntimeDefault` | -| `webdav.logLevel` | WebDAV log level [0|1|2|3|4] | `1` | +| `webdav.logLevel` | WebDAV log level (0, 1, 2, 3, or 4) | `1` | | `webdav.tls.enabled` | Enable TLS transport for WebDAV | `false` | | `webdav.tls.autoGenerated.enabled` | Enable automatic generation of certificates for TLS | `false` | | `webdav.tls.autoGenerated.engine` | Mechanism to generate the certificates (allowed values: helm, cert-manager) | `helm` | @@ -1076,6 +1115,97 @@ enabled = false | `webdav.ingress.secrets` | Custom TLS certificates as secrets | `[]` | | `webdav.ingress.extraRules` | Additional rules to be covered with this ingress record | `[]` | +### IAM Parameters + +| Name | Description | Value | +| ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | +| `iam.enabled` | Enable IAM deployment | `false` | +| `iam.replicaCount` | Number of IAM replicas to deploy | `1` | +| `iam.containerPorts.http` | IAM HTTP container port | `8111` | +| `iam.livenessProbe.enabled` | Enable livenessProbe on IAM containers | `true` | +| `iam.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `30` | +| `iam.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` | +| `iam.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `30` | +| `iam.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `6` | +| `iam.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` | +| `iam.readinessProbe.enabled` | Enable readinessProbe on IAM containers | `true` | +| `iam.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `30` | +| `iam.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` | +| `iam.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `30` | +| `iam.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `6` | +| `iam.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` | +| `iam.startupProbe.enabled` | Enable startupProbe on IAM containers | `false` | +| `iam.startupProbe.initialDelaySeconds` | Initial delay seconds for startupProbe | `5` | +| `iam.startupProbe.periodSeconds` | Period seconds for startupProbe | `5` | +| `iam.startupProbe.timeoutSeconds` | Timeout seconds for startupProbe | `1` | +| `iam.startupProbe.failureThreshold` | Failure threshold for startupProbe | `15` | +| `iam.startupProbe.successThreshold` | Success threshold for startupProbe | `1` | +| `iam.resourcesPreset` | Set IAM container resources according to one common preset (allowed values: none, nano, small, medium, large, xlarge, 2xlarge). This is ignored if webdav.resources is set (webdav.resources is recommended for production). | `nano` | +| `iam.resources` | Set IAM container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | +| `iam.podSecurityContext.enabled` | Enable IAM pods' Security Context | `true` | +| `iam.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy for IAM pods | `Always` | +| `iam.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface for IAM pods | `[]` | +| `iam.podSecurityContext.supplementalGroups` | Set filesystem extra groups for IAM pods | `[]` | +| `iam.podSecurityContext.fsGroup` | Set fsGroup in IAM pods' Security Context | `1001` | +| `iam.containerSecurityContext.enabled` | Enabled IAM container' Security Context | `true` | +| `iam.containerSecurityContext.seLinuxOptions` | Set SELinux options in IAM container | `{}` | +| `iam.containerSecurityContext.runAsUser` | Set runAsUser in IAM container' Security Context | `1001` | +| `iam.containerSecurityContext.runAsGroup` | Set runAsGroup in IAM container' Security Context | `1001` | +| `iam.containerSecurityContext.runAsNonRoot` | Set runAsNonRoot in IAM container' Security Context | `true` | +| `iam.containerSecurityContext.readOnlyRootFilesystem` | Set readOnlyRootFilesystem in IAM container' Security Context | `true` | +| `iam.containerSecurityContext.privileged` | Set privileged in IAM container' Security Context | `false` | +| `iam.containerSecurityContext.allowPrivilegeEscalation` | Set allowPrivilegeEscalation in IAM container' Security Context | `false` | +| `iam.containerSecurityContext.capabilities.drop` | List of capabilities to be dropped in IAM container | `["ALL"]` | +| `iam.containerSecurityContext.seccompProfile.type` | Set seccomp profile in IAM container | `RuntimeDefault` | +| `iam.logLevel` | IAM log level (0, 1, 2, 3, or 4) | `1` | +| `iam.command` | Override default IAM container command (useful when using custom images) | `[]` | +| `iam.args` | Override default IAM container args (useful when using custom images) | `[]` | +| `iam.automountServiceAccountToken` | Mount Service Account token in IAM pods | `false` | +| `iam.hostAliases` | IAM pods host aliases | `[]` | +| `iam.statefulsetAnnotations` | Annotations for IAM statefulset | `{}` | +| `iam.podLabels` | Extra labels for IAM pods | `{}` | +| `iam.podAnnotations` | Annotations for IAM pods | `{}` | +| `iam.podAffinityPreset` | Pod affinity preset. Ignored if `iam.affinity` is set. Allowed values: `soft` or `hard` | `""` | +| `iam.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `iam.affinity` is set. Allowed values: `soft` or `hard` | `soft` | +| `iam.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `iam.affinity` is set. Allowed values: `soft` or `hard` | `""` | +| `iam.nodeAffinityPreset.key` | Node label key to match. Ignored if `iam.affinity` is set | `""` | +| `iam.nodeAffinityPreset.values` | Node label values to match. Ignored if `iam.affinity` is set | `[]` | +| `iam.affinity` | Affinity for IAM pods assignment | `{}` | +| `iam.nodeSelector` | Node labels for IAM pods assignment | `{}` | +| `iam.tolerations` | Tolerations for IAM pods assignment | `[]` | +| `iam.updateStrategy.type` | IAM deployment strategy type | `RollingUpdate` | +| `iam.priorityClassName` | IAM pods' priorityClassName | `""` | +| `iam.topologySpreadConstraints` | Topology Spread Constraints for IAM pod assignment spread across your cluster among failure-domains | `[]` | +| `iam.schedulerName` | Name of the k8s scheduler (other than default) for IAM pods | `""` | +| `iam.terminationGracePeriodSeconds` | Seconds IAM pods need to terminate gracefully | `""` | +| `iam.lifecycleHooks` | for IAM containers to automate configuration before or after startup | `{}` | +| `iam.extraEnvVars` | Array with extra environment variables to add to IAM containers | `[]` | +| `iam.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for IAM containers | `""` | +| `iam.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for IAM containers | `""` | +| `iam.extraVolumes` | Optionally specify extra list of additional volumes for the IAM pods | `[]` | +| `iam.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the IAM containers | `[]` | +| `iam.sidecars` | Add additional sidecar containers to the IAM pods | `[]` | +| `iam.initContainers` | Add additional init containers to the IAM pods | `[]` | +| `iam.pdb.create` | Enable/disable a Pod Disruption Budget creation | `true` | +| `iam.pdb.minAvailable` | Minimum number/percentage of pods that should remain scheduled | `""` | +| `iam.pdb.maxUnavailable` | Maximum number/percentage of pods that may be made unavailable. Defaults to `1` if both `iam.pdb.minAvailable` and `iam.pdb.maxUnavailable` are empty. | `""` | + +### IAM Traffic Exposure Parameters + +| Name | Description | Value | +| -------------------------------------- | ------------------------------------------------------------------------------ | ----------- | +| `iam.service.type` | IAM service type | `ClusterIP` | +| `iam.service.ports.http` | IAM service HTTP port (HTTPS if `iam.tls.enabled` is `true`) | `8111` | +| `iam.service.nodePorts.http` | Node port for HTTP (HTTPS if `iam.tls.enabled` is `true`) | `""` | +| `iam.service.clusterIP` | IAM service Cluster IP | `""` | +| `iam.service.loadBalancerIP` | IAM service Load Balancer IP | `""` | +| `iam.service.loadBalancerSourceRanges` | IAM service Load Balancer sources | `[]` | +| `iam.service.externalTrafficPolicy` | IAM service external traffic policy | `Cluster` | +| `iam.service.annotations` | Additional custom annotations for IAM service | `{}` | +| `iam.service.extraPorts` | Extra ports to expose in IAM service (normally used with the `sidecars` value) | `[]` | +| `iam.service.sessionAffinity` | Control where client requests go, to the same pod or round-robin | `None` | +| `iam.service.sessionAffinityConfig` | Additional settings for the sessionAffinity | `{}` | + ### Init Container Parameters | Name | Description | Value | @@ -1115,7 +1245,6 @@ enabled = false | `mariadb.auth.database` | MariaDB custom database | `bitnami_seaweedfs` | | `mariadb.auth.username` | MariaDB custom user name | `bn_seaweedfs` | | `mariadb.auth.password` | MariaDB custom user password | `""` | -| `mariadb.auth.usePasswordFiles` | Mount credentials as a file instead of using an environment variable | `false` | | `mariadb.initdbScripts` | Specify dictionary of scripts to be run at first boot | `{}` | | `mariadb.primary.persistence.enabled` | Enable persistence on MariaDB using PVC(s) | `true` | | `mariadb.primary.persistence.storageClass` | Persistent Volume storage class | `""` | @@ -1151,6 +1280,7 @@ enabled = false | `externalDatabase.password` | External Database user password | `""` | | `externalDatabase.database` | External Database database name | `bitnami_seaweedfs` | | `externalDatabase.existingSecret` | The name of an existing secret with database credentials. Evaluated as a template | `""` | +| `externalDatabase.waitForDatabaseEnabled` | Whether to check for external database before starting seaweedfs containers | `true` | | `externalDatabase.initDatabaseJob.enabled` | Enable the init external database job | `false` | | `externalDatabase.initDatabaseJob.labels` | Extra labels for the init external database job | `{}` | | `externalDatabase.initDatabaseJob.annotations` | Extra annotations for the init external database job | `{}` | @@ -1232,7 +1362,7 @@ Find more information about how to deal with common errors related to Bitnami's ## License -Copyright © 2024 Broadcom. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. +Copyright © 2025 Broadcom. The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/helm/seaweedfs/charts/common-2.30.2.tgz b/helm/seaweedfs/charts/common-2.30.2.tgz deleted file mode 100644 index f35ca37f859944b5081011965987ff76bf3d75fc..0000000000000000000000000000000000000000 Binary files a/helm/seaweedfs/charts/common-2.30.2.tgz and /dev/null differ diff --git a/helm/seaweedfs/charts/common-2.31.1.tgz b/helm/seaweedfs/charts/common-2.31.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..cf6cff738dbd2e462d1a295a45ebab5d32bd5c7b Binary files /dev/null and b/helm/seaweedfs/charts/common-2.31.1.tgz differ diff --git a/helm/seaweedfs/charts/mariadb-20.5.3.tgz b/helm/seaweedfs/charts/mariadb-20.5.3.tgz deleted file mode 100644 index 26e91fd8cfba97218673197133afa7dbbb7db995..0000000000000000000000000000000000000000 Binary files a/helm/seaweedfs/charts/mariadb-20.5.3.tgz and /dev/null differ diff --git a/helm/seaweedfs/charts/mariadb-20.5.5.tgz b/helm/seaweedfs/charts/mariadb-20.5.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3e573f1be539f7cde21b4dc6e5e22e93907613d7 Binary files /dev/null and b/helm/seaweedfs/charts/mariadb-20.5.5.tgz differ diff --git a/helm/seaweedfs/charts/postgresql-16.6.6.tgz b/helm/seaweedfs/charts/postgresql-16.6.6.tgz deleted file mode 100644 index eea64cae7283ea48f6dd6977b6d7ba2af21cd948..0000000000000000000000000000000000000000 Binary files a/helm/seaweedfs/charts/postgresql-16.6.6.tgz and /dev/null differ diff --git a/helm/seaweedfs/charts/postgresql-16.7.2.tgz b/helm/seaweedfs/charts/postgresql-16.7.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8e301c65cb1ce405a17995e3462a81e4f052f917 Binary files /dev/null and b/helm/seaweedfs/charts/postgresql-16.7.2.tgz differ diff --git a/helm/seaweedfs/templates/_helpers.tpl b/helm/seaweedfs/templates/_helpers.tpl index 9f76dc6966ce3d40ec3337b4822f67a55702f52e..85cb277cc617c9ae37e51fe4a02c6c44bfb1876b 100644 --- a/helm/seaweedfs/templates/_helpers.tpl +++ b/helm/seaweedfs/templates/_helpers.tpl @@ -24,6 +24,13 @@ Return the proper SeaweedFS Filer Server fullname {{- printf "%s-filer" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" -}} {{- end -}} +{{/* +Return the proper SeaweedFS IAM Server fullname +*/}} +{{- define "seaweedfs.iam.fullname" -}} +{{- printf "%s-iam" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" -}} +{{- end -}} + {{/* Return the proper SeaweedFS Amazon S3 API fullname */}} @@ -77,6 +84,17 @@ Return the proper init external database job image name {{- end -}} {{- end -}} +{{/* +Returns whether wait for external database is enabled +*/}} +{{- define "seaweedfs.waitForDatabase.enabled" -}} +{{- if or .Values.mariadb.enabled .Values.postgresql.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.waitForDatabaseEnabled true) ) }} + {{- print "true" -}} + {{- else }} + {{- print "false" -}} +{{- end -}} +{{- end -}} + {{/* Return the proper Docker Image Registry Secret Names */}} @@ -128,6 +146,17 @@ Return the Filer Server configuration configmap. {{- end -}} {{- end -}} +{{/* +Return the Filer Server notification configuration configmap. +*/}} +{{- define "seaweedfs.filer.notificationConfigmapName" -}} +{{- if .Values.filer.existingNotificationConfigmap -}} + {{- print (tpl .Values.filer.existingNotificationConfigmap .) -}} +{{- else -}} + {{- printf "%s-notification" (include "seaweedfs.filer.fullname" .) -}} +{{- end -}} +{{- end -}} + {{/* Return the Master Server peers */}} @@ -339,6 +368,7 @@ Return the database secret key name Returns an init-container that waits for the database to be ready */}} {{- define "seaweedfs.filer.waitForDBInitContainer" -}} +{{ if eq "true" ( include "seaweedfs.waitForDatabase.enabled" . ) }} - name: wait-for-db image: {{ include "seaweedfs.initDatabaseJob.image" . }} {{- if or .Values.mariadb.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "mariadb") ) }} @@ -415,6 +445,7 @@ Returns an init-container that waits for the database to be ready - name: db-credentials mountPath: /secrets {{- end -}} +{{- end -}} {{/* Returns an init-container that generates auth configuration for the Amazon S3 API @@ -431,7 +462,12 @@ Returns an init-container that generates auth configuration for the Amazon S3 AP args: - -ec - | - #!/bin/bash + {{- if .Values.usePasswordFiles }} + export ADMIN_ACCESS_KEY_ID="$(< $ADMIN_ACCESS_KEY_ID_FILE)" + export ADMIN_SECRET_ACCESS_KEY="$(< $ADMIN_SECRET_ACCESS_KEY_FILE)" + export READ_ACCESS_KEY_ID="$(< $READ_ACCESS_KEY_ID_FILE)" + export READ_SECRET_ACCESS_KEY="$(< $READ_SECRET_ACCESS_KEY_FILE)" + {{- end }} cat > "/auth/config.json" <<EOF { @@ -468,6 +504,16 @@ Returns an init-container that generates auth configuration for the Amazon S3 AP } EOF env: + {{- if .Values.usePasswordFiles }} + - name: ADMIN_ACCESS_KEY_ID_FILE + value: "/opt/bitnami/seaweed/secrets/admin_access_key_id" + - name: ADMIN_SECRET_ACCESS_KEY_FILE + value: "/opt/bitnami/seaweed/secrets/admin_secret_access_key" + - name: READ_ACCESS_KEY_ID_FILE + value: "/opt/bitnami/seaweed/secrets/read_access_key_id" + - name: READ_SECRET_ACCESS_KEY_FILE + value: "/opt/bitnami/seaweed/secrets/read_secret_access_key" + {{- else }} - name: ADMIN_ACCESS_KEY_ID valueFrom: secretKeyRef: @@ -488,6 +534,7 @@ Returns an init-container that generates auth configuration for the Amazon S3 AP secretKeyRef: name: {{ printf "%s-auth" (include "seaweedfs.s3.fullname" .) }} key: read_secret_access_key + {{- end }} {{- if .Values.s3.resources }} resources: {{- toYaml .Values.s3.resources | nindent 12 }} {{- else if ne .Values.s3.resourcesPreset "none" }} @@ -497,6 +544,10 @@ Returns an init-container that generates auth configuration for the Amazon S3 AP - name: empty-dir mountPath: /auth subPath: auth-dir + {{- if .Values.usePasswordFiles }} + - name: seaweed-secrets + mountPath: /opt/bitnami/seaweed/secrets + {{- end}} {{- end -}} {{/* @@ -518,6 +569,7 @@ Compile all warnings into a single message. {{- $messages := list -}} {{- $messages := append $messages (include "seaweedfs.validateValues.security.mTLS" .) -}} {{- $messages := append $messages (include "seaweedfs.validateValues.master.replicaCount" .) -}} +{{- $messages := append $messages (include "seaweedfs.validateValues.filer.replicaCount" .) -}} {{- $messages := append $messages (include "seaweedfs.validateValues.volume.replicaCount" .) -}} {{- $messages := append $messages (include "seaweedfs.validateValues.volume.dataVolumes" .) -}} {{- $messages := append $messages (include "seaweedfs.validateValues.filer.database" .) -}} @@ -562,12 +614,27 @@ Validate values of SeaweedFS - number of Master server replicas */}} {{- define "seaweedfs.validateValues.master.replicaCount" -}} {{- $masterReplicaCount := int .Values.master.replicaCount }} -{{- if and .Values.master.persistence.enabled .Values.master.persistence.existingClaim (gt $masterReplicaCount 1) -}} +{{- if and (or (and .Values.master.persistence.enabled .Values.master.persistence.existingClaim) (and .Values.master.logPersistence.enabled .Values.master.logPersistence.existingClaim)) (gt $masterReplicaCount 1) -}} master.replicaCount A single existing PVC cannot be shared between multiple Master Server replicas. Please set a valid number of replicas (--set master.replicaCount=1), disable persistence - (--set master.persistence.enabled=false) or rely on dynamic provisioning via Persitent - Volume Claims (--set master.persistence.existingClaim=""). + (--set master.persistence.enabled=false,master.logPersistence.enabled=false) or + rely on dynamic provisioning via Persistent Volume Claims + (--set master.persistence.existingClaim="",master.logPersistence.existingClaim=""). +{{- end -}} +{{- end -}} + +{{/* +Validate values of SeaweedFS - number of Filer server replicas +*/}} +{{- define "seaweedfs.validateValues.filer.replicaCount" -}} +{{- $filerReplicaCount := int .Values.filer.replicaCount }} +{{- if and .Values.filer.enabled .Values.filer.logPersistence.enabled .Values.filer.logPersistence.existingClaim (gt $filerReplicaCount 1) -}} +filer.replicaCount + A single existing PVC cannot be shared between multiple Filer Server replicas. + Please set a valid number of replicas (--set filer.replicaCount=1), disable persistence + (--set filer.logPersistence.enabled=false) or rely on dynamic provisioning via + Persistent Volume Claims (--set filer.logPersistence.existingClaim=""). {{- end -}} {{- end -}} @@ -585,6 +652,13 @@ volume.replicaCount Volume Claims (--set volume.dataVolumes[].persistence.existingClaim=""). {{- end -}} {{- end -}} +{{- if and .Values.volume.logPersistence.enabled .Values.volume.logPersistence.existingClaim (gt $volumeReplicaCount 1) -}} +volume.replicaCount + A single existing PVC cannot be shared between multiple Volume Server replicas. + Please set a valid number of replicas (--set volume.replicaCount=1), disable persistence + (--set volume.logPersistence.enabled=false) or rely on dynamic provisioning via Persistent Volume Claims + (--set volume.logPersistence.existingClaim=""). +{{- end -}} {{- end -}} {{/* diff --git a/helm/seaweedfs/templates/filer/hpa.yaml b/helm/seaweedfs/templates/filer/hpa.yaml index c2c967235f6345af184794f7d689745738348b23..725158c21281674a09c86c8e6849ec44b95f143f 100644 --- a/helm/seaweedfs/templates/filer/hpa.yaml +++ b/helm/seaweedfs/templates/filer/hpa.yaml @@ -26,24 +26,16 @@ spec: - type: Resource resource: name: memory - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.filer.autoscaling.targetMemory }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.filer.autoscaling.targetMemory }} - {{- end }} {{- end }} {{- if .Values.filer.autoscaling.targetCPU }} - type: Resource resource: name: cpu - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.filer.autoscaling.targetCPU }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.filer.autoscaling.targetCPU }} - {{- end }} {{- end }} {{- end }} diff --git a/helm/seaweedfs/templates/filer/ingress.yaml b/helm/seaweedfs/templates/filer/ingress.yaml index 5ebfed11f95cfdb173470d453d00d229e283caa0..c92a9314563052700129e5a322cd5d213623f7c4 100644 --- a/helm/seaweedfs/templates/filer/ingress.yaml +++ b/helm/seaweedfs/templates/filer/ingress.yaml @@ -16,7 +16,7 @@ metadata: annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }} {{- end }} spec: - {{- if and .Values.filer.ingress.ingressClassName (eq "true" (include "common.ingress.supportsIngressClassname" .)) }} + {{- if .Values.filer.ingress.ingressClassName }} ingressClassName: {{ .Values.filer.ingress.ingressClassName | quote }} {{- end }} rules: @@ -27,9 +27,7 @@ spec: {{- toYaml .Values.filer.ingress.extraPaths | nindent 10 }} {{- end }} - path: {{ .Values.filer.ingress.path }} - {{- if eq "true" (include "common.ingress.supportsPathType" .) }} pathType: {{ .Values.filer.ingress.pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.filer.fullname" .) "servicePort" "http" "context" $) | nindent 14 }} {{- if not (empty .Values.filer.ingress.hostname )}} host: {{ .Values.filer.ingress.hostname }} @@ -40,9 +38,7 @@ spec: http: paths: - path: {{ default "/" .path }} - {{- if eq "true" (include "common.ingress.supportsPathType" $) }} pathType: {{ default "ImplementationSpecific" .pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.filer.fullname" $) "servicePort" "http" "context" $) | nindent 14 }} {{- end }} {{- if .Values.filer.ingress.extraRules }} diff --git a/helm/seaweedfs/templates/filer/notification-configmap.yaml b/helm/seaweedfs/templates/filer/notification-configmap.yaml new file mode 100644 index 0000000000000000000000000000000000000000..367e1bf9452d6a85dec31246a89a077f70ef672e --- /dev/null +++ b/helm/seaweedfs/templates/filer/notification-configmap.yaml @@ -0,0 +1,20 @@ +{{- /* +Copyright Broadcom, Inc. All Rights Reserved. +SPDX-License-Identifier: APACHE-2.0 +*/}} + +{{- if and .Values.filer.enabled .Values.filer.notificationConfig (empty .Values.filer.existingNotificationConfigmap) }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ printf "%s-notification" (include "seaweedfs.filer.fullname" .) }} + namespace: {{ include "common.names.namespace" . | quote }} + labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }} + app.kubernetes.io/component: filer + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +data: + notification.toml: |- +{{ include "common.tplvalues.render" ( dict "value" .Values.filer.notificationConfig "context" $ ) | indent 4 }} +{{- end }} diff --git a/helm/seaweedfs/templates/filer/statefulset.yaml b/helm/seaweedfs/templates/filer/statefulset.yaml index 8a9c8b442a0dc5b4a2a5f400669d02469d92a7f9..42037cec106d7aefe8f941ae03ca0510915284d7 100644 --- a/helm/seaweedfs/templates/filer/statefulset.yaml +++ b/helm/seaweedfs/templates/filer/statefulset.yaml @@ -34,6 +34,9 @@ spec: {{- if and .Values.filer.config (empty .Values.filer.existingConfigmap) }} checksum/config: {{ include (print $.Template.BasePath "/filer/configmap.yaml") . | sha256sum }} {{- end }} + {{- if and .Values.filer.notificationConfig (empty .Values.filer.existingNotificationConfigmap) }} + checksum/notification-config: {{ include (print $.Template.BasePath "/filer/notification-configmap.yaml") . | sha256sum }} + {{- end }} checksum/security-config: {{ include (print $.Template.BasePath "/security-configmap.yaml") . | sha256sum }} {{- if .Values.filer.podAnnotations }} {{- include "common.tplvalues.render" (dict "value" .Values.filer.podAnnotations "context" $) | nindent 8 }} @@ -105,7 +108,11 @@ spec: args: {{- include "common.tplvalues.render" (dict "value" .Values.filer.args "context" $) | nindent 12 }} {{- else }} args: + {{- if .Values.filer.logPersistence.enabled }} + - -logdir={{ .Values.filer.logPersistence.mountPath }} + {{- else }} - -logtostderr=true + {{- end }} - -v={{ .Values.filer.logLevel }} - -config_dir=/etc/seaweedfs - filer @@ -235,6 +242,13 @@ spec: lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.filer.lifecycleHooks "context" $) | nindent 12 }} {{- end }} volumeMounts: + {{- if .Values.filer.logPersistence.enabled }} + - name: logs + mountPath: {{ .Values.filer.logPersistence.mountPath }} + {{- if .Values.filer.logPersistence.subPath }} + subPath: {{ .Values.filer.logPersistence.subPath }} + {{- end }} + {{- end }} - name: empty-dir mountPath: /tmp subPath: tmp-dir @@ -244,6 +258,12 @@ spec: subPath: filer.toml readOnly: true {{- end }} + {{- if or .Values.filer.notificationConfig .Values.filer.existingNotificationConfigmap }} + - name: notification-config + mountPath: /etc/seaweedfs/notification.toml + subPath: notification.toml + readOnly: true + {{- end }} - name: security-config mountPath: /etc/seaweedfs/security.toml subPath: security.toml @@ -285,6 +305,11 @@ spec: configMap: name: {{ template "seaweedfs.filer.configmapName" . }} {{- end }} + {{- if or .Values.filer.notificationConfig .Values.filer.existingNotificationConfigmap }} + - name: notification-config + configMap: + name: {{ template "seaweedfs.filer.notificationConfigmapName" . }} + {{- end }} - name: security-config configMap: name: {{ printf "%s-security" (include "common.names.fullname" .) }} @@ -311,4 +336,42 @@ spec: {{- if .Values.filer.extraVolumes }} {{- include "common.tplvalues.render" (dict "value" .Values.filer.extraVolumes "context" $) | nindent 8 }} {{- end }} + {{- if and .Values.filer.logPersistence.enabled .Values.filer.logPersistence.existingClaim }} + - name: logs + persistentVolumeClaim: + claimName: {{ tpl .Values.filer.logPersistence.existingClaim . }} + {{- else if .Values.filer.logPersistence.enabled }} + {{- if .Values.filer.persistentVolumeClaimRetentionPolicy.enabled }} + persistentVolumeClaimRetentionPolicy: + whenDeleted: {{ .Values.filer.persistentVolumeClaimRetentionPolicy.whenDeleted }} + whenScaled: {{ .Values.filer.persistentVolumeClaimRetentionPolicy.whenScaled }} + {{- end }} + volumeClaimTemplates: + - apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: logs + {{- if or .Values.filer.logPersistence.annotations .Values.commonAnnotations }} + {{- $claimAnnotations := include "common.tplvalues.merge" (dict "values" .Values.filer.logPersistence.annotations .Values.commonAnnotations "context" .) | fromYaml }} + annotations: {{- include "common.tplvalues.render" ( dict "value" $claimAnnotations "context" $ ) | nindent 10 }} + {{- end }} + {{- if .Values.commonLabels }} + labels: {{- include "common.labels.matchLabels" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 10 }} + {{- end }} + spec: + {{- if .Values.filer.logPersistence.dataSource }} + dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.filer.logPersistence.dataSource "context" $) | nindent 10 }} + {{- end }} + accessModes: + {{- range .Values.filer.logPersistence.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.filer.logPersistence.size | quote }} + {{- if .Values.filer.logPersistence.selector }} + selector: {{- include "common.tplvalues.render" (dict "value" .Values.filer.logPersistence.selector "context" $) | nindent 10 }} + {{- end }} + {{- include "common.storage.class" (dict "persistence" .Values.filer.logPersistence "global" .Values.global) | nindent 8 }} + {{- end }} {{- end }} diff --git a/helm/seaweedfs/templates/iam/deployment.yaml b/helm/seaweedfs/templates/iam/deployment.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9386f2bd67705ffca6ac9d2c0f3f1b19a362a43b --- /dev/null +++ b/helm/seaweedfs/templates/iam/deployment.yaml @@ -0,0 +1,226 @@ +{{- /* +Copyright Broadcom, Inc. All Rights Reserved. +SPDX-License-Identifier: APACHE-2.0 +*/}} + +{{- if and .Values.filer.enabled .Values.iam.enabled }} +apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }} +kind: Deployment +metadata: + name: {{ template "seaweedfs.iam.fullname" . }} + namespace: {{ include "common.names.namespace" . | quote }} + labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }} + app.kubernetes.io/component: iam + {{- if or .Values.iam.statefulsetAnnotations .Values.commonAnnotations }} + {{- $annotations := include "common.tplvalues.merge" (dict "values" (list .Values.iam.statefulsetAnnotations .Values.commonAnnotations) "context" .) }} + annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.iam.replicaCount }} + {{- $podLabels := include "common.tplvalues.merge" (dict "values" (list .Values.iam.podLabels .Values.commonLabels) "context" .) }} + selector: + matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }} + app.kubernetes.io/component: iam + {{- if .Values.iam.updateStrategy }} + strategy: {{- toYaml .Values.iam.updateStrategy | nindent 4 }} + {{- end }} + template: + metadata: + annotations: + checksum/security-config: {{ include (print $.Template.BasePath "/security-configmap.yaml") . | sha256sum }} + {{- if .Values.iam.podAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.iam.podAnnotations "context" $) | nindent 8 }} + {{- end }} + labels: {{- include "common.labels.standard" ( dict "customLabels" $podLabels "context" $ ) | nindent 8 }} + app.kubernetes.io/component: iam + spec: + {{- include "seaweedfs.imagePullSecrets" . | nindent 6 }} + serviceAccountName: {{ template "seaweedfs.serviceAccountName" . }} + automountServiceAccountToken: {{ .Values.iam.automountServiceAccountToken }} + {{- if .Values.iam.hostAliases }} + hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.iam.hostAliases "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.iam.affinity }} + affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.iam.affinity "context" $) | nindent 8 }} + {{- else }} + affinity: + {{- if not (empty .Values.iam.podAffinityPreset) }} + podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.iam.podAffinityPreset "component" "iam" "customLabels" $podLabels "context" $) | nindent 10 }} + {{- end }} + {{- if not (empty .Values.iam.podAntiAffinityPreset) }} + podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.iam.podAntiAffinityPreset "component" "iam" "customLabels" $podLabels "context" $) | nindent 10 }} + {{- end }} + {{- if not (empty .Values.iam.nodeAffinityPreset.type) }} + nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.iam.nodeAffinityPreset.type "key" .Values.iam.nodeAffinityPreset.key "values" .Values.iam.nodeAffinityPreset.values) | nindent 10 }} + {{- end }} + {{- end }} + {{- if .Values.iam.nodeSelector }} + nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.iam.nodeSelector "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.iam.tolerations }} + tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.iam.tolerations "context" .) | nindent 8 }} + {{- end }} + {{- if .Values.iam.priorityClassName }} + priorityClassName: {{ .Values.iam.priorityClassName | quote }} + {{- end }} + {{- if .Values.iam.schedulerName }} + schedulerName: {{ .Values.iam.schedulerName | quote }} + {{- end }} + {{- if .Values.iam.topologySpreadConstraints }} + topologySpreadConstraints: {{- include "common.tplvalues.render" (dict "value" .Values.iam.topologySpreadConstraints "context" .) | nindent 8 }} + {{- end }} + {{- if .Values.iam.podSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.iam.podSecurityContext "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.iam.terminationGracePeriodSeconds }} + terminationGracePeriodSeconds: {{ .Values.iam.terminationGracePeriodSeconds }} + {{- end }} + initContainers: + {{- if .Values.iam.initContainers }} + {{- include "common.tplvalues.render" (dict "value" .Values.iam.initContainers "context" $) | nindent 8 }} + {{- end }} + containers: + - name: seaweedfs + image: {{ template "seaweedfs.image" . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.iam.containerSecurityContext.enabled }} + securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.iam.containerSecurityContext "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.command "context" $) | nindent 12 }} + {{- else if .Values.iam.command }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.iam.command "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.diagnosticMode.enabled }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.diagnosticMode.args "context" $) | nindent 12 }} + {{- else if .Values.iam.args }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.iam.args "context" $) | nindent 12 }} + {{- else }} + args: + - -logtostderr=true + - -v={{ .Values.iam.logLevel }} + - iam + - -port={{ .Values.iam.containerPorts.http }} + - -filer={{ printf "%s:%d" (include "seaweedfs.filer.fullname" .) (int .Values.filer.service.ports.http) }} + - -master={{ printf "%s:%d" (include "seaweedfs.master.fullname" .) (int .Values.master.service.ports.http) }} + {{- end }} + env: + - name: BITNAMI_DEBUG + value: {{ ternary "true" "false" (or .Values.image.debug .Values.diagnosticMode.enabled) | quote }} + - name: WEED_CLUSTER_DEFAULT + value: {{ .Values.clusterDefault | quote }} + {{- if .Values.iam.extraEnvVars }} + {{- include "common.tplvalues.render" (dict "value" .Values.iam.extraEnvVars "context" $) | nindent 12 }} + {{- end }} + {{- if or .Values.iam.extraEnvVarsCM .Values.iam.extraEnvVarsSecret }} + envFrom: + {{- if .Values.iam.extraEnvVarsCM }} + - configMapRef: + name: {{ include "common.tplvalues.render" (dict "value" .Values.iam.extraEnvVarsCM "context" $) }} + {{- end }} + {{- if .Values.iam.extraEnvVarsSecret }} + - secretRef: + name: {{ include "common.tplvalues.render" (dict "value" .Values.iam.extraEnvVarsSecret "context" $) }} + {{- end }} + {{- end }} + {{- if .Values.iam.resources }} + resources: {{- toYaml .Values.iam.resources | nindent 12 }} + {{- else if ne .Values.iam.resourcesPreset "none" }} + resources: {{- include "common.resources.preset" (dict "type" .Values.iam.resourcesPreset) | nindent 12 }} + {{- end }} + ports: + - name: "http" + containerPort: {{ .Values.iam.containerPorts.http }} + {{- if .Values.iam.extraContainerPorts }} + {{- include "common.tplvalues.render" (dict "value" .Values.iam.extraContainerPorts "context" $) | nindent 12 }} + {{- end }} + {{- if not .Values.diagnosticMode.enabled }} + {{- if .Values.iam.customLivenessProbe }} + livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.iam.customLivenessProbe "context" $) | nindent 12 }} + {{- else if .Values.iam.livenessProbe.enabled }} + livenessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.iam.livenessProbe "enabled") "context" $) | nindent 12 }} + exec: + command: + - pgrep + - -f + - iam + {{- end }} + {{- if .Values.iam.customReadinessProbe }} + readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.iam.customReadinessProbe "context" $) | nindent 12 }} + {{- else if .Values.iam.readinessProbe.enabled }} + readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.iam.readinessProbe "enabled") "context" $) | nindent 12 }} + tcpSocket: + port: "http" + {{- end }} + {{- if .Values.iam.customStartupProbe }} + startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.iam.customStartupProbe "context" $) | nindent 12 }} + {{- else if .Values.iam.startupProbe.enabled }} + startupProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.iam.startupProbe "enabled") "context" $) | nindent 12 }} + tcpSocket: + port: "http" + {{- end }} + {{- end }} + {{- if .Values.iam.lifecycleHooks }} + lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.iam.lifecycleHooks "context" $) | nindent 12 }} + {{- end }} + volumeMounts: + - name: empty-dir + mountPath: /tmp + subPath: tmp-dir + - name: security-config + mountPath: /etc/seaweedfs/security.toml + subPath: security.toml + readOnly: true + {{- if .Values.security.mTLS.enabled }} + - name: ca-cert + readOnly: true + mountPath: /certs/ca + - name: master-cert + readOnly: true + mountPath: /certs/master + - name: filer-cert + readOnly: true + mountPath: /certs/filer + - name: volume-cert + readOnly: true + mountPath: /certs/volume + - name: client-cert + readOnly: true + mountPath: /certs/client + {{- end }} + {{- if .Values.iam.extraVolumeMounts }} + {{- include "common.tplvalues.render" (dict "value" .Values.iam.extraVolumeMounts "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.iam.sidecars }} + {{- include "common.tplvalues.render" ( dict "value" .Values.iam.sidecars "context" $) | nindent 8 }} + {{- end }} + volumes: + - name: empty-dir + emptyDir: {} + - name: security-config + configMap: + name: {{ printf "%s-security" (include "common.names.fullname" .) }} + {{- if .Values.security.mTLS.enabled }} + - name: ca-cert + secret: + secretName: {{ template "seaweedfs.security.mTLS.caSecretName" . }} + items: + - key: tls.crt + path: tls.crt + - name: master-cert + secret: + secretName: {{ template "seaweedfs.security.mTLS.master.secretName" . }} + - name: filer-cert + secret: + secretName: {{ template "seaweedfs.security.mTLS.filer.secretName" . }} + - name: volume-cert + secret: + secretName: {{ template "seaweedfs.security.mTLS.volume.secretName" . }} + - name: client-cert + secret: + secretName: {{ template "seaweedfs.security.mTLS.client.secretName" . }} + {{- end }} + {{- if .Values.iam.extraVolumes }} + {{- include "common.tplvalues.render" (dict "value" .Values.iam.extraVolumes "context" $) | nindent 8 }} + {{- end }} +{{- end }} diff --git a/helm/seaweedfs/templates/iam/pdb.yaml b/helm/seaweedfs/templates/iam/pdb.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6c00475fa5037297f12a3620d660bc25c500bf68 --- /dev/null +++ b/helm/seaweedfs/templates/iam/pdb.yaml @@ -0,0 +1,28 @@ +{{- /* +Copyright Broadcom, Inc. All Rights Reserved. +SPDX-License-Identifier: APACHE-2.0 +*/}} + +{{- if and .Values.filer.enabled .Values.iam.enabled .Values.iam.pdb.create }} +apiVersion: {{ include "common.capabilities.policy.apiVersion" . }} +kind: PodDisruptionBudget +metadata: + name: {{ template "seaweedfs.iam.fullname" . }} + namespace: {{ include "common.names.namespace" . | quote }} + labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }} + app.kubernetes.io/component: iam + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + {{- if .Values.iam.pdb.minAvailable }} + minAvailable: {{ .Values.iam.pdb.minAvailable }} + {{- end }} + {{- if or .Values.iam.pdb.maxUnavailable (not .Values.iam.pdb.minAvailable) }} + maxUnavailable: {{ .Values.iam.pdb.maxUnavailable | default 1 }} + {{- end }} + {{- $podLabels := include "common.tplvalues.merge" (dict "values" (list .Values.iam.podLabels .Values.commonLabels) "context" .) }} + selector: + matchLabels: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 6 }} + app.kubernetes.io/component: iam +{{- end }} diff --git a/helm/seaweedfs/templates/iam/service.yaml b/helm/seaweedfs/templates/iam/service.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1589697cea5a2372c1f63d967511bcb049923873 --- /dev/null +++ b/helm/seaweedfs/templates/iam/service.yaml @@ -0,0 +1,54 @@ +{{- /* +Copyright Broadcom, Inc. All Rights Reserved. +SPDX-License-Identifier: APACHE-2.0 +*/}} + +{{- if and .Values.filer.enabled .Values.iam.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "seaweedfs.iam.fullname" . }} + namespace: {{ include "common.names.namespace" . | quote }} + labels: {{- include "common.labels.standard" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 4 }} + app.kubernetes.io/component: iam + {{- if or .Values.iam.service.annotations .Values.commonAnnotations }} + {{- $annotations := include "common.tplvalues.merge" (dict "values" (list .Values.iam.service.annotations .Values.commonAnnotations) "context" .) }} + annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.iam.service.type }} + {{- if and .Values.iam.service.clusterIP (eq .Values.iam.service.type "ClusterIP") }} + clusterIP: {{ .Values.iam.service.clusterIP }} + {{- end }} + {{- if .Values.iam.service.sessionAffinity }} + sessionAffinity: {{ .Values.iam.service.sessionAffinity }} + {{- end }} + {{- if .Values.iam.service.sessionAffinityConfig }} + sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.iam.service.sessionAffinityConfig "context" $) | nindent 4 }} + {{- end }} + {{- if or (eq .Values.iam.service.type "LoadBalancer") (eq .Values.iam.service.type "NodePort") }} + externalTrafficPolicy: {{ .Values.iam.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if and (eq .Values.iam.service.type "LoadBalancer") (not (empty .Values.iam.service.loadBalancerSourceRanges)) }} + loadBalancerSourceRanges: {{ .Values.iam.service.loadBalancerSourceRanges }} + {{- end }} + {{- if and (eq .Values.iam.service.type "LoadBalancer") (not (empty .Values.iam.service.loadBalancerIP)) }} + loadBalancerIP: {{ .Values.iam.service.loadBalancerIP }} + {{- end }} + ports: + - name: "http" + port: {{ .Values.iam.service.ports.http }} + targetPort: "http" + protocol: TCP + {{- if and (or (eq .Values.iam.service.type "NodePort") (eq .Values.iam.service.type "LoadBalancer")) (not (empty .Values.iam.service.nodePorts.http)) }} + nodePort: {{ .Values.iam.service.nodePorts.http }} + {{- else if eq .Values.iam.service.type "ClusterIP" }} + nodePort: null + {{- end }} + {{- if .Values.iam.service.extraPorts }} + {{- include "common.tplvalues.render" (dict "value" .Values.iam.service.extraPorts "context" $) | nindent 4 }} + {{- end }} + {{- $podLabels := include "common.tplvalues.merge" (dict "values" (list .Values.iam.podLabels .Values.commonLabels) "context" .) | fromYaml }} + selector: {{- include "common.labels.matchLabels" ( dict "customLabels" $podLabels "context" $ ) | nindent 4 }} + app.kubernetes.io/component: iam +{{- end }} diff --git a/helm/seaweedfs/templates/master/hpa.yaml b/helm/seaweedfs/templates/master/hpa.yaml index b807e0be86a1b85e88f32dad997ae250f34d05b4..bc7441d4be87f66d466824691c567e28069c3a35 100644 --- a/helm/seaweedfs/templates/master/hpa.yaml +++ b/helm/seaweedfs/templates/master/hpa.yaml @@ -26,24 +26,16 @@ spec: - type: Resource resource: name: memory - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.master.autoscaling.targetMemory }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.master.autoscaling.targetMemory }} - {{- end }} {{- end }} {{- if .Values.master.autoscaling.targetCPU }} - type: Resource resource: name: cpu - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.master.autoscaling.targetCPU }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.master.autoscaling.targetCPU }} - {{- end }} {{- end }} {{- end }} diff --git a/helm/seaweedfs/templates/master/ingress.yaml b/helm/seaweedfs/templates/master/ingress.yaml index c22d1f143bf4de3a4f1136f92f14e2dae38ea478..d76ee7d231d73534b76816088a54f5661ae5d373 100644 --- a/helm/seaweedfs/templates/master/ingress.yaml +++ b/helm/seaweedfs/templates/master/ingress.yaml @@ -16,7 +16,7 @@ metadata: annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }} {{- end }} spec: - {{- if and .Values.master.ingress.ingressClassName (eq "true" (include "common.ingress.supportsIngressClassname" .)) }} + {{- if .Values.master.ingress.ingressClassName }} ingressClassName: {{ .Values.master.ingress.ingressClassName | quote }} {{- end }} rules: @@ -27,9 +27,7 @@ spec: {{- toYaml .Values.master.ingress.extraPaths | nindent 10 }} {{- end }} - path: {{ .Values.master.ingress.path }} - {{- if eq "true" (include "common.ingress.supportsPathType" .) }} pathType: {{ .Values.master.ingress.pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.master.fullname" .) "servicePort" "http" "context" $) | nindent 14 }} {{- if not (empty .Values.master.ingress.hostname )}} host: {{ .Values.master.ingress.hostname }} @@ -40,9 +38,7 @@ spec: http: paths: - path: {{ default "/" .path }} - {{- if eq "true" (include "common.ingress.supportsPathType" $) }} pathType: {{ default "ImplementationSpecific" .pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.master.fullname" $) "servicePort" "http" "context" $) | nindent 14 }} {{- end }} {{- if .Values.master.ingress.extraRules }} diff --git a/helm/seaweedfs/templates/master/statefulset.yaml b/helm/seaweedfs/templates/master/statefulset.yaml index 22aa1180e8a0757bb55c4a63c52dfcb8f00e4284..67e09277dfe60ade5b2ab4bb890583a1de0839ba 100644 --- a/helm/seaweedfs/templates/master/statefulset.yaml +++ b/helm/seaweedfs/templates/master/statefulset.yaml @@ -130,7 +130,11 @@ spec: args: {{- include "common.tplvalues.render" (dict "value" .Values.master.args "context" $) | nindent 12 }} {{- else }} args: + {{- if .Values.master.logPersistence.enabled }} + - -logdir={{ .Values.master.logPersistence.mountPath }} + {{- else }} - -logtostderr=true + {{- end }} - -v={{ .Values.master.logLevel }} - -config_dir=/etc/seaweedfs - master @@ -223,6 +227,13 @@ spec: {{- if .Values.master.persistence.subPath }} subPath: {{ .Values.master.persistence.subPath }} {{- end }} + {{- if .Values.master.logPersistence.enabled }} + - name: logs + mountPath: {{ .Values.master.logPersistence.mountPath }} + {{- if .Values.master.logPersistence.subPath }} + subPath: {{ .Values.master.logPersistence.subPath }} + {{- end }} + {{- end }} - name: empty-dir mountPath: /tmp subPath: tmp-dir @@ -297,20 +308,27 @@ spec: {{- if .Values.master.extraVolumes }} {{- include "common.tplvalues.render" (dict "value" .Values.master.extraVolumes "context" $) | nindent 8 }} {{- end }} - {{- if not .Values.master.persistence.enabled }} + {{- if not .Values.master.persistence.enabled }} - name: data emptyDir: {} - {{- else if .Values.master.persistence.existingClaim }} + {{- else if .Values.master.persistence.existingClaim }} - name: data persistentVolumeClaim: - claimName: {{ .Values.master.persistence.existingClaim }} - {{- else }} + claimName: {{ tpl .Values.master.persistence.existingClaim . }} + {{- end }} + {{- if and .Values.master.logPersistence.enabled .Values.master.logPersistence.existingClaim }} + - name: logs + persistentVolumeClaim: + claimName: {{ tpl .Values.master.logPersistence.existingClaim . }} + {{- end }} + {{- if or (and .Values.master.persistence.enabled (not .Values.master.persistence.existingClaim)) (and .Values.master.logPersistence.enabled (not .Values.master.logPersistence.existingClaim)) }} {{- if .Values.master.persistentVolumeClaimRetentionPolicy.enabled }} persistentVolumeClaimRetentionPolicy: whenDeleted: {{ .Values.master.persistentVolumeClaimRetentionPolicy.whenDeleted }} whenScaled: {{ .Values.master.persistentVolumeClaimRetentionPolicy.whenScaled }} {{- end }} volumeClaimTemplates: + {{- if and .Values.master.persistence.enabled (not .Values.master.persistence.existingClaim) }} - apiVersion: v1 kind: PersistentVolumeClaim metadata: @@ -337,4 +355,33 @@ spec: selector: {{- include "common.tplvalues.render" (dict "value" .Values.master.persistence.selector "context" $) | nindent 10 }} {{- end }} {{- include "common.storage.class" (dict "persistence" .Values.master.persistence "global" .Values.global) | nindent 8 }} + {{- end }} + {{- if and .Values.master.logPersistence.enabled (not .Values.master.logPersistence.existingClaim) }} + - apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: logs + {{- if or .Values.master.logPersistence.annotations .Values.commonAnnotations }} + {{- $claimAnnotations := include "common.tplvalues.merge" (dict "values" .Values.master.logPersistence.annotations .Values.commonAnnotations "context" .) | fromYaml }} + annotations: {{- include "common.tplvalues.render" ( dict "value" $claimAnnotations "context" $ ) | nindent 10 }} + {{- end }} + {{- if .Values.commonLabels }} + labels: {{- include "common.labels.matchLabels" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 10 }} + {{- end }} + spec: + {{- if .Values.master.logPersistence.dataSource }} + dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.master.logPersistence.dataSource "context" $) | nindent 10 }} + {{- end }} + accessModes: + {{- range .Values.master.logPersistence.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.master.logPersistence.size | quote }} + {{- if .Values.master.logPersistence.selector }} + selector: {{- include "common.tplvalues.render" (dict "value" .Values.master.logPersistence.selector "context" $) | nindent 10 }} + {{- end }} + {{- include "common.storage.class" (dict "persistence" .Values.master.logPersistence "global" .Values.global) | nindent 8 }} + {{- end }} {{- end }} diff --git a/helm/seaweedfs/templates/s3/deployment.yaml b/helm/seaweedfs/templates/s3/deployment.yaml index 94bdbe54fab4adc521c59352652da45eb1f35e00..2866f56b36afe958cb7768b969e812a3e29cfc69 100644 --- a/helm/seaweedfs/templates/s3/deployment.yaml +++ b/helm/seaweedfs/templates/s3/deployment.yaml @@ -40,7 +40,7 @@ spec: app.kubernetes.io/component: s3 spec: {{- include "seaweedfs.imagePullSecrets" . | nindent 6 }} - serviceAccountName: {{ template "seaweedfs.serviceAccountName" . }} + serviceAccountName: {{ template "seaweedfs.serviceAccountName" . }} automountServiceAccountToken: {{ .Values.s3.automountServiceAccountToken }} {{- if .Values.s3.hostAliases }} hostAliases: {{- include "common.tplvalues.render" (dict "value" .Values.s3.hostAliases "context" $) | nindent 8 }} @@ -118,6 +118,7 @@ spec: - -metricsPort={{ .Values.s3.containerPorts.metrics }} {{- end }} - -filer={{ printf "%s:%d" (include "seaweedfs.filer.fullname" .) (int .Values.filer.service.ports.http) }} + - -allowEmptyFolder={{ .Values.s3.allowEmptyFolder }} {{- end }} env: - name: BITNAMI_DEBUG @@ -230,6 +231,11 @@ spec: volumes: - name: empty-dir emptyDir: {} + {{- if .Values.usePasswordFiles }} + - name: seaweed-secrets + secret: + secretName: {{ printf "%s-auth" (include "seaweedfs.s3.fullname" .) }} + {{- end }} {{- if and .Values.s3.auth.enabled .Values.s3.auth.existingSecret }} - name: auth secret: diff --git a/helm/seaweedfs/templates/s3/hpa.yaml b/helm/seaweedfs/templates/s3/hpa.yaml index 26aae790f7799e5593cef4365b7759449100794b..4af087ad1f36a7f95d0b53d6c7948bca2f988273 100644 --- a/helm/seaweedfs/templates/s3/hpa.yaml +++ b/helm/seaweedfs/templates/s3/hpa.yaml @@ -26,24 +26,16 @@ spec: - type: Resource resource: name: memory - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.s3.autoscaling.targetMemory }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.s3.autoscaling.targetMemory }} - {{- end }} {{- end }} {{- if .Values.s3.autoscaling.targetCPU }} - type: Resource resource: name: cpu - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.s3.autoscaling.targetCPU }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.s3.autoscaling.targetCPU }} - {{- end }} {{- end }} {{- end }} diff --git a/helm/seaweedfs/templates/s3/ingress.yaml b/helm/seaweedfs/templates/s3/ingress.yaml index 9f55b3aae6ee63d91bdf637448fe9963cc84e2dc..51cfa640d848bbc7da25e6944d0033e8701fe3f5 100644 --- a/helm/seaweedfs/templates/s3/ingress.yaml +++ b/helm/seaweedfs/templates/s3/ingress.yaml @@ -16,7 +16,7 @@ metadata: annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }} {{- end }} spec: - {{- if and .Values.s3.ingress.ingressClassName (eq "true" (include "common.ingress.supportsIngressClassname" .)) }} + {{- if .Values.s3.ingress.ingressClassName }} ingressClassName: {{ .Values.s3.ingress.ingressClassName | quote }} {{- end }} rules: @@ -27,9 +27,7 @@ spec: {{- toYaml .Values.s3.ingress.extraPaths | nindent 10 }} {{- end }} - path: {{ .Values.s3.ingress.path }} - {{- if eq "true" (include "common.ingress.supportsPathType" .) }} pathType: {{ .Values.s3.ingress.pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.s3.fullname" .) "servicePort" "http" "context" $) | nindent 14 }} {{- if not (empty .Values.s3.ingress.hostname )}} host: {{ .Values.s3.ingress.hostname }} @@ -40,9 +38,7 @@ spec: http: paths: - path: {{ default "/" .path }} - {{- if eq "true" (include "common.ingress.supportsPathType" $) }} pathType: {{ default "ImplementationSpecific" .pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.s3.fullname" $) "servicePort" "http" "context" $) | nindent 14 }} {{- end }} {{- if .Values.s3.ingress.extraRules }} diff --git a/helm/seaweedfs/templates/volume/hpa.yaml b/helm/seaweedfs/templates/volume/hpa.yaml index 5c458873f6537b80a67795bd83be138aca17be46..5d7992beb1ac7a4baae71f481a1be77180d0a794 100644 --- a/helm/seaweedfs/templates/volume/hpa.yaml +++ b/helm/seaweedfs/templates/volume/hpa.yaml @@ -26,24 +26,16 @@ spec: - type: Resource resource: name: memory - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.volume.autoscaling.targetMemory }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.volume.autoscaling.targetMemory }} - {{- end }} {{- end }} {{- if .Values.volume.autoscaling.targetCPU }} - type: Resource resource: name: cpu - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.volume.autoscaling.targetCPU }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.volume.autoscaling.targetCPU }} - {{- end }} {{- end }} {{- end }} diff --git a/helm/seaweedfs/templates/volume/ingress.yaml b/helm/seaweedfs/templates/volume/ingress.yaml index 6c3680b94faaf01ec5048705519e8299d3bfdb41..18544f670e071c1eae4ec495327ee4715edd17f8 100644 --- a/helm/seaweedfs/templates/volume/ingress.yaml +++ b/helm/seaweedfs/templates/volume/ingress.yaml @@ -16,7 +16,7 @@ metadata: annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }} {{- end }} spec: - {{- if and .Values.volume.ingress.ingressClassName (eq "true" (include "common.ingress.supportsIngressClassname" .)) }} + {{- if .Values.volume.ingress.ingressClassName }} ingressClassName: {{ .Values.volume.ingress.ingressClassName | quote }} {{- end }} rules: @@ -27,9 +27,7 @@ spec: {{- toYaml .Values.volume.ingress.extraPaths | nindent 10 }} {{- end }} - path: {{ .Values.volume.ingress.path }} - {{- if eq "true" (include "common.ingress.supportsPathType" .) }} pathType: {{ .Values.volume.ingress.pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.volume.fullname" .) "servicePort" "http" "context" $) | nindent 14 }} {{- if not (empty .Values.volume.ingress.hostname )}} host: {{ .Values.volume.ingress.hostname }} @@ -40,9 +38,7 @@ spec: http: paths: - path: {{ default "/" .path }} - {{- if eq "true" (include "common.ingress.supportsPathType" $) }} pathType: {{ default "ImplementationSpecific" .pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.volume.fullname" $) "servicePort" "http" "context" $) | nindent 14 }} {{- end }} {{- if .Values.volume.ingress.extraRules }} diff --git a/helm/seaweedfs/templates/volume/statefulset.yaml b/helm/seaweedfs/templates/volume/statefulset.yaml index 3ba977a7724c8c8c460f7dee623a906b72bf5695..c02cae0d84478ca8403066e1a868b7ac090cc49e 100644 --- a/helm/seaweedfs/templates/volume/statefulset.yaml +++ b/helm/seaweedfs/templates/volume/statefulset.yaml @@ -135,7 +135,11 @@ spec: args: {{- include "common.tplvalues.render" (dict "value" .Values.volume.args "context" $) | nindent 12 }} {{- else }} args: + {{- if .Values.volume.logPersistence.enabled }} + - -logdir={{ .Values.volume.logPersistence.mountPath }} + {{- else }} - -logtostderr=true + {{- end }} - -v={{ .Values.volume.logLevel }} - -config_dir=/etc/seaweedfs - volume @@ -219,7 +223,7 @@ spec: {{- else if .Values.volume.readinessProbe.enabled }} readinessProbe: {{- include "common.tplvalues.render" (dict "value" (omit .Values.volume.readinessProbe "enabled") "context" $) | nindent 12 }} httpGet: - path: /status + path: /healthz port: http {{- end }} {{- if .Values.volume.customStartupProbe }} @@ -242,6 +246,13 @@ spec: subPath: {{ .subPath }} {{- end }} {{- end }} + {{- if .Values.volume.logPersistence.enabled }} + - name: logs + mountPath: {{ .Values.volume.logPersistence.mountPath }} + {{- if .Values.volume.logPersistence.subPath }} + subPath: {{ .Values.volume.logPersistence.subPath }} + {{- end }} + {{- end }} - name: empty-dir mountPath: /tmp subPath: tmp-dir @@ -326,14 +337,19 @@ spec: claimName: {{ .persistence.existingClaim }} {{- end }} {{- end }} + {{- if and .Values.volume.logPersistence.enabled .Values.volume.logPersistence.existingClaim }} + - name: logs + persistentVolumeClaim: + claimName: {{ tpl .Values.volume.logPersistence.existingClaim . }} + {{- end }} {{- if .Values.volume.persistentVolumeClaimRetentionPolicy.enabled }} persistentVolumeClaimRetentionPolicy: whenDeleted: {{ .Values.volume.persistentVolumeClaimRetentionPolicy.whenDeleted }} whenScaled: {{ .Values.volume.persistentVolumeClaimRetentionPolicy.whenScaled }} {{- end }} volumeClaimTemplates: - {{- range .Values.volume.dataVolumes }} - {{- if and .persistence.enabled (not .persistence.existingClaim) }} + {{- range .Values.volume.dataVolumes }} + {{- if and .persistence.enabled (not .persistence.existingClaim) }} - apiVersion: v1 kind: PersistentVolumeClaim metadata: @@ -360,5 +376,33 @@ spec: selector: {{- include "common.tplvalues.render" (dict "value" .persistence.selector "context" $) | nindent 10 }} {{- end }} {{- include "common.storage.class" (dict "persistence" .persistence "global" $.Values.global) | nindent 8 }} - {{- end }} - {{- end }} + {{- end }} + {{- end }} + {{- if and .Values.volume.logPersistence.enabled (not .Values.volume.logPersistence.existingClaim) }} + - apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: logs + {{- if or .Values.volume.logPersistence.annotations .Values.commonAnnotations }} + {{- $claimAnnotations := include "common.tplvalues.merge" (dict "values" .Values.volume.logPersistence.annotations .Values.commonAnnotations "context" .) | fromYaml }} + annotations: {{- include "common.tplvalues.render" ( dict "value" $claimAnnotations "context" $ ) | nindent 10 }} + {{- end }} + {{- if .Values.commonLabels }} + labels: {{- include "common.labels.matchLabels" ( dict "customLabels" .Values.commonLabels "context" $ ) | nindent 10 }} + {{- end }} + spec: + {{- if .Values.volume.logPersistence.dataSource }} + dataSource: {{- include "common.tplvalues.render" (dict "value" .Values.volume.logPersistence.dataSource "context" $) | nindent 10 }} + {{- end }} + accessModes: + {{- range .Values.volume.logPersistence.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.volume.logPersistence.size | quote }} + {{- if .Values.volume.logPersistence.selector }} + selector: {{- include "common.tplvalues.render" (dict "value" .Values.volume.logPersistence.selector "context" $) | nindent 10 }} + {{- end }} + {{- include "common.storage.class" (dict "persistence" .Values.volume.logPersistence "global" .Values.global) | nindent 8 }} + {{- end }} diff --git a/helm/seaweedfs/templates/webadv/hpa.yaml b/helm/seaweedfs/templates/webadv/hpa.yaml index e6434c258b6694736744052686dbda514797bc42..9c2208c369b6e3de2bd84ba1ff86c6d1c78d8324 100644 --- a/helm/seaweedfs/templates/webadv/hpa.yaml +++ b/helm/seaweedfs/templates/webadv/hpa.yaml @@ -26,24 +26,16 @@ spec: - type: Resource resource: name: memory - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.webdav.autoscaling.targetMemory }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.webdav.autoscaling.targetMemory }} - {{- end }} {{- end }} {{- if .Values.webdav.autoscaling.targetCPU }} - type: Resource resource: name: cpu - {{- if semverCompare "<1.23-0" (include "common.capabilities.kubeVersion" .) }} - targetAverageUtilization: {{ .Values.webdav.autoscaling.targetCPU }} - {{- else }} target: type: Utilization averageUtilization: {{ .Values.webdav.autoscaling.targetCPU }} - {{- end }} {{- end }} {{- end }} diff --git a/helm/seaweedfs/templates/webadv/ingress.yaml b/helm/seaweedfs/templates/webadv/ingress.yaml index a42d6e9e3491709a4d69bdafd6eabe8ecbd2609b..821216f34d5011acb6473216253bf61f8aecb533 100644 --- a/helm/seaweedfs/templates/webadv/ingress.yaml +++ b/helm/seaweedfs/templates/webadv/ingress.yaml @@ -16,7 +16,7 @@ metadata: annotations: {{- include "common.tplvalues.render" ( dict "value" $annotations "context" $ ) | nindent 4 }} {{- end }} spec: - {{- if and .Values.webdav.ingress.ingressClassName (eq "true" (include "common.ingress.supportsIngressClassname" .)) }} + {{- if .Values.webdav.ingress.ingressClassName }} ingressClassName: {{ .Values.webdav.ingress.ingressClassName | quote }} {{- end }} rules: @@ -27,9 +27,7 @@ spec: {{- toYaml .Values.webdav.ingress.extraPaths | nindent 10 }} {{- end }} - path: {{ .Values.webdav.ingress.path }} - {{- if eq "true" (include "common.ingress.supportsPathType" .) }} pathType: {{ .Values.webdav.ingress.pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.webdav.fullname" .) "servicePort" (ternary "https" "http" .Values.webdav.tls.enabled) "context" $) | nindent 14 }} {{- if not (empty .Values.webdav.ingress.hostname )}} host: {{ .Values.webdav.ingress.hostname }} @@ -40,9 +38,7 @@ spec: http: paths: - path: {{ default "/" .path }} - {{- if eq "true" (include "common.ingress.supportsPathType" $) }} pathType: {{ default "ImplementationSpecific" .pathType }} - {{- end }} backend: {{- include "common.ingress.backend" (dict "serviceName" (include "seaweedfs.webdav.fullname" $) "servicePort" ("https" "http" .Values.webdav.tls.enabled) "context" $) | nindent 14 }} {{- end }} {{- if .Values.webdav.ingress.extraRules }} diff --git a/helm/seaweedfs/values.yaml b/helm/seaweedfs/values.yaml index cbe833459d19a54b31f90cbfe31fc1e7569f695e..40321455a2a7e891b626ddca370a7512afa2de42 100644 --- a/helm/seaweedfs/values.yaml +++ b/helm/seaweedfs/values.yaml @@ -85,7 +85,7 @@ diagnosticMode: image: registry: docker.io repository: bitnami/seaweedfs - tag: 3.80.0-debian-12-r1 + tag: 3.87.0-debian-12-r1 digest: "" ## Specify a imagePullPolicy ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images @@ -314,7 +314,7 @@ master: drop: ["ALL"] seccompProfile: type: "RuntimeDefault" - ## @param master.logLevel Master Server log level [0|1|2|3|4] + ## @param master.logLevel Master Server log level (0, 1, 2, 3, or 4) ## logLevel: 1 ## @param master.bindAddress Master Server bind address @@ -324,7 +324,7 @@ master: ## volumeSizeLimitMB: 1000 ## @param master.config Master Server configuration - ## Specify content for master.yml + ## Specify content for master.toml ## config: "" ## @param master.existingConfigmap The name of an existing ConfigMap with your custom configuration for Master Server @@ -716,11 +716,11 @@ master: ## @section Master Server Persistence Parameters ## - ## Enable persistence using Persistent Volume Claims + ## Enable Master data persistence using Persistent Volume Claims ## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/ ## persistence: - ## @param master.persistence.enabled Enable persistence on Master Server using Persistent Volume Claims + ## @param master.persistence.enabled Enable data persistence on Master Server using Persistent Volume Claims ## enabled: true ## @param master.persistence.mountPath Path to mount the volume at. @@ -747,7 +747,7 @@ master: ## @param master.persistence.size Size of data volume ## size: 8Gi - ## @param master.persistence.existingClaim The name of an existing PVC to use for persistence + ## @param master.persistence.existingClaim The name of an existing PVC to use for data persistence ## existingClaim: "" ## @param master.persistence.selector Selector to match an existing Persistent Volume for data PVC @@ -761,6 +761,51 @@ master: ## @param master.persistence.dataSource Custom PVC data source ## dataSource: {} + ## Enable Master logs persistence using Persistent Volume Claims + ## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/ + ## + logPersistence: + ## @param master.logPersistence.enabled Enable logs persistence on Master Server using Persistent Volume Claims + ## + enabled: false + ## @param master.logPersistence.mountPath Path to mount the volume at. + ## + mountPath: /logs + ## @param master.logPersistence.subPath The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services + ## + subPath: "" + ## @param master.logPersistence.storageClass Storage class of backing PVC + ## If defined, storageClassName: <storageClass> + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## + storageClass: "" + ## @param master.logPersistence.annotations Persistent Volume Claim annotations + ## + annotations: {} + ## @param master.logPersistence.accessModes Persistent Volume Access Modes + ## + accessModes: + - ReadWriteOnce + ## @param master.logPersistence.size Size of logs volume + ## + size: 8Gi + ## @param master.logPersistence.existingClaim The name of an existing PVC to use for logs persistence + ## + existingClaim: "" + ## @param master.logPersistence.selector Selector to match an existing Persistent Volume for logs PVC + ## If set, the PVC can't have a PV dynamically provisioned for it + ## E.g. + ## selector: + ## matchLabels: + ## app: my-app + ## + selector: {} + ## @param master.logPersistence.dataSource Custom PVC data source + ## + dataSource: {} ## persistentVolumeClaimRetentionPolicy ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention ## @param master.persistentVolumeClaimRetentionPolicy.enabled Controls if and how PVCs are deleted during the lifecycle of the Master Server StatefulSet @@ -964,7 +1009,7 @@ volume: drop: ["ALL"] seccompProfile: type: "RuntimeDefault" - ## @param volume.logLevel Volume Server log level [0|1|2|3|4] + ## @param volume.logLevel Volume Server log level (0, 1, 2, 3, or 4) ## logLevel: 1 ## @param volume.bindAddress Volume Server bind address @@ -974,7 +1019,7 @@ volume: ## publicUrl: "" ## @param volume.config Volume Server configuration - ## Specify content for volume.yml + ## Specify content for volume.toml ## config: "" ## @param volume.existingConfigmap The name of an existing ConfigMap with your custom configuration for Volume Server @@ -1421,6 +1466,51 @@ volume: ## @param volume.dataVolumes[0].persistence.dataSource Custom PVC data source ## dataSource: {} + ## Enable Volume logs persistence using Persistent Volume Claims + ## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/ + ## + logPersistence: + ## @param volume.logPersistence.enabled Enable logs persistence on Volume Server using Persistent Volume Claims + ## + enabled: false + ## @param volume.logPersistence.mountPath Path to mount the volume at. + ## + mountPath: /logs + ## @param volume.logPersistence.subPath The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services + ## + subPath: "" + ## @param volume.logPersistence.storageClass Storage class of backing PVC + ## If defined, storageClassName: <storageClass> + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## + storageClass: "" + ## @param volume.logPersistence.annotations Persistent Volume Claim annotations + ## + annotations: {} + ## @param volume.logPersistence.accessModes Persistent Volume Access Modes + ## + accessModes: + - ReadWriteOnce + ## @param volume.logPersistence.size Size of logs volume + ## + size: 8Gi + ## @param volume.logPersistence.existingClaim The name of an existing PVC to use for logs persistence + ## + existingClaim: "" + ## @param volume.logPersistence.selector Selector to match an existing Persistent Volume for logs PVC + ## If set, the PVC can't have a PV dynamically provisioned for it + ## E.g. + ## selector: + ## matchLabels: + ## app: my-app + ## + selector: {} + ## @param volume.logPersistence.dataSource Custom PVC data source + ## + dataSource: {} ## persistentVolumeClaimRetentionPolicy ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention ## @param volume.persistentVolumeClaimRetentionPolicy.enabled Controls if and how PVCs are deleted during the lifecycle of the Volume Server StatefulSet @@ -1627,14 +1717,14 @@ filer: drop: ["ALL"] seccompProfile: type: "RuntimeDefault" - ## @param filer.logLevel Filer Server log level [0|1|2|3|4] + ## @param filer.logLevel Filer Server log level (0, 1, 2, 3, or 4) ## logLevel: 1 ## @param filer.bindAddress Filer Server bind address ## bindAddress: 0.0.0.0 ## @param filer.config Filer Server configuration - ## Specify content for filer.yml + ## Specify content for filer.toml ## config: | [leveldb2] @@ -1642,6 +1732,13 @@ filer: ## @param filer.existingConfigmap The name of an existing ConfigMap with your custom configuration for Filer Server ## existingConfigmap: "" + ## @param filer.notificationConfig Filer Server notification configuration + ## Specify content for custom notification.toml + ## + notificationConfig: "" + ## @param filer.existingNotificationConfigmap The name of an existing ConfigMap with your custom notification configuration for Filer Server + ## + existingNotificationConfigmap: "" ## @param filer.command Override default Filer Server container command (useful when using custom images) ## command: [] @@ -2025,6 +2122,65 @@ filer: ## extraRules: [] + ## @section Filer Server Persistence Parameters + ## + + ## Enable Filer logs persistence using Persistent Volume Claims + ## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/ + ## + logPersistence: + ## @param filer.logPersistence.enabled Enable logs persistence on Filer Server using Persistent Volume Claims + ## + enabled: false + ## @param filer.logPersistence.mountPath Path to mount the volume at. + ## + mountPath: /logs + ## @param filer.logPersistence.subPath The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services + ## + subPath: "" + ## @param filer.logPersistence.storageClass Storage class of backing PVC + ## If defined, storageClassName: <storageClass> + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + ## + storageClass: "" + ## @param filer.logPersistence.annotations Persistent Volume Claim annotations + ## + annotations: {} + ## @param filer.logPersistence.accessModes Persistent Volume Access Modes + ## + accessModes: + - ReadWriteOnce + ## @param filer.logPersistence.size Size of logs volume + ## + size: 8Gi + ## @param filer.logPersistence.existingClaim The name of an existing PVC to use for logs persistence + ## + existingClaim: "" + ## @param filer.logPersistence.selector Selector to match an existing Persistent Volume for logs PVC + ## If set, the PVC can't have a PV dynamically provisioned for it + ## E.g. + ## selector: + ## matchLabels: + ## app: my-app + ## + selector: {} + ## @param filer.logPersistence.dataSource Custom PVC data source + ## + dataSource: {} + ## persistentVolumeClaimRetentionPolicy + ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention + ## @param filer.persistentVolumeClaimRetentionPolicy.enabled Controls if and how PVCs are deleted during the lifecycle of the Master Server StatefulSet + ## @param filer.persistentVolumeClaimRetentionPolicy.whenScaled Volume retention behavior when the replica count of the StatefulSet is reduced + ## @param filer.persistentVolumeClaimRetentionPolicy.whenDeleted Volume retention behavior that applies when the StatefulSet is deleted + ## + persistentVolumeClaimRetentionPolicy: + enabled: false + whenScaled: Retain + whenDeleted: Retain + ## @section Filer Server Metrics Parameters ## metrics: @@ -2220,21 +2376,23 @@ s3: drop: ["ALL"] seccompProfile: type: "RuntimeDefault" - ## @param s3.logLevel Amazon S3 API log level [0|1|2|3|4] + ## @param s3.logLevel Amazon S3 API log level (0, 1, 2, 3, or 4) ## logLevel: 1 ## @param s3.bindAddress Amazon S3 API bind address ## bindAddress: 0.0.0.0 + ## @param s3.allowEmptyFolder Allow empty folders in Amazon S3 API + allowEmptyFolder: true ## S3 Authentication ## ref: https://github.com/seaweedfs/seaweedfs/wiki/Amazon-S3-API#s3-authentication ## @param s3.auth.enabled Enable Amazon S3 API authentication ## @param s3.auth.existingSecret Existing secret with Amazon S3 API authentication configuration ## @param s3.auth.existingSecretConfigKey Key of the above existing secret with S3 API authentication configuration, defaults to `config.json` - ## @param s3.auth.adminAccessKeyId Amazon S3 API access key with admin privileges. Ignored if `security.mTLS.volume.existingSecret` is set - ## @param s3.auth.adminSecretAccessKey Amazon S3 API secret key with admin privileges. Ignored if `security.mTLS.volume.existingSecret` is set - ## @param s3.auth.readAccessKeyId Amazon S3 API read access key with read-only privileges. Ignored if `security.mTLS.volume.existingSecret` is set - ## @param s3.auth.readSecretAccessKey Amazon S3 API read secret key with read-only privileges. Ignored if `security.mTLS.volume.existingSecret` is set + ## @param s3.auth.adminAccessKeyId Amazon S3 API access key with admin privileges. Ignored if `s3.auth.existingSecret` is set + ## @param s3.auth.adminSecretAccessKey Amazon S3 API secret key with admin privileges. Ignored if `s3.auth.existingSecret` is set + ## @param s3.auth.readAccessKeyId Amazon S3 API read access key with read-only privileges. Ignored if `s3.auth.existingSecret` is set + ## @param s3.auth.readSecretAccessKey Amazon S3 API read secret key with read-only privileges. Ignored if `s3.auth.existingSecret` is set ## auth: enabled: false @@ -2814,7 +2972,7 @@ webdav: drop: ["ALL"] seccompProfile: type: "RuntimeDefault" - ## @param webdav.logLevel WebDAV log level [0|1|2|3|4] + ## @param webdav.logLevel WebDAV log level (0, 1, 2, 3, or 4) ## logLevel: 1 ## TLS configuration for WebDAV @@ -3223,6 +3381,326 @@ webdav: ## extraRules: [] +## @section IAM Parameters +## +iam: + ## @param iam.enabled Enable IAM deployment + ## + enabled: false + ## @param iam.replicaCount Number of IAM replicas to deploy + ## + replicaCount: 1 + ## @param iam.containerPorts.http IAM HTTP container port + ## + containerPorts: + http: 8111 + ## Configure extra options for IAM containers' liveness and readiness probes + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param iam.livenessProbe.enabled Enable livenessProbe on IAM containers + ## @param iam.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe + ## @param iam.livenessProbe.periodSeconds Period seconds for livenessProbe + ## @param iam.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe + ## @param iam.livenessProbe.failureThreshold Failure threshold for livenessProbe + ## @param iam.livenessProbe.successThreshold Success threshold for livenessProbe + ## + livenessProbe: + enabled: true + initialDelaySeconds: 30 + timeoutSeconds: 30 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + ## @param iam.readinessProbe.enabled Enable readinessProbe on IAM containers + ## @param iam.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe + ## @param iam.readinessProbe.periodSeconds Period seconds for readinessProbe + ## @param iam.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe + ## @param iam.readinessProbe.failureThreshold Failure threshold for readinessProbe + ## @param iam.readinessProbe.successThreshold Success threshold for readinessProbe + ## + readinessProbe: + enabled: true + initialDelaySeconds: 30 + timeoutSeconds: 30 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + ## @param iam.startupProbe.enabled Enable startupProbe on IAM containers + ## @param iam.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe + ## @param iam.startupProbe.periodSeconds Period seconds for startupProbe + ## @param iam.startupProbe.timeoutSeconds Timeout seconds for startupProbe + ## @param iam.startupProbe.failureThreshold Failure threshold for startupProbe + ## @param iam.startupProbe.successThreshold Success threshold for startupProbe + ## + startupProbe: + enabled: false + initialDelaySeconds: 5 + periodSeconds: 5 + timeoutSeconds: 1 + failureThreshold: 15 + successThreshold: 1 + + ## IAM resource requests and limits + ## ref: http://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + ## @param iam.resourcesPreset Set IAM container resources according to one common preset (allowed values: none, nano, small, medium, large, xlarge, 2xlarge). This is ignored if webdav.resources is set (webdav.resources is recommended for production). + ## More information: https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15 + ## + resourcesPreset: "nano" + ## @param iam.resources Set IAM container requests and limits for different resources like CPU or memory (essential for production workloads) + ## Example: + ## resources: + ## requests: + ## cpu: 2 + ## memory: 512Mi + ## limits: + ## cpu: 3 + ## memory: 1024Mi + ## + resources: {} + ## Configure Pods Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param iam.podSecurityContext.enabled Enable IAM pods' Security Context + ## @param iam.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy for IAM pods + ## @param iam.podSecurityContext.sysctls Set kernel settings using the sysctl interface for IAM pods + ## @param iam.podSecurityContext.supplementalGroups Set filesystem extra groups for IAM pods + ## @param iam.podSecurityContext.fsGroup Set fsGroup in IAM pods' Security Context + ## + podSecurityContext: + enabled: true + fsGroupChangePolicy: Always + sysctls: [] + supplementalGroups: [] + fsGroup: 1001 + ## Configure Container Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + ## @param iam.containerSecurityContext.enabled Enabled IAM container' Security Context + ## @param iam.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in IAM container + ## @param iam.containerSecurityContext.runAsUser Set runAsUser in IAM container' Security Context + ## @param iam.containerSecurityContext.runAsGroup Set runAsGroup in IAM container' Security Context + ## @param iam.containerSecurityContext.runAsNonRoot Set runAsNonRoot in IAM container' Security Context + ## @param iam.containerSecurityContext.readOnlyRootFilesystem Set readOnlyRootFilesystem in IAM container' Security Context + ## @param iam.containerSecurityContext.privileged Set privileged in IAM container' Security Context + ## @param iam.containerSecurityContext.allowPrivilegeEscalation Set allowPrivilegeEscalation in IAM container' Security Context + ## @param iam.containerSecurityContext.capabilities.drop List of capabilities to be dropped in IAM container + ## @param iam.containerSecurityContext.seccompProfile.type Set seccomp profile in IAM container + ## + containerSecurityContext: + enabled: true + seLinuxOptions: {} + runAsUser: 1001 + runAsGroup: 1001 + runAsNonRoot: true + readOnlyRootFilesystem: true + privileged: false + allowPrivilegeEscalation: false + capabilities: + drop: ["ALL"] + seccompProfile: + type: "RuntimeDefault" + ## @param iam.logLevel IAM log level (0, 1, 2, 3, or 4) + ## + logLevel: 1 + ## @param iam.command Override default IAM container command (useful when using custom images) + ## + command: [] + ## @param iam.args Override default IAM container args (useful when using custom images) + ## + args: [] + ## @param iam.automountServiceAccountToken Mount Service Account token in IAM pods + ## + automountServiceAccountToken: false + ## @param iam.hostAliases IAM pods host aliases + ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ + ## + hostAliases: [] + ## @param iam.statefulsetAnnotations Annotations for IAM statefulset + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + ## + statefulsetAnnotations: {} + ## @param iam.podLabels Extra labels for IAM pods + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + ## + podLabels: {} + ## @param iam.podAnnotations Annotations for IAM pods + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + ## + podAnnotations: {} + ## @param iam.podAffinityPreset Pod affinity preset. Ignored if `iam.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAffinityPreset: "" + ## @param iam.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `iam.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node iam.affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + nodeAffinityPreset: + ## @param iam.nodeAffinityPreset.type Node affinity preset type. Ignored if `iam.affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param iam.nodeAffinityPreset.key Node label key to match. Ignored if `iam.affinity` is set + ## + key: "" + ## @param iam.nodeAffinityPreset.values Node label values to match. Ignored if `iam.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param iam.affinity Affinity for IAM pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## NOTE: `iam.podAffinityPreset`, `iam.podAntiAffinityPreset`, and `iam.nodeAffinityPreset` will be ignored when it's set + ## + affinity: {} + ## @param iam.nodeSelector Node labels for IAM pods assignment + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ + ## + nodeSelector: {} + ## @param iam.tolerations Tolerations for IAM pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## @param iam.updateStrategy.type IAM deployment strategy type + ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies + ## + updateStrategy: + ## Can be set to RollingUpdate or Recreate + ## + type: RollingUpdate + ## @param iam.priorityClassName IAM pods' priorityClassName + ## + priorityClassName: "" + ## @param iam.topologySpreadConstraints Topology Spread Constraints for IAM pod assignment spread across your cluster among failure-domains + ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods + ## + topologySpreadConstraints: [] + ## @param iam.schedulerName Name of the k8s scheduler (other than default) for IAM pods + ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ + ## + schedulerName: "" + ## @param iam.terminationGracePeriodSeconds Seconds IAM pods need to terminate gracefully + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods + ## + terminationGracePeriodSeconds: "" + ## @param iam.lifecycleHooks for IAM containers to automate configuration before or after startup + ## + lifecycleHooks: {} + ## @param iam.extraEnvVars Array with extra environment variables to add to IAM containers + ## e.g: + ## extraEnvVars: + ## - name: FOO + ## value: "bar" + ## + extraEnvVars: [] + ## @param iam.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for IAM containers + ## + extraEnvVarsCM: "" + ## @param iam.extraEnvVarsSecret Name of existing Secret containing extra env vars for IAM containers + ## + extraEnvVarsSecret: "" + ## @param iam.extraVolumes Optionally specify extra list of additional volumes for the IAM pods + ## + extraVolumes: [] + ## @param iam.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the IAM containers + ## + extraVolumeMounts: [] + ## @param iam.sidecars Add additional sidecar containers to the IAM pods + ## e.g: + ## sidecars: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## ports: + ## - name: portname + ## containerPort: 1234 + ## + sidecars: [] + ## @param iam.initContainers Add additional init containers to the IAM pods + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ + ## e.g: + ## initContainers: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## command: ['sh', '-c', 'echo "hello world"'] + ## + initContainers: [] + ## Pod Disruption Budget configuration + ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb + ## @param iam.pdb.create Enable/disable a Pod Disruption Budget creation + ## @param iam.pdb.minAvailable Minimum number/percentage of pods that should remain scheduled + ## @param iam.pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable. Defaults to `1` if both `iam.pdb.minAvailable` and `iam.pdb.maxUnavailable` are empty. + ## + pdb: + create: true + minAvailable: "" + maxUnavailable: "" + + + ## @section IAM Traffic Exposure Parameters + ## + + ## IAM service parameters + ## + service: + ## @param iam.service.type IAM service type + ## + type: ClusterIP + ## @param iam.service.ports.http IAM service HTTP port (HTTPS if `iam.tls.enabled` is `true`) + ## + ports: + http: 8111 + ## Node ports to expose + ## @param iam.service.nodePorts.http Node port for HTTP (HTTPS if `iam.tls.enabled` is `true`) + ## NOTE: choose port between <30000-32767> + ## + nodePorts: + http: "" + ## @param iam.service.clusterIP IAM service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: "" + ## @param iam.service.loadBalancerIP IAM service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: "" + ## @param iam.service.loadBalancerSourceRanges IAM service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param iam.service.externalTrafficPolicy IAM service external traffic policy + ## ref http://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param iam.service.annotations Additional custom annotations for IAM service + ## + annotations: {} + ## @param iam.service.extraPorts Extra ports to expose in IAM service (normally used with the `sidecars` value) + ## + extraPorts: [] + ## @param iam.service.sessionAffinity Control where client requests go, to the same pod or round-robin + ## Values: ClientIP or None + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/ + ## + sessionAffinity: None + ## @param iam.service.sessionAffinityConfig Additional settings for the sessionAffinity + ## sessionAffinityConfig: + ## clientIP: + ## timeoutSeconds: 300 + ## + sessionAffinityConfig: {} + ## Headless service properties + ## + ## Network Policies for IAM + ## Ref: https://kubernetes.io/docs/concepts/services-networking/network-policies/ + ## + ## @section Init Container Parameters ## @@ -3245,7 +3723,7 @@ volumePermissions: image: registry: docker.io repository: bitnami/os-shell - tag: 12-debian-12-r33 + tag: 12-debian-12-r43 pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. @@ -3329,7 +3807,7 @@ mariadb: image: registry: docker.io repository: bitnami/mariadb - tag: 11.4.4-debian-12-r1 + tag: 11.4.5-debian-12-r12 digest: "" ## Specify a imagePullPolicy ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images @@ -3350,7 +3828,6 @@ mariadb: ## @param mariadb.auth.database MariaDB custom database ## @param mariadb.auth.username MariaDB custom user name ## @param mariadb.auth.password MariaDB custom user password - ## @param mariadb.auth.usePasswordFiles Mount credentials as a file instead of using an environment variable ## ref: https://github.com/bitnami/containers/tree/main/bitnami/mariadb#setting-the-root-password-on-first-run ## https://github.com/bitnami/containers/blob/main/bitnami/mariadb/README.md#creating-a-database-on-first-run ## https://github.com/bitnami/containers/blob/main/bitnami/mariadb/README.md#creating-a-database-user-on-first-run @@ -3360,7 +3837,6 @@ mariadb: database: bitnami_seaweedfs username: bn_seaweedfs password: "" - usePasswordFiles: false ## @param mariadb.initdbScripts [object] Specify dictionary of scripts to be run at first boot ## initdbScripts: @@ -3430,7 +3906,7 @@ postgresql: image: registry: docker.io repository: bitnami/postgresql - tag: 17.2.0-debian-12-r2 + tag: 17.4.0-debian-12-r19 digest: "" ## Specify a imagePullPolicy ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images @@ -3538,6 +4014,10 @@ externalDatabase: ## NOTE: When it's set, the `externalDatabase.password` parameter is ignored ## existingSecret: "" + ## @param externalDatabase.waitForDatabaseEnabled Whether to check for external database before starting seaweedfs containers + ## + waitForDatabaseEnabled: true + ## ## Init external database job ## initDatabaseJob: diff --git a/lib/java/dbrepo-core/pom.xml b/lib/java/dbrepo-core/pom.xml index cbe2b4bf84718b6a849d84a8197a499dd314733e..487d9c9215c5a409ffa9c75bae7191e53140ee4c 100644 --- a/lib/java/dbrepo-core/pom.xml +++ b/lib/java/dbrepo-core/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>3.3.5</version> + <version>3.4.0</version> </parent> <organization> @@ -37,7 +37,7 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <keycloak.version>26.0.4</keycloak.version> <mapstruct.version>1.6.3</mapstruct.version> - <spring-cloud.version>4.1.4</spring-cloud.version> + <spring-cloud.version>4.2.1</spring-cloud.version> <jackson-datatype.version>2.15.0</jackson-datatype.version> <springdoc-openapi.version>2.8.5</springdoc-openapi.version> </properties> diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Identifier.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Identifier.java index 04471509c6cd711b745f1a9060227d869f2dcb33..ac0559fa96fea27761b1b95f86db7da77563aef4 100644 --- a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Identifier.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/entity/identifier/Identifier.java @@ -33,6 +33,7 @@ import java.util.UUID; @NamedQuery(name = "Identifier.findSubsetIdentifier", query = "select i from Identifier i where i.database.id = ?1 and i.queryId = ?2 and i.type = 'SUBSET' ORDER BY i.id DESC"), @NamedQuery(name = "Identifier.findViewIdentifier", query = "select i from Identifier i where i.database.id = ?1 and i.viewId = ?2 and i.type = 'VIEW' ORDER BY i.id DESC"), @NamedQuery(name = "Identifier.findEarliest", query = "select i from Identifier i ORDER BY i.created ASC limit 1"), + @NamedQuery(name = "Identifier.findAll", query = "select i from Identifier i ORDER BY i.created DESC"), }) public class Identifier implements Serializable { diff --git a/lib/python/pyproject.toml b/lib/python/pyproject.toml index 956d1241d102158b7c97645c86663c862046fbbf..d235ee9ae1976a6ffa426e7dbbf6d19e42064bfa 100644 --- a/lib/python/pyproject.toml +++ b/lib/python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "dbrepo" -version = "1.8.2rc6" +version = "1.8.2" description = "DBRepo Python Library" keywords = [ "DBRepo", @@ -23,7 +23,6 @@ dependencies = [ "requests >= 2.31", "pika", "pydantic", - "tuspy", "pandas" ] @@ -35,6 +34,6 @@ build-backend = "setuptools.build_meta" [project.urls] Homepage = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/" -Documentation = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.6/python/" +Documentation = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/python/" Issues = "https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues" Source = "https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/" \ No newline at end of file diff --git a/lib/python/setup.py b/lib/python/setup.py index bac2d6ad1217de2f44cd1877e3eb6f0a4f1b47ca..bb75727d7674ce488ed12fdd55dc011c64540d92 100644 --- a/lib/python/setup.py +++ b/lib/python/setup.py @@ -2,7 +2,7 @@ from distutils.core import setup setup(name="dbrepo", - version="1.8.2rc6", + version="1.8.2", description="A library for communicating with DBRepo", url="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.8/", author="Martin Weise", diff --git a/make/build.mk b/make/build.mk index 22e2c384c573a62bf6e404923a5a811616e84b71..6e2306052ebc7363eb6781d1b09bce53717c244a 100644 --- a/make/build.mk +++ b/make/build.mk @@ -21,21 +21,18 @@ build-ui: ## Build the UI. .PHONY: build-python-lib build-python-lib: ## Build the Python Library. - rm -rf ./dbrepo-analyse-service/venv/ ./dbrepo-analyse-service/Pipfile.lock ./dbrepo-analyse-service/lib/* - rm -rf ./dbrepo-search-service/venv/ ./dbrepo-search-service/Pipfile.lock ./dbrepo-search-service/lib/* - rm -rf ./dbrepo-dashboard-service/venv/ ./dbrepo-dashboard-service/Pipfile.lock ./dbrepo-dashboard-service/lib/* + rm -rf ./dbrepo-analyse-service/lib/* ./dbrepo-search-service/lib/* ./dbrepo-dashboard-service/lib/* python3 -m build --sdist ./lib/python python3 -m build --wheel ./lib/python cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-analyse-service/lib - (cd ./dbrepo-analyse-service && python3 -m venv venv && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) + PIPENV_PIPFILE=./dbrepo-analyse-service/Pipfile pipenv lock cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-search-service/lib - (cd ./dbrepo-search-service && python3 -m venv venv && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) + PIPENV_PIPFILE=./dbrepo-search-service/Pipfile pipenv lock cp -r ./lib/python/dist/dbrepo-${APP_VERSION}* ./dbrepo-dashboard-service/lib - (cd ./dbrepo-dashboard-service && python3 -m venv venv && PIPENV_IGNORE_VIRTUALENVS=1 pipenv install --dev) + PIPENV_PIPFILE=./dbrepo-dashboard-service/Pipfile pipenv lock .PHONY: build-helm build-helm: ## Build the DBRepo and DBRepo MariaDB Galera Helm Charts. - helm dependency update ./helm/seaweedfs helm package ./helm/seaweedfs --destination ./build helm dependency update ./helm/dbrepo helm package ./helm/dbrepo --destination ./build diff --git a/make/dev.mk b/make/dev.mk index e865e2d9dd1116ff801a549811c087ff31056019..e580b178b37af91fb32cedf523478c473db4ba62 100644 --- a/make/dev.mk +++ b/make/dev.mk @@ -12,7 +12,7 @@ stop-dev: ## Stop the development deployment and remove all data. .PHONY: package-config package-config: ## Package the config files - mkdir -p ./.docker/config/{dashboards,provisioning} + mkdir -p ./.docker/config cp ./dbrepo-auth-service/dbrepo-realm.json ./.docker/config cp ./dbrepo-auth-service/import-realms.sh ./.docker/config cp ./dbrepo-auth-service/master-realm.json ./.docker/config @@ -24,6 +24,12 @@ package-config: ## Package the config files cp ./dbrepo-broker-service/definitions.json ./.docker/config cp ./dbrepo-broker-service/advanced.config ./.docker/config cp ./dbrepo-gateway-service/dbrepo.conf ./.docker/config + cp -r ./dbrepo-dashboard-ui/dashboards ./.docker/config + cp -r ./dbrepo-dashboard-ui/provisioning ./.docker/config + cp ./dbrepo-dashboard-ui/grafana.ini ./.docker/config/grafana.ini + cp ./dbrepo-dashboard-ui/ldap.toml ./.docker/config/ldap.toml + cp ./dbrepo-logging-service/fluentbit.conf ./.docker/config + cp ./dbrepo-logging-service/fluentbit_parser.conf ./.docker/config cp ./dbrepo-metric-db/prometheus.yml ./.docker/config cp ./dbrepo-storage-service/s3_config.json ./.docker/config cp ./dbrepo-auth-service/listeners/target/create-event-listener.jar ./.docker/config diff --git a/mkdocs.yml b/mkdocs.yml index 7060289640e3f0034d0e20405526d9b512aa26ed..5051d9a3280ca8508dc30a1da884dcbe0cf09be6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -20,6 +20,7 @@ nav: - Data Versioning: concepts/data-versioning.md - Dashboards: concepts/dashboards.md - Data Visibility: concepts/data-visibility.md + - Logging: concepts/logging.md - Messaging: concepts/messaging.md - Monitoring: concepts/monitoring.md - Persistent Identifier: concepts/pid.md