diff --git a/.env b/.env index a2946345..cd73347a 100755 --- a/.env +++ b/.env @@ -15,8 +15,8 @@ # https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration ###> symfony/framework-bundle ### -APP_ENV=dev -#APP_ENV=prod +#APP_ENV=dev +APP_ENV=prod APP_SECRET=f762ce98c98b7579d2d6a6c0e5eb1d39 ###< symfony/framework-bundle ### @@ -28,4 +28,8 @@ ELASTIC_AUTH=elasticsearch:9200 REDIS_AUTH=tcp://redis?password=redis-password RABBITMQ_AUTH=amqp://user:password@rabbitmq:5672 -REFERENCE_DATASET_VERSION=0.0.28 +S3_ENDPOINT=http://minio:9000 +S3_ACCESS_KEY_ID=accessKey +S3_SECRET_ACCESS_KEY=secretKey + +REFERENCE_DATASET_VERSION=0.0.33 diff --git a/.env.test b/.env.test index 5138e28b..b329fa2d 100644 --- a/.env.test +++ b/.env.test @@ -2,8 +2,6 @@ KERNEL_CLASS='App\Kernel' APP_SECRET='$ecretf0rt3st' SYMFONY_DEPRECATIONS_HELPER=999999 -PANTHER_APP_ENV=panther -PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots API_DOMAIN=http://api CYPHER_AUTH=bolt://neo4j:password@neo4j @@ -11,3 +9,7 @@ ELASTIC_AUTH=elasticsearch:9200 MONGO_AUTH=mongodb://mongodb:password@mongodb:27017 REDIS_AUTH=tcp://redis?password=redis-password ANONYMOUS_USER_UUID=2d376349-c5e2-42c8-8ce0-d6f525256cf7 + +S3_ENDPOINT=http://minio:9000 +S3_ACCESS_KEY_ID=accessKey +S3_SECRET_ACCESS_KEY=secretKey diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 498b5bbb..7728dc1c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,4 @@ /.github/ @ember-nexus/secops /docker/ @ember-nexus/secops *.env @ember-nexus/secops +docker-compose*.yml @ember-nexus/secops diff --git a/.github/workflows/ci-check-upstream-dependency-alpine.yml b/.github/workflows/ci-check-upstream-dependency-alpine.yml index 8c3030a7..f10786bc 100644 --- a/.github/workflows/ci-check-upstream-dependency-alpine.yml +++ b/.github/workflows/ci-check-upstream-dependency-alpine.yml @@ -8,7 +8,7 @@ jobs: check-upstream-dependency-alpine: name: 'Check upstream dependency Alpine' timeout-minutes: 5 - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 steps: - name: Checkout repo diff --git a/.github/workflows/ci-check-upstream-dependency-php.yml b/.github/workflows/ci-check-upstream-dependency-php.yml index 66a241a4..7cb90e1a 100644 --- a/.github/workflows/ci-check-upstream-dependency-php.yml +++ b/.github/workflows/ci-check-upstream-dependency-php.yml @@ -8,7 +8,7 @@ jobs: check-upstream-dependency-php: name: 'Check upstream dependency PHP' timeout-minutes: 5 - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 steps: - name: Checkout repo diff --git a/.github/workflows/ci-release-package.yml b/.github/workflows/ci-release-package.yml index 28c809db..8a0b272f 100644 --- a/.github/workflows/ci-release-package.yml +++ b/.github/workflows/ci-release-package.yml @@ -11,7 +11,7 @@ jobs: checkout-repo-and-bump-version: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: Check out Repo and Bump Version timeout-minutes: 10 steps: @@ -192,7 +192,7 @@ jobs: publish-release: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: Publish release timeout-minutes: 10 needs: [build-docker-image-amd, build-docker-image-arm] diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index 4be41961..a2a3d205 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -6,7 +6,7 @@ on: jobs: yml-lint: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'YML lint' timeout-minutes: 3 steps: @@ -15,7 +15,7 @@ jobs: - run: docker run --rm -t -v $(pwd):/data cytopia/yamllint --config-file=tests/.yamllint . markdown-lint: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'Markdown lint' timeout-minutes: 3 steps: @@ -26,7 +26,7 @@ jobs: build-docker-image: runs-on: gh-4vcpu-ubuntu-latest-amd name: 'Build Docker Image' - timeout-minutes: 20 + timeout-minutes: 40 needs: - yml-lint - markdown-lint @@ -78,7 +78,7 @@ jobs: retention-days: 7 cs-lint: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'CS Lint' timeout-minutes: 5 needs: @@ -96,7 +96,7 @@ jobs: docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && PHP_CS_FIXER_IGNORE_ENV=1 composer cs:list" psalm: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'Psalm' timeout-minutes: 5 needs: @@ -111,10 +111,10 @@ jobs: - name: Psalm run: | docker load < /tmp/docker/api-dev-amd.tar.gz - docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && composer psalm" + docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && composer psalm -- --no-progress" phpstan: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'Phpstan' timeout-minutes: 5 needs: @@ -129,10 +129,10 @@ jobs: - name: Phpstan run: | docker load < /tmp/docker/api-dev-amd.tar.gz - docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && composer phpstan" + docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && composer phpstan -- --no-progress" test-unit: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'Unit Test' timeout-minutes: 5 needs: @@ -150,9 +150,9 @@ jobs: docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && composer test:unit" test-mutant: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'Mutant Test' - timeout-minutes: 5 + timeout-minutes: 10 needs: - build-docker-image continue-on-error: true @@ -166,29 +166,31 @@ jobs: - name: Mutant Test run: | docker load < /tmp/docker/api-dev-amd.tar.gz - docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && composer test:mutant" + docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && ./bin/with-heartbeat composer test:mutant -- --no-progress" - test-mess-detector: - runs-on: ubuntu-latest - name: 'Mess Detector' - timeout-minutes: 5 - needs: - - build-docker-image - continue-on-error: true - steps: - - uses: actions/checkout@v5 - - run: mkdir -p /tmp/docker - - uses: actions/download-artifact@v8 - with: - name: docker-image-api-dev-amd - path: /tmp/docker - - name: Mess Detector - run: | - docker load < /tmp/docker/api-dev-amd.tar.gz - docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && composer mess" + # phpmd is temporarily deactivated: it was removed from the dev dependencies, as its last release is too old for + # the current dependencies. Reactivate once a new phpmd release is available. +# test-mess-detector: +# runs-on: ubuntu-26.04 +# name: 'Mess Detector' +# timeout-minutes: 5 +# needs: +# - build-docker-image +# continue-on-error: true +# steps: +# - uses: actions/checkout@v5 +# - run: mkdir -p /tmp/docker +# - uses: actions/download-artifact@v8 +# with: +# name: docker-image-api-dev-amd +# path: /tmp/docker +# - name: Mess Detector +# run: | +# docker load < /tmp/docker/api-dev-amd.tar.gz +# docker run -v $(pwd):/var/www/html --user "$(id -u):$(id -g)" api:dev-amd sh -c "composer install --ignore-platform-req=php --quiet && composer mess" test-feature: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'Feature Test' timeout-minutes: 15 needs: @@ -196,14 +198,15 @@ jobs: - phpstan - psalm - cs-lint - - test-mutant - - test-mess-detector +# - test-mess-detector strategy: matrix: dockerCompose: - "neo4j-5.7" - "neo4j-5.20" - "neo4j-latest" + - "s3-versitygw" + - "s3-seaweed-fs" steps: - uses: actions/checkout@v5 - run: mkdir -p /tmp/docker @@ -225,8 +228,8 @@ jobs: chmod 777 ./bin/test-feature-prepare docker load < /tmp/docker/api-dev-amd.tar.gz docker load < /tmp/docker/api-prod-amd.tar.gz - docker compose -f ./tests/FeatureTests/docker-compose-${{ matrix.dockerCompose }}.yml up --quiet-pull -d - echo "waiting for containers to star tup (10s)" + docker compose -f ./tests/FeatureTests/docker-compose-${{ matrix.dockerCompose }}.yml up --quiet-pull -d --wait + echo "giving containers a moment to settle (10s)" sleep 10 echo "finished waiting" docker compose -f ./tests/FeatureTests/docker-compose-${{ matrix.dockerCompose }}.yml ps @@ -234,10 +237,37 @@ jobs: docker exec --user "$(id -u):$(id -g)" api-dev bash -c "php bin/console healthcheck" - name: Feature Test run: | - docker exec --user "$(id -u):$(id -g)" api-dev bash -c "export API_DOMAIN=\"http://api-prod\" && echo \$API_DOMAIN && composer test:feature && composer test:feature:deprecated" + docker exec --user "$(id -u):$(id -g)" api-dev bash -c "export API_DOMAIN=\"http://api-prod\" && echo \$API_DOMAIN && composer test:feature" + - name: Run cron once manually + # DISABLE_CRON=true is set on the containers so the scheduler never fires cron during the test run above; + # this manually runs it once, in its own stage, after the main tests. A plain `docker exec` has no tty, so + # under DISABLE_CRON=true it would just no-op ("Cron is disabled"); `-t` allocates one so the command + # actually executes despite DISABLE_CRON. + run: | + docker exec -t --user "$(id -u):$(id -g)" api-prod php bin/console cron + - name: Collect docker logs + if: always() + run: | + mkdir -p docker-logs + COMPOSE="docker compose -f ./tests/FeatureTests/docker-compose-${{ matrix.dockerCompose }}.yml" + $COMPOSE ps -a > docker-logs/_ps.txt 2>&1 || true + for svc in $($COMPOSE config --services); do + $COMPOSE logs --no-color --timestamps "$svc" > "docker-logs/$svc.log" 2>&1 || true + done + # only name / exit code / OOM flag / error - never dump full inspect output (contains container env) + docker inspect $(docker ps -aq) --format '{{.Name}} exit={{.State.ExitCode}} oom={{.State.OOMKilled}} {{.State.Error}}' > docker-logs/_state.txt 2>&1 || true + uname -a > docker-logs/_host.txt + - name: Upload docker logs + if: always() + uses: actions/upload-artifact@v6 + with: + name: docker-logs-feature-${{ matrix.dockerCompose }} + path: docker-logs/ + if-no-files-found: ignore + retention-days: 7 test-example-generation-controller: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'Controller Example Generation Test' timeout-minutes: 15 needs: @@ -245,8 +275,7 @@ jobs: - phpstan - psalm - cs-lint - - test-mutant - - test-mess-detector +# - test-mess-detector steps: - uses: actions/checkout@v5 - run: mkdir -p /tmp/docker @@ -268,8 +297,8 @@ jobs: chmod 777 ./bin/test-feature-prepare docker load < /tmp/docker/api-dev-amd.tar.gz docker load < /tmp/docker/api-prod-amd.tar.gz - docker compose -f ./tests/ExampleGenerationController/docker-compose.yml up --quiet-pull -d - echo "waiting for containers to star tup (10s)" + docker compose -f ./tests/ExampleGenerationController/docker-compose.yml up --quiet-pull -d --wait + echo "giving containers a moment to settle (10s)" sleep 10 echo "finished waiting" docker compose -f ./tests/ExampleGenerationController/docker-compose.yml ps @@ -277,11 +306,31 @@ jobs: docker exec --user "$(id -u):$(id -g)" api-dev bash -c "php bin/console healthcheck" - name: Controller Example Generation Test run: | - docker exec --user "$(id -u):$(id -g)" api-dev bash -c "export API_DOMAIN=\"http://api\" && echo \$API_DOMAIN && composer test:example-generation-controller && composer test:example-generation-controller:with-different-configuration && composer test:example-generation-controller:deprecated" + docker exec --user "$(id -u):$(id -g)" api-dev bash -c "export API_DOMAIN=\"http://api\" && echo \$API_DOMAIN && composer test:example-generation-controller && composer test:example-generation-controller:with-different-configuration" + - name: Collect docker logs + if: always() + run: | + mkdir -p docker-logs + COMPOSE="docker compose -f ./tests/ExampleGenerationController/docker-compose.yml" + $COMPOSE ps -a > docker-logs/_ps.txt 2>&1 || true + for svc in $($COMPOSE config --services); do + $COMPOSE logs --no-color --timestamps "$svc" > "docker-logs/$svc.log" 2>&1 || true + done + # only name / exit code / OOM flag / error - never dump full inspect output (contains container env) + docker inspect $(docker ps -aq) --format '{{.Name}} exit={{.State.ExitCode}} oom={{.State.OOMKilled}} {{.State.Error}}' > docker-logs/_state.txt 2>&1 || true + uname -a > docker-logs/_host.txt + - name: Upload docker logs + if: always() + uses: actions/upload-artifact@v6 + with: + name: docker-logs-example-generation-controller + path: docker-logs/ + if-no-files-found: ignore + retention-days: 7 test-example-generation-command: - runs-on: ubuntu-latest + runs-on: ubuntu-26.04 name: 'Command Example Generation Test' timeout-minutes: 15 needs: @@ -289,8 +338,7 @@ jobs: - phpstan - psalm - cs-lint - - test-mutant - - test-mess-detector +# - test-mess-detector steps: - uses: actions/checkout@v5 - run: mkdir -p /tmp/docker @@ -307,8 +355,8 @@ jobs: run: | chmod 777 ./bin/test-feature-command-prepare docker load < /tmp/docker/api-dev-amd.tar.gz - docker compose -f ./tests/ExampleGenerationCommand/docker-compose.yml up --quiet-pull -d - echo "waiting for containers to star tup (10s)" + docker compose -f ./tests/ExampleGenerationCommand/docker-compose.yml up --quiet-pull -d --wait + echo "giving containers a moment to settle (10s)" sleep 10 echo "finished waiting" docker compose -f ./tests/ExampleGenerationCommand/docker-compose.yml ps @@ -317,3 +365,78 @@ jobs: - name: Command Example Generation Test run: | docker exec --user "$(id -u):$(id -g)" api bash -c "BACKUP_FOLDER_CAN_BE_RESET=1 composer test:example-generation-command" + - name: Collect docker logs + if: always() + run: | + mkdir -p docker-logs + COMPOSE="docker compose -f ./tests/ExampleGenerationCommand/docker-compose.yml" + $COMPOSE ps -a > docker-logs/_ps.txt 2>&1 || true + for svc in $($COMPOSE config --services); do + $COMPOSE logs --no-color --timestamps "$svc" > "docker-logs/$svc.log" 2>&1 || true + done + # only name / exit code / OOM flag / error - never dump full inspect output (contains container env) + docker inspect $(docker ps -aq) --format '{{.Name}} exit={{.State.ExitCode}} oom={{.State.OOMKilled}} {{.State.Error}}' > docker-logs/_state.txt 2>&1 || true + uname -a > docker-logs/_host.txt + - name: Upload docker logs + if: always() + uses: actions/upload-artifact@v6 + with: + name: docker-logs-example-generation-command + path: docker-logs/ + if-no-files-found: ignore + retention-days: 7 + + test-server: + runs-on: ubuntu-26.04 + name: 'Server Test' + timeout-minutes: 20 + needs: + - test-unit + - phpstan + - psalm + - cs-lint + steps: + - uses: actions/checkout@v5 + - run: mkdir -p /tmp/docker + - uses: actions/download-artifact@v8 + with: + name: docker-image-api-dev-amd + path: /tmp/docker + - uses: actions/download-artifact@v8 + with: + name: docker-image-api-prod-amd + path: /tmp/docker + - name: Login to Docker Hub + uses: docker/login-action@v4 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Load Docker images + run: | + docker load < /tmp/docker/api-dev-amd.tar.gz + docker load < /tmp/docker/api-prod-amd.tar.gz + # the scenarios run one after another and restart the production container with lower limits, see bin/test-server + - name: Server Test + run: | + chmod +x ./bin/test-server + KEEP_STACK=1 ./bin/test-server + - name: Collect docker logs + if: always() + run: | + mkdir -p docker-logs + COMPOSE="docker compose -p enx-server-tests -f ./tests/ServerTests/docker-compose.yml" + $COMPOSE ps -a > docker-logs/_ps.txt 2>&1 || true + for svc in $($COMPOSE config --services); do + $COMPOSE logs --no-color --timestamps "$svc" > "docker-logs/$svc.log" 2>&1 || true + done + # only name / exit code / OOM flag / error - never dump full inspect output (contains container env) + docker inspect $(docker ps -aq) --format '{{.Name}} exit={{.State.ExitCode}} oom={{.State.OOMKilled}} {{.State.Error}}' > docker-logs/_state.txt 2>&1 || true + uname -a > docker-logs/_host.txt + - name: Upload docker logs + if: always() + uses: actions/upload-artifact@v6 + with: + name: docker-logs-server + path: docker-logs/ + if-no-files-found: ignore + retention-days: 7 diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a1d297a..715c2856 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,12 +6,80 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Added +- Add file endpoints `GET`/`POST`/`PUT`/`DELETE //file` and resumable, chunked upload endpoints + `POST`/`PATCH`/`DELETE`/`HEAD //upload`, backed by S3 / object storage, closes #119. +- Add `ETag`, `If-Match`, `If-None-Match` and `If-Range` support to file endpoints (not upload endpoints, decided as + final), related to #119. +- Add byte-range (`Range`/`Content-Range`) support to `GET //file`, related to #119. +- Add `cron:update-ownership` command, recalculating direct group/user access after `OWNS`, `HAS_SEARCH_ACCESS` and + `IS_IN_GROUP` relations change, closes #438. - Add taskfile.dev development environment into the API repository itself, closes #461. +- Add S3 status check to healthcheck command, closes #200. +- Add support to delete files in S3 / object storage through the `php bin/console database:drop` command, closes #309. +- Add support to back up files in S3 / object storage through the `php bin/console backup:create` command, closes #308. +- Verify file contents against the stored `file.hash.sha256` values during `php bin/console backup:load`; files with + mismatching or missing hashes are skipped with a warning. Verification can be disabled with `--skip-verify`, related + to #119. +- Add support for `Content-Disposition` HTTP header, including transliteration of non-latin-characters, closes #447. +- Add dependency to PHP library `cardinalby/content-disposition`. +- Add 'reserved type' exception; nodes of type 'User', 'Token' and 'Upload' can not be manually created through generic + API endpoints. +- Store value `true` as placeholder for non-scalar properties in Neo4j. Does not change API responses, but is available + for Neo4j based queries, e.g. to check whether a non-scalar property exists on the element. +- Add mimetype detection for multipart / chunked uploads. +- Add `dozzle` to the local development Docker setup for log viewing. +- Add support for running cron jobs inside CI feature and example-generation containers, via a dedicated + `CronExecutionGateService`, related to #119. ### Changed - Upgrade FrankenPHP to 1.12.1, related to #457 and #461. +- Upgrade PHP to 8.5.4, related to #457 and #461. - Upgrade PHP dependencies, related to #457 and #461. +- Upgrade Symfony from 7.4 to 8.1, and `symfony/monolog-bundle` from 3 to 4; fix related deprecations. +- Temporarily deactivate `composer mess` (phpmd) in CI and remove it from the dev dependencies, as its last release is + not compatible with current dependencies. - Upgrade GitHub Actions in CI/CD. +- Increase max post limit from 2 MB (PHP default) to 101 MiB, related to #119. +- Change header `Access-Control-Allow-Headers` to `*`, due to growing number of supported headers. +- Change unsupported HTTP methods on existing routes to answer `405 Method Not Allowed` instead of `500`, and add a + per-endpoint `Allow` header (including on `405` responses), related to #119. +- Add `instance` (`urn:uuid:`) to every `problem+json` response, matching the request id used in logs and + the Caddy `request_id`, related to #119. +- Change `problem+json` extension members to camelCase (`expectedOffset`, `providedOffset`, `totalLength`, + `requestedStart`, `requestedEnd`), related to #119. +- Add `X-Content-Type-Options: nosniff` header to file download responses, related to #119. +- `DELETE //upload` answers `404` instead of `409`/`204` after access to the upload has been revoked, related to + #119. +- `Upload-Complete` header is now mandatory on `PATCH //upload`, related to #119. +- Reduce CLI command log output: only printed when attached to a real terminal, notice level and up by default + (`-v` for more). +- Remove the version string from CLI output in development mode. +- Rework the production Docker image so the compiled Symfony cache is no longer baked in at build time; it is + regenerated from whatever configuration is mounted at container start, fixing stale configuration when + `config/packages/ember_nexus.yaml` is overridden (`api-different-configuration`). +- Pin MinIO Docker images used in CI and local development instead of tracking `latest`. +- Pass required environment variables directly to unmounted API instances in CI / example-generation Docker Compose + files, instead of relying on a mounted `.env` file. + +### Fixed +- Fix bug with deserialization of MongoDB documents. +- Fix priority race condition between the `If-Match` and `If-None-Match` event listeners: `If-Match` is now evaluated + before `If-None-Match` when both are sent together (RFC 9110 Section 13.2.2). A failing `If-Match` combined with a + matching `If-None-Match` used to incorrectly answer `304`/`412` from `If-None-Match` instead of the `412` that + `If-Match` should give, related to #119. +- Fix missing exception guard when the underlying file is missing during ETag calculation. +- Fix the `onCreatedByUser` access restriction (and the equivalent implicit rule used by `GET .../children`, + `.../parents` and `.../related`) never actually matching, because the checked relation type (`CREATED_BY`) did not + match the one actually created on element creation (`CREATED`). +- Fix the exception log line always missing its `detail` (e.g. the received/announced byte counts of a `408` request + timeout), since it logged the always-empty `Exception::getMessage()` instead. + +### Removed +- Remove `POST /token`, `POST /register` and `POST /change-password` v1 request-body compatibility support, and the + `featureFlag.280_OldUniqueUserIdentifierDisabled` feature flag used to toggle it. This is a breaking change: only + the current request body shape is accepted now. +- Remove queue `REBUILD_SEARCH_DOCUMENT`, replaced by the durable, dead-letter-backed `ELASTICSEARCH_UPDATE_OWNERSHIP` + queue, related to #438. ## 0.1.31 - 2026-02-10 ### Changed diff --git a/README.md b/README.md index 96e2e559..0ba1ddb1 100755 --- a/README.md +++ b/README.md @@ -7,50 +7,41 @@ ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/ember-nexus/api/ci-test.yml?label=CI) [![Discord](https://img.shields.io/discord/1135243882360221787?logo=discord&label=Discord&color=%235865f2)](https://discord.gg/qbQFBrJrRC) -Store anything, connect everything, search it all? Sure thing! 😃 +Ember Nexus is a knowledge graph API, which means that it is specialized in storing and retrieving your data. +It can be used as an alternative to Obsidian, Notion, your company's ERP or content management systems or as a blank +database for your own projects. As long as you need to store data and are interested in easy to use cutting edge +features - Ember Nexus will be useful for you! :D -Ember Nexus API is a dynamic and versatile REST-API that leverages the power of graphs to provide flexible and secure -data storage and retrieval for data-minded people. It is [source first](https://sourcefirst.com/) and can be hosted on -your own hardware - we currently support AMD and ARM architectures. +## How is Ember Nexus different to other solutions? -## Quick Links +Ember Nexus is built on three principles: -- [Getting Started](https://ember-nexus.github.io/api/#/getting-started/tech-stack) -- [Check out the documentation](https://ember-nexus.github.io/api) -- [Find us on Docker Hub](https://hub.docker.com/r/embernexus/api) -- [Demo API](https://reference-dataset.ember-nexus.dev/) +- Be easy to use. +- Be secure. +- Expose the advantages and modern features of its internal databases. -## Features +The "secret sauce" is the combination of databases Ember Nexus uses: -Ember Nexus offers a range of cutting-edge features to meet your data storage needs, including: +- **Neo4j**: A graph database, which stores relationships and core properties of your data elements. +- **MongoDB**: A document database, which stores more complex properties Neo4j can not handle itself. +- **Elasticsearch**: A search database, used for full text search, vector search and more. +- **S3 compatible object store**: Used to store binary files, up to 10 GiB by default. -- **Graph-based data model**: Ember Nexus uses the graph database [Neo4j](https://neo4j.com/) internally, which enables - you to connect any data element to any other data element and efficiently search long and recursive relations. -- **Access through UUID**: Ember Nexus assigns a UUID to every storable element, making it easy to retrieve and manage - data. User can provide their own UUIDs as well, although this feature is disabled by default. -- **Near real-time search**: Ember Nexus supports full-text search that is fast and responsive. Most of - [Elasticsearch](https://www.elastic.co/elasticsearch/)'s features are directly available while not bypassing the - security model. -- **Secure by default**: User-created data is only visible to the owner by default. Sharing data requires explicit - rules, which are recursive and optionally limited in access scope and other features. -- **High-quality software**: We invested quite a bit of time to make sure that this software is as stable as possible. - We employ code linters, unit tests, feature tests, memory leak tests, mutant tests, and more. Most examples in the - documentation are automatically checked for deprecations. +Instead of using multiple specialized databases yourself, simply use Ember Nexus and benefit from their features +without having to worry about data consistency, security aspects and more. -## Planned Features +It just works :D -See our [milestone](https://github.com/ember-nexus/api/milestones) and -[issue](https://github.com/ember-nexus/api/issues) list on GitHub for planned features. +## What can you find where? -## When should I use Ember Nexus API? +- [GitHub Repository](https://github.com/ember-nexus/api): Keep up to date with new releases, post issues and more. +- [API Documentation](https://ember-nexus.github.io/api/#/): For everyone who wants to develop own apps on top of + Ember Nexus. +- [Docker Hub](https://hub.docker.com/r/embernexus/api): Ready to use container images for AMD and ARM architectures. +- [Demo API](https://reference-dataset.ember-nexus.dev/): Instance which can be used for quick testing. It is reset + every day and uses the [reference dataset](https://github.com/ember-nexus/reference-dataset) as its data, which + includes eternal tokens. -Ember Nexus is a powerful tool for a range of use cases, including: +## Is there a graphical user interface (GUI)? -- **Private cloud**: Use Ember Nexus to create your own private cloud, similar to Nextcloud. -- **Websites**: Use Ember Nexus as a CMS or blog platform. -- **Data management systems**: Ember Nexus is ideal for building data management systems and archives. -- **Data lakes**: Ember Nexus makes it easy to create data lakes, where you can store and manage large volumes of data. -- **Interface between multiple systems**: Ember Nexus can serve as a bridge between multiple systems, making it easy to - integrate and manage data across your entire infrastructure. - -Experience the power of Ember Nexus for yourself - [try it out today](https://ember-nexus.github.io/api/#/)! +It is currently being developed, but not yet ready to be used. diff --git a/bin/test-feature-command-prepare b/bin/test-feature-command-prepare index 0c35bbc9..8d6abe3e 100755 --- a/bin/test-feature-command-prepare +++ b/bin/test-feature-command-prepare @@ -8,8 +8,10 @@ if [ -z "$BACKUP_FOLDER_CAN_BE_RESET" ]; then exit 1 fi -TERM_WIDTH=$(stty size | awk '{print $2}') -if [ "$TERM_WIDTH" -ne 80 ]; then +TERM_WIDTH=$(stty size 2>/dev/null | awk '{print $2}') +if [ -z "$TERM_WIDTH" ]; then + echo "No terminal detected, skipping terminal width check (80 chars are expected)." +elif [ "$TERM_WIDTH" -ne 80 ]; then echo "Tests must be run in an terminal with 80 chars width, due to limitations in CI." exit 1 fi diff --git a/bin/test-server b/bin/test-server new file mode 100755 index 00000000..88a7dade --- /dev/null +++ b/bin/test-server @@ -0,0 +1,82 @@ +#!/bin/bash + +# Runs the server tests (tests/ServerTests) one scenario after another against the production image, which is +# recreated with lower limits for every scenario, see docker/Caddyfile. Requires the images api:dev-amd and api:prod-amd. +# Destructive: all databases of the started stack are reset, the stack is removed afterwards (KEEP_STACK=1 keeps it). +# Update expected responses in docs/server with FIX_CONTROLLER_OUTPUT=1. + +set -u + +cd "$(dirname "$0")/.." + +COMPOSE="docker compose -p enx-server-tests -f ./tests/ServerTests/docker-compose.yml" +EXEC_DEV="$COMPOSE exec -T --user $(id -u):$(id -g) api-dev" + +cleanup() { + if [ -z "${KEEP_STACK:-}" ]; then + $COMPOSE down -v --remove-orphans >/dev/null 2>&1 + fi +} +trap cleanup EXIT + +wait_for() { + local description="$1" timeout="$2" + shift 2 + local end=$((SECONDS + timeout)) + until "$@" >/dev/null 2>&1; do + if [ "$SECONDS" -ge "$end" ]; then + echo "Timeout while waiting for: $description" + return 1 + fi + sleep 2 + done +} + +echo "Starting stack" +$COMPOSE up --quiet-pull -d || exit 1 +$EXEC_DEV bash -c "composer install --ignore-platform-req=php --quiet" || exit 1 +wait_for "databases" 240 $EXEC_DEV bash -c "php bin/console healthcheck" || exit 1 + +echo "Preparing databases and test user" +$EXEC_DEV bash -c "php bin/console database:drop -f" > /dev/null || exit 1 +$EXEC_DEV bash -c "php bin/console user:create server-test@localhost.dev 1234" > /dev/null || exit 1 +TOKEN=$($EXEC_DEV bash -c "php bin/console token:create server-test@localhost.dev 1234" | sed -n 's/.*\(secret-token:[A-Za-z0-9]*\).*/\1/p' | head -n 1) +if [ -z "$TOKEN" ]; then + echo "Unable to create test token" + exit 1 +fi + +FAILED=0 + +# name, group, expected ready-check HTTP status and environment variables of the production container. The ready +# check must wait for the exact status the booted container will answer with: plain "curl -s" (or "curl -sf") also +# treats a 500 returned while the app is still starting up (e.g. warming its cache, connecting to Neo4j) as "ready", +# so the scenario's tests would start racing a container that looks up but is not actually serving yet; for the +# boot-failure scenario the container never leaves 500, so that status itself is what "ready" means there. +run_scenario() { + local group="$1" ready_status="$2" + shift 2 + echo + echo "=== Scenario $group ($*)" + env "$@" $COMPOSE up -d --force-recreate --no-deps api-prod || { FAILED=1; return; } + if ! wait_for "api-prod ready (HTTP $ready_status)" 120 bash -c "status=\$($COMPOSE exec -T api-prod curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1/ 2>/dev/null); [ \"\$status\" = \"$ready_status\" ]"; then + FAILED=1 + return + fi + $COMPOSE exec -T --user "$(id -u):$(id -g)" \ + -e API_DOMAIN=http://api-prod -e SERVER_TEST_TOKEN="$TOKEN" ${FIX_CONTROLLER_OUTPUT:+-e FIX_CONTROLLER_OUTPUT=1} \ + api-dev bash -c "composer test:server -- --group $group" || FAILED=1 +} + +run_scenario server-timeouts 200 API_REQUEST_BODY_TIMEOUT=10s API_UPLOAD_REQUEST_BODY_TIMEOUT=20s +run_scenario server-threads 200 FRANKENPHP_NUM_THREADS=1 FRANKENPHP_MAX_THREADS=1 FRANKENPHP_MAX_WAIT_TIME=2s API_UPLOAD_REQUEST_BODY_TIMEOUT=20s +run_scenario server-php-failure 200 +run_scenario server-php-boot-failure 500 SERVER_TEST_INI_DIR=/server-test-ini/low-memory + +if [ "$FAILED" -ne 0 ]; then + echo + echo "Server tests failed." + exit 1 +fi +echo +echo "Server tests finished successfully." diff --git a/bin/with-heartbeat b/bin/with-heartbeat new file mode 100755 index 00000000..dd490e52 --- /dev/null +++ b/bin/with-heartbeat @@ -0,0 +1,27 @@ +#!/bin/bash + +# Runs the given command and prints a "still running" line every HEARTBEAT_INTERVAL seconds (default 10), so long +# running commands without a tty (e.g. in ci) do not look stuck. Exits with the exit code of the command. + +INTERVAL="${HEARTBEAT_INTERVAL:-10}" +START=$(date +%s) + +"$@" & +COMMAND_PID=$! + +trap 'kill "$COMMAND_PID" 2>/dev/null' INT TERM + +( + while sleep "$INTERVAL"; do + echo "[heartbeat] still running... ($(( $(date +%s) - START ))s)" + done +) & +HEARTBEAT_PID=$! + +wait "$COMMAND_PID" +EXIT_CODE=$? + +kill "$HEARTBEAT_PID" 2>/dev/null +wait "$HEARTBEAT_PID" 2>/dev/null + +exit "$EXIT_CODE" diff --git a/composer.json b/composer.json index 3e494ad0..8c0adc18 100644 --- a/composer.json +++ b/composer.json @@ -7,52 +7,54 @@ "require": { "php": ">=8.5", "ext-ctype": "*", + "ext-fileinfo": "*", "ext-iconv": "*", - "antlr/antlr4-php-runtime": "^0.9.1", - "async-aws/s3": "^2.2", - "guzzlehttp/guzzle": "^7.8", - "league/flysystem": "^3.23", - "league/flysystem-bundle": "^3.3", + "antlr/antlr4-php-runtime": "^0.10.0", + "async-aws/s3": "^3.5", + "cardinalby/content-disposition": "^1.1", + "guzzlehttp/guzzle": "^7.10", + "league/flysystem": "^3.36", + "league/flysystem-bundle": "^3.7", "league/flysystem-ziparchive": "^3.23", "mongodb/mongodb": "^2.1", "php-amqplib/php-amqplib": "^3.6", - "predis/predis": "^3.4", - "ramsey/uuid": "^4.7", - "symfony/asset": "7.4.*", - "symfony/console": "7.4.*", - "symfony/dotenv": "7.4.*", - "symfony/event-dispatcher": "7.4.*", - "symfony/filesystem": "7.4.*", + "predis/predis": "^3.6", + "ramsey/uuid": "^4.9", + "symfony/asset": "8.1.*", + "symfony/console": "8.1.*", + "symfony/dotenv": "8.1.*", + "symfony/emoji": "8.1.*", + "symfony/event-dispatcher": "8.1.*", + "symfony/filesystem": "8.1.*", "symfony/flex": "^2.4", - "symfony/framework-bundle": "7.4.*", - "symfony/monolog-bundle": "^3.10", - "symfony/process": "7.4.*", - "symfony/runtime": "7.4.*", - "symfony/stopwatch": "7.4.*", - "symfony/string": "7.4.*", - "symfony/yaml": "7.4.*", + "symfony/framework-bundle": "8.1.*", + "symfony/monolog-bundle": "^4.1", + "symfony/process": "8.1.*", + "symfony/runtime": "8.1.*", + "symfony/stopwatch": "8.1.*", + "symfony/string": "8.1.*", + "symfony/yaml": "8.1.*", "syndesi/cypher-entity-manager": "^0.2.0", "syndesi/elastic-entity-manager": "^0.1.0", "syndesi/mongo-entity-manager": "^0.2.0", "thecodingmachine/safe": "^v3.3", - "tuupola/base58": "^2.1" + "tuupola/base58": "^2.2" }, "require-dev": { "beste/psr-testlogger": "^1.0", - "brianium/paratest": "^7.13", - "friendsofphp/php-cs-fixer": "^3.48", - "infection/infection": "^0.32", + "brianium/paratest": "^7.24", + "friendsofphp/php-cs-fixer": "^3.95", + "infection/infection": "^0.35", "phpbench/phpbench": "^1.2", - "phpmd/phpmd": "^2.15", "phpspec/prophecy-phpunit": "^2.1", "phpstan/phpstan": "^2.1", - "phpunit/php-code-coverage": "^12", - "phpunit/phpunit": "^12", + "phpunit/php-code-coverage": "^14", + "phpunit/phpunit": "^13", "symfony/maker-bundle": "^1.53", "symfony/phpunit-bridge": "^7.2", - "symfony/web-profiler-bundle": "7.4.*", + "symfony/web-profiler-bundle": "8.1.*", "thecodingmachine/phpstan-safe-rule": "^1.4", - "vimeo/psalm": "^6.2" + "vimeo/psalm": "^6.18" }, "config": { "allow-plugins": { @@ -100,26 +102,24 @@ ], "test:unit": "php vendor/bin/paratest -p 6 --configuration tests/phpunit.xml.dist", "test:unit:test": "php vendor/bin/paratest -p 6 --configuration tests/phpunit.xml.dist --group test", - "test:feature": "php bin/console cache:clear && ./bin/test-feature-prepare && php vendor/bin/paratest -p 6 --configuration tests/phpunit.feature.xml.dist ./tests/FeatureTests --exclude-group command --exclude-group deprecated && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/FeatureTests --group command", - "test:feature:deprecated": "php bin/console cache:clear && ./bin/test-feature-prepare && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/FeatureTests --group deprecated", + "test:feature": "php bin/console cache:clear && ./bin/test-feature-prepare && php vendor/bin/paratest -p 6 --configuration tests/phpunit.feature.xml.dist ./tests/FeatureTests --exclude-group command && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/FeatureTests --group command", "test:feature:test": "php bin/console cache:clear && ./bin/test-feature-prepare && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/FeatureTests --group test", "test:feature:test-fast": "php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/FeatureTests --group test", - "test:example-generation-controller": "php bin/console cache:clear && ./bin/test-feature-prepare && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationController --exclude-group deprecated && php bin/console cache:clear", - "test:example-generation-controller:with-different-configuration": "cp -f ./config/packages/ember_nexus.yaml ./config/packages/ember_nexus_orig.yaml.dis && cp -f ./tests/ExampleGenerationControllerWithDifferentConfiguration/configuration.yml ./config/packages/ember_nexus.yaml && php bin/console cache:clear && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationControllerWithDifferentConfiguration && mv -f ./config/packages/ember_nexus_orig.yaml.dis ./config/packages/ember_nexus.yaml && php bin/console cache:clear", - "test:example-generation-controller:deprecated": "php bin/console cache:clear && ./bin/test-feature-prepare && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationController --group deprecated && php bin/console cache:clear", + "test:server": "php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.server.xml.dist ./tests/ServerTests", + "test:example-generation-controller": "php bin/console cache:clear && ./bin/test-feature-prepare && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationController && php bin/console cache:clear", + "test:example-generation-controller:with-different-configuration": "API_DOMAIN=${API_DOMAIN_DIFFERENT_CONFIGURATION:-http://api-different-configuration} php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationControllerWithDifferentConfiguration", "test:example-generation-controller:test-orig": "php bin/console cache:clear && ./bin/test-feature-prepare && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationController --group test && php bin/console cache:clear", "test:example-generation-controller:test": "php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationController --group test", - "test:example-generation-command": "php bin/console cache:clear && ./bin/test-feature-command-prepare && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationCommand --exclude-group deprecated && php bin/console cache:clear", + "test:example-generation-command": "php bin/console cache:clear && ./bin/test-feature-command-prepare && php vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.feature.xml.dist ./tests/ExampleGenerationCommand && php bin/console cache:clear", "test:coverage:xml": "export XDEBUG_MODE=coverage && php ./vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.xml.dist --coverage-clover coverage.xml", "test:coverage:html": "export XDEBUG_MODE=coverage && php ./vendor/phpunit/phpunit/phpunit --configuration tests/phpunit.xml.dist --coverage-html ./tmp", - "test:mutant": "export XDEBUG_MODE=coverage && php vendor/infection/infection/bin/infection --configuration=tests/infection.json5 --threads=4", + "test:mutant": "export XDEBUG_MODE=coverage && php vendor/infection/infection/bin/infection --configuration=tests/infection.json5 --threads=max", "cs:list": "php vendor/friendsofphp/php-cs-fixer/php-cs-fixer fix --config=tests/.php-cs-fixer.dist.php --allow-risky=yes --dry-run", "cs:fix": "php vendor/friendsofphp/php-cs-fixer/php-cs-fixer fix --config=tests/.php-cs-fixer.dist.php --allow-risky=yes", "psalm": "php vendor/bin/psalm --config=tests/psalm.xml --show-info=true --no-cache", "psalm:fix-dry": "php vendor/bin/psalm --config=tests/psalm.xml --alter --issues=MissingParamType,MissingReturnType,InvalidReturnType,InvalidNullableReturnType,MismatchingDocblockParamType --dry-run", "psalm:fix-apply": "php vendor/bin/psalm --config=tests/psalm.xml --alter --issues=MissingParamType,MissingReturnType,InvalidReturnType,InvalidNullableReturnType,MismatchingDocblockParamType", "phpstan": "vendor/bin/phpstan --configuration=tests/phpstan.neon", - "mess": "vendor/bin/phpmd src,lib,tests text tests/phpmd.xml", "yml:lint": "docker run --rm -it -v \"$(pwd):/data\" cytopia/yamllint --config-file=tests/.yamllint .", "markdown:lint": "docker run --rm -it -v \"$(pwd):/work\" tmknom/markdownlint '**/*.md' --config tests/.markdownlintrc --ignore vendor --ignore CHANGELOG.md --ignore var --ignore tmp", "build:antlr": "./bin/build-antlr.sh", @@ -131,7 +131,7 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "7.4.*" + "require": "8.1.*" } } } diff --git a/composer.lock b/composer.lock index 4a81b3b7..7ec6b44a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6000e90ca0e3e3b88cefc3b93868eacd", + "content-hash": "01af1eb6795091e873214683965f3a73", "packages": [ { "name": "antlr/antlr4-php-runtime", - "version": "0.9.1", + "version": "0.10.0", "source": { "type": "git", "url": "https://github.com/antlr/antlr-php-runtime.git", - "reference": "3afe41b19f8ea3d6b10400397712cb8181da5e25" + "reference": "396cbea30b6b45f97511a37effde24d98de918c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antlr/antlr-php-runtime/zipball/3afe41b19f8ea3d6b10400397712cb8181da5e25", - "reference": "3afe41b19f8ea3d6b10400397712cb8181da5e25", + "url": "https://api.github.com/repos/antlr/antlr-php-runtime/zipball/396cbea30b6b45f97511a37effde24d98de918c6", + "reference": "396cbea30b6b45f97511a37effde24d98de918c6", "shasum": "" }, "require": { @@ -57,22 +57,22 @@ ], "support": { "issues": "https://github.com/antlr/antlr-php-runtime/issues", - "source": "https://github.com/antlr/antlr-php-runtime/tree/0.9.1" + "source": "https://github.com/antlr/antlr-php-runtime/tree/0.10.0" }, - "time": "2023-09-04T20:27:34+00:00" + "time": "2026-08-15T19:53:16+00:00" }, { "name": "async-aws/core", - "version": "1.28.1", + "version": "1.30.0", "source": { "type": "git", "url": "https://github.com/async-aws/core.git", - "reference": "e8b02ac30b17afaf1352cbd352dceb789d792d39" + "reference": "dc0c26832e44db34466dd68d450293d573e732d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/async-aws/core/zipball/e8b02ac30b17afaf1352cbd352dceb789d792d39", - "reference": "e8b02ac30b17afaf1352cbd352dceb789d792d39", + "url": "https://api.github.com/repos/async-aws/core/zipball/dc0c26832e44db34466dd68d450293d573e732d1", + "reference": "dc0c26832e44db34466dd68d450293d573e732d1", "shasum": "" }, "require": { @@ -98,7 +98,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.28-dev" + "dev-master": "1.30-dev" } }, "autoload": { @@ -119,7 +119,7 @@ "sts" ], "support": { - "source": "https://github.com/async-aws/core/tree/1.28.1" + "source": "https://github.com/async-aws/core/tree/1.30.0" }, "funding": [ { @@ -131,20 +131,20 @@ "type": "github" } ], - "time": "2026-02-16T10:24:54+00:00" + "time": "2026-09-09T11:10:02+00:00" }, { "name": "async-aws/s3", - "version": "2.10.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/async-aws/s3.git", - "reference": "9c826ab620dbdc99528f0ad0b728ef9d478714db" + "reference": "43b1f00d16f2c5c05b37337ccdc2aa1b1a24a18a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/async-aws/s3/zipball/9c826ab620dbdc99528f0ad0b728ef9d478714db", - "reference": "9c826ab620dbdc99528f0ad0b728ef9d478714db", + "url": "https://api.github.com/repos/async-aws/s3/zipball/43b1f00d16f2c5c05b37337ccdc2aa1b1a24a18a", + "reference": "43b1f00d16f2c5c05b37337ccdc2aa1b1a24a18a", "shasum": "" }, "require": { @@ -153,12 +153,17 @@ "ext-filter": "*", "ext-hash": "*", "ext-simplexml": "*", - "php": "^7.2.5 || ^8.0" + "php": "^8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5.42", + "symfony/error-handler": "^7.3.2 || ^8.0", + "symfony/phpunit-bridge": "^7.3.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.10-dev" + "dev-master": "3.5-dev" } }, "autoload": { @@ -179,7 +184,7 @@ "sdk" ], "support": { - "source": "https://github.com/async-aws/s3/tree/2.10.0" + "source": "https://github.com/async-aws/s3/tree/3.5.0" }, "funding": [ { @@ -191,28 +196,28 @@ "type": "github" } ], - "time": "2025-08-11T10:03:27+00:00" + "time": "2026-09-09T11:10:02+00:00" }, { "name": "brick/math", - "version": "0.14.8", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629" + "reference": "2effe05d2177c451b86c6a073196a4034c02f211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/63422359a44b7f06cae63c3b429b59e8efcc0629", - "reference": "63422359a44b7f06cae63c3b429b59e8efcc0629", + "url": "https://api.github.com/repos/brick/math/zipball/2effe05d2177c451b86c6a073196a4034c02f211", + "reference": "2effe05d2177c451b86c6a073196a4034c02f211", "shasum": "" }, "require": { "php": "^8.2" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpstan/phpstan": "2.1.22", + "phpstan/phpstan": "2.2.13", + "phpstan/phpstan-phpunit": "2.0.18", "phpunit/phpunit": "^11.5" }, "type": "library", @@ -243,7 +248,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.8" + "source": "https://github.com/brick/math/tree/1.0.0" }, "funding": [ { @@ -251,7 +256,49 @@ "type": "github" } ], - "time": "2026-02-10T14:33:43+00:00" + "time": "2026-09-12T10:28:18+00:00" + }, + { + "name": "cardinalby/content-disposition", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/cardinalby/phpContentDisposition.git", + "reference": "651b4dd51239c81967f9fce08dfdb786a65d6319" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cardinalby/phpContentDisposition/zipball/651b4dd51239c81967f9fce08dfdb786a65d6319", + "reference": "651b4dd51239c81967f9fce08dfdb786a65d6319", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^10.0.19" + }, + "type": "library", + "autoload": { + "psr-4": { + "cardinalby\\ContentDisposition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cardinal", + "homepage": "https://github.com/cardinalby/phpContentDisposition" + } + ], + "support": { + "issues": "https://github.com/cardinalby/phpContentDisposition/issues", + "source": "https://github.com/cardinalby/phpContentDisposition/tree/1.1.1" + }, + "time": "2023-05-23T22:16:05+00:00" }, { "name": "clue/stream-filter", @@ -436,25 +483,26 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.10.0", + "version": "7.15.5", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + "reference": "ee80339fd9177ba44c49cdb653ff02a4d1106b9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", - "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee80339fd9177ba44c49cdb653ff02a4d1106b9a", + "reference": "ee80339fd9177ba44c49cdb653ff02a4d1106b9a", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^2.3", - "guzzlehttp/psr7": "^2.8", + "guzzlehttp/promises": "^2.5.3", + "guzzlehttp/psr7": "^2.13.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-client-implementation": "1.0" @@ -462,9 +510,10 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", + "guzzle/client-integration-tests": "3.0.3", + "guzzlehttp/test-server": "^0.7", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -542,7 +591,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + "source": "https://github.com/guzzle/guzzle/tree/7.15.5" }, "funding": [ { @@ -558,28 +607,29 @@ "type": "tidelift" } ], - "time": "2025-08-23T22:36:01+00:00" + "time": "2026-08-24T09:21:06+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.3.0", + "version": "2.5.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "481557b130ef3790cf82b713667b43030dc9c957" + "reference": "cde49999552d185d64715fe9c1f77a2aadd2f9f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", - "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "url": "https://api.github.com/repos/guzzle/promises/zipball/cde49999552d185d64715fe9c1f77a2aadd2f9f1", + "reference": "cde49999552d185d64715fe9c1f77a2aadd2f9f1", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0" + "php": "^7.2.5 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "type": "library", "extra": { @@ -625,7 +675,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.3.0" + "source": "https://github.com/guzzle/promises/tree/2.5.3" }, "funding": [ { @@ -641,27 +691,29 @@ "type": "tidelift" } ], - "time": "2025-08-22T14:34:08+00:00" + "time": "2026-08-24T09:11:28+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.9.0", + "version": "2.13.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" + "reference": "95e7828100de18b4e269fb1703be530082d5166d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", - "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/95e7828100de18b4e269fb1703be530082d5166d", + "reference": "95e7828100de18b4e269fb1703be530082d5166d", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" + "ralouphie/getallheaders": "^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.25" }, "provide": { "psr/http-factory-implementation": "1.0", @@ -669,9 +721,9 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "0.9.0", + "http-interop/http-factory-tests": "1.1.0", "jshttp/mime-db": "1.54.0.1", - "phpunit/phpunit": "^8.5.44 || ^9.6.25" + "phpunit/phpunit": "^8.5.52 || ^9.6.34" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -742,7 +794,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.9.0" + "source": "https://github.com/guzzle/psr7/tree/2.13.1" }, "funding": [ { @@ -758,20 +810,20 @@ "type": "tidelift" } ], - "time": "2026-03-10T16:41:02+00:00" + "time": "2026-08-24T09:13:11+00:00" }, { "name": "laudis/neo4j-php-client", - "version": "3.4.2", + "version": "3.6.1", "source": { "type": "git", "url": "https://github.com/neo4j-php/neo4j-php-client.git", - "reference": "1084918914cbb90d5ad0a2cd3c4fe17f8b0c64b5" + "reference": "31e9f3329cdeee761f66eedc7d30b699c4fc338d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/neo4j-php/neo4j-php-client/zipball/1084918914cbb90d5ad0a2cd3c4fe17f8b0c64b5", - "reference": "1084918914cbb90d5ad0a2cd3c4fe17f8b0c64b5", + "url": "https://api.github.com/repos/neo4j-php/neo4j-php-client/zipball/31e9f3329cdeee761f66eedc7d30b699c4fc338d", + "reference": "31e9f3329cdeee761f66eedc7d30b699c4fc338d", "shasum": "" }, "require": { @@ -785,14 +837,13 @@ "psr/http-factory": "^1.0", "psr/http-message": "^1.0|^2.0", "psr/simple-cache": ">=2.0", - "stefanak-michal/bolt": "^7.1.4", - "symfony/polyfill-php80": "^1.2" + "stefanak-michal/bolt": "^7.4.0" }, "provide": { "psr/simple-cache-implementation": "2.0|3.0" }, "require-dev": { - "cache/integration-tests": "dev-master", + "cache/integration-tests": "0.17.0", "friendsofphp/php-cs-fixer": "3.68.5", "kriswallsmith/buzz": "^1.2", "kubawerlos/php-cs-fixer-custom-fixers": "3.13.*", @@ -844,9 +895,9 @@ ], "support": { "issues": "https://github.com/neo4j-php/neo4j-php-client/issues", - "source": "https://github.com/neo4j-php/neo4j-php-client/tree/3.4.2" + "source": "https://github.com/neo4j-php/neo4j-php-client/tree/3.6.1" }, - "time": "2025-12-17T10:13:20+00:00" + "time": "2026-09-21T08:48:57+00:00" }, { "name": "laudis/typed-enum", @@ -896,16 +947,16 @@ }, { "name": "league/flysystem", - "version": "3.32.0", + "version": "3.36.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725" + "reference": "f7fb152932f30072d573510cbd4dd657d6475b25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/254b1595b16b22dbddaaef9ed6ca9fdac4956725", - "reference": "254b1595b16b22dbddaaef9ed6ca9fdac4956725", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f7fb152932f30072d573510cbd4dd657d6475b25", + "reference": "f7fb152932f30072d573510cbd4dd657d6475b25", "shasum": "" }, "require": { @@ -973,22 +1024,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.32.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.36.0" }, - "time": "2026-02-25T17:01:41+00:00" + "time": "2026-09-02T08:00:27+00:00" }, { "name": "league/flysystem-bundle", - "version": "3.6.2", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-bundle.git", - "reference": "123ab96910177751faf3b6cc85eecc360ec12a1f" + "reference": "9cccb6862c9fcd16e6d8a0fbd62254abb8017c99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-bundle/zipball/123ab96910177751faf3b6cc85eecc360ec12a1f", - "reference": "123ab96910177751faf3b6cc85eecc360ec12a1f", + "url": "https://api.github.com/repos/thephpleague/flysystem-bundle/zipball/9cccb6862c9fcd16e6d8a0fbd62254abb8017c99", + "reference": "9cccb6862c9fcd16e6d8a0fbd62254abb8017c99", "shasum": "" }, "require": { @@ -1043,22 +1094,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-bundle/issues", - "source": "https://github.com/thephpleague/flysystem-bundle/tree/3.6.2" + "source": "https://github.com/thephpleague/flysystem-bundle/tree/3.7.1" }, - "time": "2026-02-05T15:26:57+00:00" + "time": "2026-08-10T15:55:07+00:00" }, { "name": "league/flysystem-local", - "version": "3.31.0", + "version": "3.35.3", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" + "reference": "a099b24dce160f3b2239043d13d47c4a1a214ea4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", - "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/a099b24dce160f3b2239043d13d47c4a1a214ea4", + "reference": "a099b24dce160f3b2239043d13d47c4a1a214ea4", "shasum": "" }, "require": { @@ -1092,9 +1143,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.35.3" }, - "time": "2026-01-23T15:30:45+00:00" + "time": "2026-08-12T13:29:21+00:00" }, { "name": "league/flysystem-ziparchive", @@ -1147,16 +1198,16 @@ }, { "name": "league/mime-type-detection", - "version": "1.16.0", + "version": "1.17.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", - "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/f5f47eff7c48ed1003069a2ca67f316fb4021c76", + "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76", "shasum": "" }, "require": { @@ -1166,7 +1217,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0 || ^11.0 || ^12.0" }, "type": "library", "autoload": { @@ -1187,7 +1238,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.17.0" }, "funding": [ { @@ -1199,20 +1250,20 @@ "type": "tidelift" } ], - "time": "2024-09-21T08:32:55+00:00" + "time": "2026-07-09T11:49:27+00:00" }, { "name": "mongodb/mongodb", - "version": "2.1.2", + "version": "v2.1.x-dev", "source": { "type": "git", "url": "https://github.com/mongodb/mongo-php-library.git", - "reference": "0a2472ba9cbb932f7e43a8770aedb2fc30612a67" + "reference": "96117fd745ebac8ff47e4f3be3ca448fd281f732" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/0a2472ba9cbb932f7e43a8770aedb2fc30612a67", - "reference": "0a2472ba9cbb932f7e43a8770aedb2fc30612a67", + "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/96117fd745ebac8ff47e4f3be3ca448fd281f732", + "reference": "96117fd745ebac8ff47e4f3be3ca448fd281f732", "shasum": "" }, "require": { @@ -1228,7 +1279,7 @@ "require-dev": { "doctrine/coding-standard": "^12.0", "phpunit/phpunit": "^10.5.35", - "rector/rector": "^2.1.4", + "rector/rector": "^2.3.4", "squizlabs/php_codesniffer": "^3.7", "vimeo/psalm": "6.5.*" }, @@ -1274,22 +1325,22 @@ ], "support": { "issues": "https://github.com/mongodb/mongo-php-library/issues", - "source": "https://github.com/mongodb/mongo-php-library/tree/2.1.2" + "source": "https://github.com/mongodb/mongo-php-library/tree/v2.1" }, - "time": "2025-10-06T12:12:40+00:00" + "time": "2026-02-04T15:11:14+00:00" }, { "name": "monolog/monolog", - "version": "3.10.0", + "version": "3.12.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + "reference": "72c534fc0ab181ef52d92a68382318631e301608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", - "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/72c534fc0ab181ef52d92a68382318631e301608", + "reference": "72c534fc0ab181ef52d92a68382318631e301608", "shasum": "" }, "require": { @@ -1315,6 +1366,7 @@ "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", + "psr/clock": "^1.0", "rollbar/rollbar": "^4.0", "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", @@ -1333,6 +1385,7 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "psr/clock": "Required to pass a clock to the Logger and control the timestamp of log records", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, @@ -1367,7 +1420,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + "source": "https://github.com/Seldaek/monolog/tree/3.12.0" }, "funding": [ { @@ -1379,20 +1432,20 @@ "type": "tidelift" } ], - "time": "2026-01-02T08:56:05+00:00" + "time": "2026-09-09T08:34:20+00:00" }, { "name": "open-telemetry/api", - "version": "1.8.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/opentelemetry-php/api.git", - "reference": "df5197c6fd0ddd8e9883b87de042d9341300e2ad" + "reference": "7c029c4a6fd457094a20569bf98f93d95e9a7559" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opentelemetry-php/api/zipball/df5197c6fd0ddd8e9883b87de042d9341300e2ad", - "reference": "df5197c6fd0ddd8e9883b87de042d9341300e2ad", + "url": "https://api.github.com/repos/opentelemetry-php/api/zipball/7c029c4a6fd457094a20569bf98f93d95e9a7559", + "reference": "7c029c4a6fd457094a20569bf98f93d95e9a7559", "shasum": "" }, "require": { @@ -1449,20 +1502,20 @@ "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", "source": "https://github.com/open-telemetry/opentelemetry-php" }, - "time": "2026-01-21T04:14:03+00:00" + "time": "2026-07-06T12:28:04+00:00" }, { "name": "open-telemetry/context", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/opentelemetry-php/context.git", - "reference": "d4c4470b541ce72000d18c339cfee633e4c8e0cf" + "reference": "3c414b246e0dabb7d6145404e6a5e4536ca18d07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opentelemetry-php/context/zipball/d4c4470b541ce72000d18c339cfee633e4c8e0cf", - "reference": "d4c4470b541ce72000d18c339cfee633e4c8e0cf", + "url": "https://api.github.com/repos/opentelemetry-php/context/zipball/3c414b246e0dabb7d6145404e6a5e4536ca18d07", + "reference": "3c414b246e0dabb7d6145404e6a5e4536ca18d07", "shasum": "" }, "require": { @@ -1504,11 +1557,11 @@ ], "support": { "chat": "https://app.slack.com/client/T08PSQ7BQ/C01NFPCV44V", - "docs": "https://opentelemetry.io/docs/php", + "docs": "https://opentelemetry.io/docs/languages/php", "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", "source": "https://github.com/open-telemetry/opentelemetry-php" }, - "time": "2025-09-19T00:05:49+00:00" + "time": "2025-10-19T06:44:33+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -1969,16 +2022,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.50", + "version": "3.0.57", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "aa6ad8321ed103dc3624fb600a25b66ebf78ec7b" + "reference": "d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/aa6ad8321ed103dc3624fb600a25b66ebf78ec7b", - "reference": "aa6ad8321ed103dc3624fb600a25b66ebf78ec7b", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4", + "reference": "d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4", "shasum": "" }, "require": { @@ -2059,7 +2112,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.50" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.57" }, "funding": [ { @@ -2075,20 +2128,20 @@ "type": "tidelift" } ], - "time": "2026-03-19T02:57:58+00:00" + "time": "2026-08-26T12:13:21+00:00" }, { "name": "predis/predis", - "version": "v3.4.2", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/predis/predis.git", - "reference": "2033429520d8997a7815a2485f56abe6d2d0e075" + "reference": "e2db96312ecf57a01a3477bf192d1ebc0ad7e9fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/2033429520d8997a7815a2485f56abe6d2d0e075", - "reference": "2033429520d8997a7815a2485f56abe6d2d0e075", + "url": "https://api.github.com/repos/predis/predis/zipball/e2db96312ecf57a01a3477bf192d1ebc0ad7e9fb", + "reference": "e2db96312ecf57a01a3477bf192d1ebc0ad7e9fb", "shasum": "" }, "require": { @@ -2130,7 +2183,7 @@ ], "support": { "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v3.4.2" + "source": "https://github.com/predis/predis/tree/v3.6.1" }, "funding": [ { @@ -2138,7 +2191,7 @@ "type": "github" } ], - "time": "2026-03-09T20:33:04+00:00" + "time": "2026-09-17T20:41:00+00:00" }, { "name": "psr/cache", @@ -2675,20 +2728,20 @@ }, { "name": "ramsey/uuid", - "version": "4.9.2", + "version": "4.9.4", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "8429c78ca35a09f27565311b98101e2826affde0" + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", - "reference": "8429c78ca35a09f27565311b98101e2826affde0", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2", "shasum": "" }, "require": { - "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -2747,9 +2800,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.2" + "source": "https://github.com/ramsey/uuid/tree/4.9.4" }, - "time": "2025-12-14T04:43:48+00:00" + "time": "2026-09-16T11:39:30+00:00" }, { "name": "stefanak-michal/bolt", @@ -2822,28 +2875,25 @@ }, { "name": "symfony/asset", - "version": "v7.4.6", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "d944ae87e4697af05aadeacfc5e603c3c18ef4fb" + "reference": "4bd4d143b7e53f40d45877df52eb2b18282bdac4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/d944ae87e4697af05aadeacfc5e603c3c18ef4fb", - "reference": "d944ae87e4697af05aadeacfc5e603c3c18ef4fb", + "url": "https://api.github.com/repos/symfony/asset/zipball/4bd4d143b7e53f40d45877df52eb2b18282bdac4", + "reference": "4bd4d143b7e53f40d45877df52eb2b18282bdac4", "shasum": "" }, "require": { - "php": ">=8.2" - }, - "conflict": { - "symfony/http-foundation": "<6.4" + "php": ">=8.4.1" }, "require-dev": { - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0" + "symfony/http-client": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2871,7 +2921,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v7.4.6" + "source": "https://github.com/symfony/asset/tree/v8.1.0" }, "funding": [ { @@ -2891,38 +2941,33 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/cache", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "665522ec357540e66c294c08583b40ee576574f0" + "reference": "47616ab077b5aff4d0f718b96680a48599fc1a3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/665522ec357540e66c294c08583b40ee576574f0", - "reference": "665522ec357540e66c294c08583b40ee576574f0", + "url": "https://api.github.com/repos/symfony/cache/zipball/47616ab077b5aff4d0f718b96680a48599fc1a3f", + "reference": "47616ab077b5aff4d0f718b96680a48599fc1a3f", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^3.6", - "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "symfony/var-exporter": "^8.1" }, "conflict": { - "doctrine/dbal": "<3.6", "ext-redis": "<6.1", - "ext-relay": "<0.12.1", - "symfony/dependency-injection": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/var-dumper": "<6.4" + "ext-relay": "<0.12.1" }, "provide": { "psr/cache-implementation": "2.0|3.0", @@ -2930,17 +2975,17 @@ "symfony/cache-implementation": "1.1|2.0|3.0" }, "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/dbal": "^3.6|^4", + "cache/integration-tests": "^1.0.3", + "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/filesystem": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -2975,7 +3020,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.4.7" + "source": "https://github.com/symfony/cache/tree/v8.1.7" }, "funding": [ { @@ -2995,20 +3040,20 @@ "type": "tidelift" } ], - "time": "2026-03-06T08:14:57+00:00" + "time": "2026-09-08T13:39:13+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.6.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" + "reference": "9789738bc19af1106dc54d6afba9a0b467516cf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", - "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/9789738bc19af1106dc54d6afba9a0b467516cf2", + "reference": "9789738bc19af1106dc54d6afba9a0b467516cf2", "shasum": "" }, "require": { @@ -3022,7 +3067,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -3055,7 +3100,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.7.1" }, "funding": [ { @@ -3066,43 +3111,46 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-13T15:25:07+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/config", - "version": "v7.4.7", + "version": "v8.1.5", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6c17162555bfb58957a55bb0e43e00035b6ae3d5" + "reference": "ec711a6c14ae287d9618fbd2c9de4e223a1a4b02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6c17162555bfb58957a55bb0e43e00035b6ae3d5", - "reference": "6c17162555bfb58957a55bb0e43e00035b6ae3d5", + "url": "https://api.github.com/repos/symfony/config/zipball/ec711a6c14ae287d9618fbd2c9de4e223a1a4b02", + "reference": "ec711a6c14ae287d9618fbd2c9de4e223a1a4b02", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^7.1|^8.0", - "symfony/polyfill-ctype": "~1.8" + "symfony/filesystem": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3130,7 +3178,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.4.7" + "source": "https://github.com/symfony/config/tree/v8.1.5" }, "funding": [ { @@ -3150,51 +3198,53 @@ "type": "tidelift" } ], - "time": "2026-03-06T10:41:14+00:00" + "time": "2026-08-20T09:59:12+00:00" }, { "name": "symfony/console", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d" + "reference": "29afb89f4e941f68a6e90f28e3f52ff1f6793a7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e1e6770440fb9c9b0cf725f81d1361ad1835329d", - "reference": "e1e6770440fb9c9b0cf725f81d1361ad1835329d", + "url": "https://api.github.com/repos/symfony/console/zipball/29afb89f4e941f68a6e90f28e3f52ff1f6793a7d", + "reference": "29afb89f4e941f68a6e90f28e3f52ff1f6793a7d", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.32", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2|^8.0" + "symfony/string": "^7.4.6|^8.0.6" }, "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher": "<8.1" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3228,7 +3278,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.7" + "source": "https://github.com/symfony/console/tree/v8.1.7" }, "funding": [ { @@ -3248,43 +3298,40 @@ "type": "tidelift" } ], - "time": "2026-03-06T14:06:20+00:00" + "time": "2026-09-13T10:55:57+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "0f651e58f4917fb0e2cd261ccbfe3d71e6e0f5db" + "reference": "3fd96e4b54e2372c4ce019cee9d5026add6e7f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0f651e58f4917fb0e2cd261ccbfe3d71e6e0f5db", - "reference": "0f651e58f4917fb0e2cd261ccbfe3d71e6e0f5db", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3fd96e4b54e2372c4ce019cee9d5026add6e7f38", + "reference": "3fd96e4b54e2372c4ce019cee9d5026add6e7f38", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^3.6", - "symfony/var-exporter": "^6.4.20|^7.2.5|^8.0" + "symfony/var-exporter": "^8.1" }, "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<6.4", - "symfony/finder": "<6.4", - "symfony/yaml": "<6.4" + "ext-psr": "<1.1|>=2" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/config": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3312,7 +3359,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.4.7" + "source": "https://github.com/symfony/dependency-injection/tree/v8.1.7" }, "funding": [ { @@ -3332,20 +3379,20 @@ "type": "tidelift" } ], - "time": "2026-03-03T07:48:48+00:00" + "time": "2026-09-11T15:21:30+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.6.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", "shasum": "" }, "require": { @@ -3358,7 +3405,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -3383,7 +3430,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" }, "funding": [ { @@ -3394,37 +3441,37 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/dotenv", - "version": "v7.4.7", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "7e5529a0b02395cb4614cdf507495a4cef3115c5" + "reference": "4ea87b35c75f7052309ec9735c0eb5c1fd7d2182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/7e5529a0b02395cb4614cdf507495a4cef3115c5", - "reference": "7e5529a0b02395cb4614cdf507495a4cef3115c5", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/4ea87b35c75f7052309ec9735c0eb5c1fd7d2182", + "reference": "4ea87b35c75f7052309ec9735c0eb5c1fd7d2182", "shasum": "" }, "require": { - "php": ">=8.2" - }, - "conflict": { - "symfony/console": "<6.4", - "symfony/process": "<6.4" + "php": ">=8.4.1" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3457,7 +3504,87 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.4.7" + "source": "https://github.com/symfony/dotenv/tree/v8.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-07-26T10:31:34+00:00" + }, + { + "name": "symfony/emoji", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/emoji.git", + "reference": "c297a56939dfdcfb256fa1ce6ae11b4ff9ec489e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/emoji/zipball/c297a56939dfdcfb256fa1ce6ae11b4ff9ec489e", + "reference": "c297a56939dfdcfb256fa1ce6ae11b4ff9ec489e", + "shasum": "" + }, + "require": { + "ext-intl": "*", + "php": ">=8.4.1" + }, + "require-dev": { + "symfony/filesystem": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Emoji\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/data/", + "/Resources/bin/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides access to emoji characters and sequences from the Unicode CLDR", + "homepage": "https://symfony.com", + "keywords": [ + "cldr", + "emoji", + "intl", + "transliterator", + "unicode" + ], + "support": { + "source": "https://github.com/symfony/emoji/tree/v8.1.0" }, "funding": [ { @@ -3477,37 +3604,36 @@ "type": "tidelift" } ], - "time": "2026-03-03T07:48:48+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/error-handler", - "version": "v7.4.4", + "version": "v8.1.5", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8" + "reference": "8b2a4289ffe5e2dc8fcf645b8e7870e1fa0325ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8da531f364ddfee53e36092a7eebbbd0b775f6b8", - "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8b2a4289ffe5e2dc8fcf645b8e7870e1fa0325ce", + "reference": "8b2a4289ffe5e2dc8fcf645b8e7870e1fa0325ce", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", "symfony/polyfill-php85": "^1.32", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/var-dumper": "^7.4|^8.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "symfony/deprecation-contracts": "<2.5" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", + "symfony/console": "^7.4|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ @@ -3539,7 +3665,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.4.4" + "source": "https://github.com/symfony/error-handler/tree/v8.1.5" }, "funding": [ { @@ -3559,28 +3685,29 @@ "type": "tidelift" } ], - "time": "2026-01-20T16:42:42+00:00" + "time": "2026-08-21T17:47:34+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.4.4", + "version": "v8.1.5", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "dc2c0eba1af673e736bb851d747d266108aea746" + "reference": "7458da64220376b2e0dc2d8451bf43382c1ad297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", - "reference": "dc2c0eba1af673e736bb851d747d266108aea746", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7458da64220376b2e0dc2d8451bf43382c1ad297", + "reference": "7458da64220376b2e0dc2d8451bf43382c1ad297", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/security-http": "<7.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -3589,14 +3716,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/error-handler": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/framework-bundle": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0|^8.0" + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3624,7 +3751,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.5" }, "funding": [ { @@ -3644,20 +3771,20 @@ "type": "tidelift" } ], - "time": "2026-01-05T11:45:34+00:00" + "time": "2026-08-21T17:47:34+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.6.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c7de7a00ffb67842132da02ea92988a39ccd9f4e", + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e", "shasum": "" }, "require": { @@ -3671,7 +3798,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -3704,7 +3831,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.1" }, "funding": [ { @@ -3715,34 +3842,39 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/filesystem", - "version": "v7.4.6", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e" + "reference": "7599ebb855fede59413ddb7f15198d67bfcae7ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3ebc794fa5315e59fd122561623c2e2e4280538e", - "reference": "3ebc794fa5315e59fd122561623c2e2e4280538e", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7599ebb855fede59413ddb7f15198d67bfcae7ba", + "reference": "7599ebb855fede59413ddb7f15198d67bfcae7ba", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0|^8.0" + "symfony/process": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3770,7 +3902,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.6" + "source": "https://github.com/symfony/filesystem/tree/v8.1.6" }, "funding": [ { @@ -3790,27 +3922,27 @@ "type": "tidelift" } ], - "time": "2026-02-25T16:50:00+00:00" + "time": "2026-08-23T10:06:25+00:00" }, { "name": "symfony/finder", - "version": "v7.4.6", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf" + "reference": "4fbe46a3eb64abf8a57f0364075b91f4a233e062" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/8655bf1076b7a3a346cb11413ffdabff50c7ffcf", - "reference": "8655bf1076b7a3a346cb11413ffdabff50c7ffcf", + "url": "https://api.github.com/repos/symfony/finder/zipball/4fbe46a3eb64abf8a57f0364075b91f4a233e062", + "reference": "4fbe46a3eb64abf8a57f0364075b91f4a233e062", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4.1" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0|^8.0" + "symfony/filesystem": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -3838,7 +3970,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.6" + "source": "https://github.com/symfony/finder/tree/v8.1.7" }, "funding": [ { @@ -3858,20 +3990,20 @@ "type": "tidelift" } ], - "time": "2026-01-29T09:40:50+00:00" + "time": "2026-09-10T19:14:39+00:00" }, { "name": "symfony/flex", - "version": "v2.10.0", + "version": "v2.11.0", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d" + "reference": "4a6d98eea3ebc7f68d82810cb682eedca2649e99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/9cd384775973eabbf6e8b05784dda279fc67c28d", - "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d", + "url": "https://api.github.com/repos/symfony/flex/zipball/4a6d98eea3ebc7f68d82810cb682eedca2649e99", + "reference": "4a6d98eea3ebc7f68d82810cb682eedca2649e99", "shasum": "" }, "require": { @@ -3884,9 +4016,9 @@ }, "require-dev": { "composer/composer": "^2.1", - "symfony/dotenv": "^6.4|^7.4|^8.0", + "phpunit/phpunit": "^12.4", + "symfony/dotenv": "^6.4.41|^7.4.13|^8.0.13", "symfony/filesystem": "^6.4|^7.4|^8.0", - "symfony/phpunit-bridge": "^6.4|^7.4|^8.0", "symfony/process": "^6.4|^7.4|^8.0" }, "type": "composer-plugin", @@ -3911,7 +4043,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.10.0" + "source": "https://github.com/symfony/flex/tree/v2.11.0" }, "funding": [ { @@ -3931,117 +4063,103 @@ "type": "tidelift" } ], - "time": "2025-11-16T09:38:19+00:00" + "time": "2026-05-29T17:25:22+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "c94bc78c85d76af67918404a95d44940f66a7c2f" + "reference": "b5d67475e1c444bb71f879f79d01ff10ae980662" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c94bc78c85d76af67918404a95d44940f66a7c2f", - "reference": "c94bc78c85d76af67918404a95d44940f66a7c2f", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/b5d67475e1c444bb71f879f79d01ff10ae980662", + "reference": "b5d67475e1c444bb71f879f79d01ff10ae980662", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=8.2", - "symfony/cache": "^6.4.12|^7.0|^8.0", + "php": ">=8.4.1", + "symfony/cache": "^7.4|^8.0", "symfony/config": "^7.4.4|^8.0.4", - "symfony/dependency-injection": "^7.4.4|^8.0.4", + "symfony/dependency-injection": "^8.1.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^7.3|^8.0", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/filesystem": "^7.1|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", - "symfony/http-kernel": "^7.4|^8.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php85": "^1.32", - "symfony/routing": "^7.4|^8.0" + "symfony/http-kernel": "^8.1", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.33", + "symfony/routing": "^7.4|^8.0", + "symfony/service-contracts": "^3.7.1", + "symfony/var-exporter": "^8.1" }, "conflict": { "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<5.2|>=7", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/asset": "<6.4", - "symfony/asset-mapper": "<6.4", - "symfony/clock": "<6.4", - "symfony/console": "<6.4", - "symfony/dom-crawler": "<6.4", - "symfony/dotenv": "<6.4", + "symfony/console": "<8.1.2", "symfony/form": "<7.4", - "symfony/http-client": "<6.4", - "symfony/lock": "<6.4", - "symfony/mailer": "<6.4", - "symfony/messenger": "<7.4", - "symfony/mime": "<6.4", - "symfony/property-access": "<6.4", - "symfony/property-info": "<6.4", - "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", - "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", - "symfony/security-core": "<6.4", - "symfony/security-csrf": "<7.2", - "symfony/serializer": "<7.2.5", - "symfony/stopwatch": "<6.4", - "symfony/translation": "<7.3", - "symfony/twig-bridge": "<6.4", - "symfony/twig-bundle": "<6.4", - "symfony/validator": "<6.4", - "symfony/web-profiler-bundle": "<6.4", - "symfony/webhook": "<7.2", + "symfony/json-streamer": "<7.4", + "symfony/mailer": "<7.4.17|>=8.0,<8.1.5", + "symfony/messenger": "<7.4.10|>=8.0,<8.0.10", + "symfony/mime": "<7.4.9|>=8.0,<8.0.9", + "symfony/security-csrf": "<7.4", + "symfony/serializer": "<7.4", + "symfony/translation": "<7.4", + "symfony/webhook": "<7.4", "symfony/workflow": "<7.4" }, "require-dev": { "doctrine/persistence": "^1.3|^2|^3", "dragonmantank/cron-expression": "^3.1", "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "seld/jsonlint": "^1.10", - "symfony/asset": "^6.4|^7.0|^8.0", - "symfony/asset-mapper": "^6.4|^7.0|^8.0", - "symfony/browser-kit": "^6.4|^7.0|^8.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/css-selector": "^6.4|^7.0|^8.0", - "symfony/dom-crawler": "^6.4|^7.0|^8.0", - "symfony/dotenv": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/asset": "^7.4|^8.0", + "symfony/asset-mapper": "^7.4|^8.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/console": "^8.1.2", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/dotenv": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", "symfony/form": "^7.4|^8.0", - "symfony/html-sanitizer": "^6.4|^7.0|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/json-streamer": "^7.3|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/mailer": "^6.4|^7.0|^8.0", - "symfony/messenger": "^7.4|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/notifier": "^6.4|^7.0|^8.0", - "symfony/object-mapper": "^7.3|^8.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/property-info": "^6.4|^7.0|^8.0", - "symfony/rate-limiter": "^6.4|^7.0|^8.0", - "symfony/runtime": "^6.4.13|^7.1.6|^8.0", - "symfony/scheduler": "^6.4.4|^7.0.4|^8.0", - "symfony/security-bundle": "^6.4|^7.0|^8.0", - "symfony/semaphore": "^6.4|^7.0|^8.0", - "symfony/serializer": "^7.2.5|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/string": "^6.4|^7.0|^8.0", - "symfony/translation": "^7.3|^8.0", - "symfony/twig-bundle": "^6.4|^7.0|^8.0", - "symfony/type-info": "^7.1.8|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/html-sanitizer": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/json-streamer": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/mailer": "^7.4|^8.0", + "symfony/messenger": "^7.4.10|^8.0.10", + "symfony/mime": "^7.4.9|^8.0.9", + "symfony/notifier": "^7.4|^8.0", + "symfony/object-mapper": "^7.4.9|^8.0.9", + "symfony/polyfill-intl-icu": "^1.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0", + "symfony/scheduler": "^7.4|^8.0", + "symfony/security-bundle": "^7.4|^8.0", + "symfony/semaphore": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/string": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/twig-bundle": "^7.4|^8.0", + "symfony/type-info": "^7.4.1|^8.0.1", + "symfony/uid": "^7.4|^8.0", "symfony/validator": "^7.4|^8.0", - "symfony/web-link": "^6.4|^7.0|^8.0", - "symfony/webhook": "^7.2|^8.0", + "symfony/web-link": "^7.4|^8.0", + "symfony/webhook": "^7.4|^8.0", "symfony/workflow": "^7.4|^8.0", - "symfony/yaml": "^7.3|^8.0", - "twig/twig": "^3.12" + "symfony/yaml": "^7.4|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -4069,7 +4187,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.4.7" + "source": "https://github.com/symfony/framework-bundle/tree/v8.1.7" }, "funding": [ { @@ -4089,35 +4207,32 @@ "type": "tidelift" } ], - "time": "2026-03-06T15:39:55+00:00" + "time": "2026-09-14T09:21:44+00:00" }, { "name": "symfony/http-client", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "1010624285470eb60e88ed10035102c75b4ea6af" + "reference": "099aae7d3619bffb5e68b33dbbadf6649c6d49c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/1010624285470eb60e88ed10035102c75b4ea6af", - "reference": "1010624285470eb60e88ed10035102c75b4ea6af", + "url": "https://api.github.com/repos/symfony/http-client/zipball/099aae7d3619bffb5e68b33dbbadf6649c6d49c5", + "reference": "099aae7d3619bffb5e68b33dbbadf6649c6d49c5", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "~3.4.4|^3.5.2", - "symfony/polyfill-php83": "^1.29", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/http-client-contracts": "^3.7", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "amphp/amp": "<2.5", - "amphp/socket": "<1.1", - "php-http/discovery": "<1.15", - "symfony/http-foundation": "<6.4" + "amphp/amp": "<3", + "php-http/discovery": "<1.15" }, "provide": { "php-http/async-client-implementation": "*", @@ -4126,20 +4241,19 @@ "symfony/http-client-implementation": "3.0" }, "require-dev": { - "amphp/http-client": "^4.2.1|^5.0", - "amphp/http-tunnel": "^1.0|^2.0", - "guzzlehttp/promises": "^1.4|^2.0", + "amphp/http-client": "^5.3.2", + "amphp/http-tunnel": "^2.0", + "guzzlehttp/guzzle": "^7.10|^8.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/amphp-http-client-meta": "^1.0|^2.0", - "symfony/cache": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/rate-limiter": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -4170,7 +4284,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.4.7" + "source": "https://github.com/symfony/http-client/tree/v8.1.7" }, "funding": [ { @@ -4190,20 +4304,20 @@ "type": "tidelift" } ], - "time": "2026-03-05T11:16:58+00:00" + "time": "2026-09-08T13:39:13+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.6.0", + "version": "v3.7.3", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "75d7043853a42837e68111812f4d964b01e5101c" + "reference": "35be0019e2c2c9fba80f9dc033290a5240f7b44f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", - "reference": "75d7043853a42837e68111812f4d964b01e5101c", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/35be0019e2c2c9fba80f9dc033290a5240f7b44f", + "reference": "35be0019e2c2c9fba80f9dc033290a5240f7b44f", "shasum": "" }, "require": { @@ -4216,7 +4330,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -4252,7 +4366,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.7.3" }, "funding": [ { @@ -4263,46 +4377,49 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-29T11:18:49+00:00" + "time": "2026-08-04T08:41:16+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81" + "reference": "d8fdc670ed510a69e3a9eb4f5eac89f5ed627e17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f94b3e7b7dafd40e666f0c9ff2084133bae41e81", - "reference": "f94b3e7b7dafd40e666f0c9ff2084133bae41e81", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d8fdc670ed510a69e3a9eb4f5eac89f5ed627e17", + "reference": "d8fdc670ed510a69e3a9eb4f5eac89f5ed627e17", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "^1.1" }, "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + "doctrine/dbal": "<4.3" }, "require-dev": { - "doctrine/dbal": "^3.6|^4", + "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5|^8.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/rate-limiter": "^6.4|^7.0|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -4330,7 +4447,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.7" + "source": "https://github.com/symfony/http-foundation/tree/v8.1.7" }, "funding": [ { @@ -4350,78 +4467,69 @@ "type": "tidelift" } ], - "time": "2026-03-06T13:15:18+00:00" + "time": "2026-09-14T17:47:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1" + "reference": "ec7a3a5832c22cf880cf27d2fdc7ad2e94838e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3b3fcf386c809be990c922e10e4c620d6367cab1", - "reference": "3b3fcf386c809be990c922e10e4c620d6367cab1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ec7a3a5832c22cf880cf27d2fdc7ad2e94838e85", + "reference": "ec7a3a5832c22cf880cf27d2fdc7ad2e94838e85", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", + "symfony/dependency-injection": "<8.1", "symfony/flex": "<2.10", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", + "symfony/serializer": "<7.4.15|>=8.0,<8.0.15|>=8.1,<8.1.2", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.12" + "symfony/var-dumper": "<8.1", + "symfony/web-profiler-bundle": "<8.1", + "twig/twig": "<3.21" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0|^8.0", - "symfony/clock": "^6.4|^7.0|^8.0", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/css-selector": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0", - "symfony/dom-crawler": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/property-access": "^7.1|^8.0", - "symfony/routing": "^6.4|^7.0|^8.0", - "symfony/serializer": "^7.1|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0|^8.0", - "symfony/validator": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0", - "twig/twig": "^3.12" + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^8.1", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21|^4.0" }, "type": "library", "autoload": { @@ -4449,7 +4557,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.7" + "source": "https://github.com/symfony/http-kernel/tree/v8.1.7" }, "funding": [ { @@ -4469,42 +4577,37 @@ "type": "tidelift" } ], - "time": "2026-03-06T16:33:18+00:00" + "time": "2026-09-15T07:12:52+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v7.4.6", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "69e98e7e10dae3daa896ef0f20e17a3928362d88" + "reference": "90747e82447b92c0fc701bfaf99bac0d54127039" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/69e98e7e10dae3daa896ef0f20e17a3928362d88", - "reference": "69e98e7e10dae3daa896ef0f20e17a3928362d88", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/90747e82447b92c0fc701bfaf99bac0d54127039", + "reference": "90747e82447b92c0fc701bfaf99bac0d54127039", "shasum": "" }, "require": { "monolog/monolog": "^3", - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0|^8.0", + "php": ">=8.4.1", + "symfony/http-kernel": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3" }, - "conflict": { - "symfony/console": "<6.4", - "symfony/http-foundation": "<6.4", - "symfony/security-core": "<6.4" - }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/mailer": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/security-core": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/mailer": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/notifier": "^7.4|^8.0", + "symfony/security-core": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -4532,7 +4635,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.6" + "source": "https://github.com/symfony/monolog-bridge/tree/v8.1.6" }, "funding": [ { @@ -4552,37 +4655,36 @@ "type": "tidelift" } ], - "time": "2026-02-17T07:53:42+00:00" + "time": "2026-08-30T01:03:44+00:00" }, { "name": "symfony/monolog-bundle", - "version": "v3.11.1", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "0e675a6e08f791ef960dc9c7e392787111a3f0c1" + "reference": "a22de65db405738364af77310761fdd0dce7a40e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/0e675a6e08f791ef960dc9c7e392787111a3f0c1", - "reference": "0e675a6e08f791ef960dc9c7e392787111a3f0c1", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/a22de65db405738364af77310761fdd0dce7a40e", + "reference": "a22de65db405738364af77310761fdd0dce7a40e", "shasum": "" }, "require": { "composer-runtime-api": "^2.0", - "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", - "php": ">=8.1", - "symfony/config": "^6.4 || ^7.0", - "symfony/dependency-injection": "^6.4 || ^7.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/http-kernel": "^6.4 || ^7.0", - "symfony/monolog-bridge": "^6.4 || ^7.0", + "monolog/monolog": "^3.12", + "php": ">=8.2", + "symfony/config": "^7.3 || ^8.0", + "symfony/dependency-injection": "^7.3 || ^8.0", + "symfony/http-kernel": "^7.3 || ^8.0", + "symfony/monolog-bridge": "^7.3 || ^8.0", "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "symfony/console": "^6.4 || ^7.0", - "symfony/phpunit-bridge": "^7.3.3", - "symfony/yaml": "^6.4 || ^7.0" + "phpunit/phpunit": "^11.5.41 || ^12.3", + "symfony/console": "^7.3 || ^8.0", + "symfony/yaml": "^7.3 || ^8.0" }, "type": "symfony-bundle", "autoload": { @@ -4612,7 +4714,7 @@ ], "support": { "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.11.1" + "source": "https://github.com/symfony/monolog-bundle/tree/v4.1.0" }, "funding": [ { @@ -4632,24 +4734,24 @@ "type": "tidelift" } ], - "time": "2025-12-08T07:58:26+00:00" + "time": "2026-09-10T19:32:07+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.4.0", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b38026df55197f9e39a44f3215788edf83187b80" + "reference": "88f9c561f678a02d54b897014049fa839e33ff82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", - "reference": "b38026df55197f9e39a44f3215788edf83187b80", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/88f9c561f678a02d54b897014049fa839e33ff82", + "reference": "88f9c561f678a02d54b897014049fa839e33ff82", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -4683,7 +4785,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" + "source": "https://github.com/symfony/options-resolver/tree/v8.1.0" }, "funding": [ { @@ -4703,27 +4805,30 @@ "type": "tidelift" } ], - "time": "2025-11-12T15:39:26+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "name": "symfony/polyfill-deepclone", + "version": "v1.42.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "url": "https://github.com/symfony/polyfill-deepclone.git", + "reference": "70ba0627efc68e97ea392843458a2dd9d6dbd156" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-deepclone/zipball/70ba0627efc68e97ea392843458a2dd9d6dbd156", + "reference": "70ba0627efc68e97ea392843458a2dd9d6dbd156", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.1" + }, + "provide": { + "ext-deepclone": "*" }, "suggest": { - "ext-intl": "For best performance" + "ext-deepclone": "For best performance" }, "type": "library", "extra": { @@ -4737,8 +4842,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } + "Symfony\\Polyfill\\DeepClone\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4754,18 +4862,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", + "description": "Symfony polyfill for the deepclone extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "grapheme", - "intl", + "deepclone", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-deepclone/tree/v1.42.0" }, "funding": [ { @@ -4785,20 +4892,20 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-08-07T06:33:24+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.41.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "3833d7255cc303546435cb650316bff708a1c75c" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", - "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", "shasum": "" }, "require": { @@ -4819,11 +4926,8 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4839,18 +4943,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "grapheme", "intl", - "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0" }, "funding": [ { @@ -4870,31 +4974,27 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-07-28T08:25:59+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.42.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "aa20edea75bd9c48cfecc8360922e5a6e5c44502" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/aa20edea75bd9c48cfecc8360922e5a6e5c44502", + "reference": "aa20edea75bd9c48cfecc8360922e5a6e5c44502", "shasum": "" }, "require": { - "ext-iconv": "*", "php": ">=7.2" }, - "provide": { - "ext-mbstring": "*" - }, "suggest": { - "ext-mbstring": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { @@ -4908,8 +5008,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4925,17 +5028,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "intl", + "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.42.0" }, "funding": [ { @@ -4955,25 +5059,32 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-08-07T06:33:24+00:00" }, { - "name": "symfony/polyfill-php82", - "version": "v1.33.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.38.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php82.git", - "reference": "5d2ed36f7734637dacc025f179698031951b1692" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/5d2ed36f7734637dacc025f179698031951b1692", - "reference": "5d2ed36f7734637dacc025f179698031951b1692", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, "type": "library", "extra": { "thanks": { @@ -4986,11 +5097,8 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php82\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5006,16 +5114,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php82/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" }, "funding": [ { @@ -5035,20 +5144,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-05-27T06:59:30+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.33.0", + "name": "symfony/polyfill-php82", + "version": "v1.38.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b", + "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b", "shasum": "" }, "require": { @@ -5066,7 +5175,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Polyfill\\Php82\\": "" }, "classmap": [ "Resources/stubs" @@ -5086,7 +5195,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -5095,7 +5204,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php82/tree/v1.38.1" }, "funding": [ { @@ -5115,20 +5224,20 @@ "type": "tidelift" } ], - "time": "2025-07-08T02:45:35+00:00" + "time": "2026-05-26T12:45:58+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.33.0", + "version": "v1.38.1", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", "shasum": "" }, "require": { @@ -5175,7 +5284,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" }, "funding": [ { @@ -5195,20 +5304,20 @@ "type": "tidelift" } ], - "time": "2025-06-24T13:30:11+00:00" + "time": "2026-05-26T12:51:13+00:00" }, { "name": "symfony/polyfill-php85", - "version": "v1.33.0", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", - "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/255fab485aaa1006ed411040c42aecd7b5302d7a", + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a", "shasum": "" }, "require": { @@ -5255,7 +5364,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.41.0" }, "funding": [ { @@ -5275,24 +5384,24 @@ "type": "tidelift" } ], - "time": "2025-06-23T16:12:55+00:00" + "time": "2026-07-01T12:47:55+00:00" }, { "name": "symfony/process", - "version": "v7.4.5", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "608476f4604102976d687c483ac63a79ba18cc97" + "reference": "10823b09358e690df4ff943e24e8492bb1019fc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", - "reference": "608476f4604102976d687c483ac63a79ba18cc97", + "url": "https://api.github.com/repos/symfony/process/zipball/10823b09358e690df4ff943e24e8492bb1019fc3", + "reference": "10823b09358e690df4ff943e24e8492bb1019fc3", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4.1" }, "type": "library", "autoload": { @@ -5320,7 +5429,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.5" + "source": "https://github.com/symfony/process/tree/v8.1.7" }, "funding": [ { @@ -5340,38 +5449,33 @@ "type": "tidelift" } ], - "time": "2026-01-26T15:07:59+00:00" + "time": "2026-09-02T12:40:29+00:00" }, { "name": "symfony/routing", - "version": "v7.4.6", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "238d749c56b804b31a9bf3e26519d93b65a60938" + "reference": "3c188091b6b4fa2e4bc83a135caede12deb8576c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/238d749c56b804b31a9bf3e26519d93b65a60938", - "reference": "238d749c56b804b31a9bf3e26519d93b65a60938", + "url": "https://api.github.com/repos/symfony/routing/zipball/3c188091b6b4fa2e4bc83a135caede12deb8576c", + "reference": "3c188091b6b4fa2e4bc83a135caede12deb8576c", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3" }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5405,7 +5509,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.6" + "source": "https://github.com/symfony/routing/tree/v8.1.6" }, "funding": [ { @@ -5425,35 +5529,36 @@ "type": "tidelift" } ], - "time": "2026-02-25T16:50:00+00:00" + "time": "2026-08-17T13:18:34+00:00" }, { "name": "symfony/runtime", - "version": "v7.4.1", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "876f902a6cb6b26c003de244188c06b2ba1c172f" + "reference": "b7ea1abe04561e814b3134db0f56c287cedb35cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/876f902a6cb6b26c003de244188c06b2ba1c172f", - "reference": "876f902a6cb6b26c003de244188c06b2ba1c172f", + "url": "https://api.github.com/repos/symfony/runtime/zipball/b7ea1abe04561e814b3134db0f56c287cedb35cc", + "reference": "b7ea1abe04561e814b3134db0f56c287cedb35cc", "shasum": "" }, "require": { "composer-plugin-api": "^1.0|^2.0", - "php": ">=8.2" + "php": ">=8.4.1" }, "conflict": { - "symfony/dotenv": "<6.4" + "symfony/error-handler": "<7.4" }, "require-dev": { "composer/composer": "^2.6", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/dotenv": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/dotenv": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0" }, "type": "composer-plugin", "extra": { @@ -5488,7 +5593,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v7.4.1" + "source": "https://github.com/symfony/runtime/tree/v8.1.0" }, "funding": [ { @@ -5508,20 +5613,20 @@ "type": "tidelift" } ], - "time": "2025-12-05T14:04:53+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.1", + "version": "v3.7.3", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" + "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", - "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", + "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", "shasum": "" }, "require": { @@ -5539,7 +5644,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -5575,7 +5680,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.7.3" }, "funding": [ { @@ -5595,24 +5700,24 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:30:57+00:00" + "time": "2026-07-27T15:39:01+00:00" }, { "name": "symfony/stopwatch", - "version": "v7.4.0", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "8a24af0a2e8a872fb745047180649b8418303084" + "reference": "21c07b026905d596e8379caeb115d87aa479499d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", - "reference": "8a24af0a2e8a872fb745047180649b8418303084", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/21c07b026905d596e8379caeb115d87aa479499d", + "reference": "21c07b026905d596e8379caeb115d87aa479499d", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -5641,7 +5746,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" + "source": "https://github.com/symfony/stopwatch/tree/v8.1.0" }, "funding": [ { @@ -5661,39 +5766,38 @@ "type": "tidelift" } ], - "time": "2025-08-04T07:05:15+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/string", - "version": "v7.4.6", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "9f209231affa85aa930a5e46e6eb03381424b30b" + "reference": "d950140b5f56f31901e5b7a0c04ffc3a3deb943c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9f209231affa85aa930a5e46e6eb03381424b30b", - "reference": "9f209231affa85aa930a5e46e6eb03381424b30b", + "url": "https://api.github.com/repos/symfony/string/zipball/d950140b5f56f31901e5b7a0c04ffc3a3deb943c", + "reference": "d950140b5f56f31901e5b7a0c04ffc3a3deb943c", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.33", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4.1", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5732,7 +5836,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.6" + "source": "https://github.com/symfony/string/tree/v8.1.7" }, "funding": [ { @@ -5752,36 +5856,36 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-09-11T14:51:16+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.6", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291" + "reference": "741a8c4c948b0bb9bd3653daacd3644c73c40ea5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/045321c440ac18347b136c63d2e9bf28a2dc0291", - "reference": "045321c440ac18347b136c63d2e9bf28a2dc0291", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/741a8c4c948b0bb9bd3653daacd3644c73c40ea5", + "reference": "741a8c4c948b0bb9bd3653daacd3644c73c40ea5", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4.1", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4", + "symfony/error-handler": "<7.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/uid": "^6.4|^7.0|^8.0", - "twig/twig": "^3.12" + "symfony/console": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "twig/twig": "^3.12|^4.0" }, "bin": [ "Resources/bin/var-dump-server" @@ -5819,7 +5923,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.6" + "source": "https://github.com/symfony/var-dumper/tree/v8.1.7" }, "funding": [ { @@ -5839,30 +5943,31 @@ "type": "tidelift" } ], - "time": "2026-02-15T10:53:20+00:00" + "time": "2026-09-03T16:02:27+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.4.0", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "03a60f169c79a28513a78c967316fbc8bf17816f" + "reference": "802362f41128c430fd6685491e1fb72127fae78a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/03a60f169c79a28513a78c967316fbc8bf17816f", - "reference": "03a60f169c79a28513a78c967316fbc8bf17816f", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/802362f41128c430fd6685491e1fb72127fae78a", + "reference": "802362f41128c430fd6685491e1fb72127fae78a", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-deepclone": "^1.40" }, "require-dev": { - "symfony/property-access": "^6.4|^7.0|^8.0", - "symfony/serializer": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/property-access": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5887,11 +5992,12 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "description": "Provides tools to export, instantiate, hydrate, clone and lazy-load PHP objects", "homepage": "https://symfony.com", "keywords": [ "clone", "construct", + "deep-clone", "export", "hydrate", "instantiate", @@ -5900,7 +6006,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.4.0" + "source": "https://github.com/symfony/var-exporter/tree/v8.1.6" }, "funding": [ { @@ -5920,32 +6026,32 @@ "type": "tidelift" } ], - "time": "2025-09-11T10:15:23+00:00" + "time": "2026-08-29T06:30:03+00:00" }, { "name": "symfony/yaml", - "version": "v7.4.6", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "58751048de17bae71c5aa0d13cb19d79bca26391" + "reference": "0b4aa53a67f9fece88c665f1a1dadcfd25d93fe5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/58751048de17bae71c5aa0d13cb19d79bca26391", - "reference": "58751048de17bae71c5aa0d13cb19d79bca26391", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0b4aa53a67f9fece88c665f1a1dadcfd25d93fe5", + "reference": "0b4aa53a67f9fece88c665f1a1dadcfd25d93fe5", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.4.1", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0", + "yaml/yaml-test-suite": "*" }, "bin": [ "Resources/bin/yaml-lint" @@ -5976,7 +6082,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.4.6" + "source": "https://github.com/symfony/yaml/tree/v8.1.6" }, "funding": [ { @@ -5996,7 +6102,7 @@ "type": "tidelift" } ], - "time": "2026-02-09T09:33:46+00:00" + "time": "2026-08-30T01:03:44+00:00" }, { "name": "syndesi/cypher-data-structures", @@ -6563,16 +6669,16 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v3.1.1", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f" + "reference": "73c38b323ff8d790abf0f76c56fcc892bda4111a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/fa0ab33a6f47a82929c38d03ca47ebb71086a93f", - "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f", + "url": "https://api.github.com/repos/amphp/amp/zipball/73c38b323ff8d790abf0f76c56fcc892bda4111a", + "reference": "73c38b323ff8d790abf0f76c56fcc892bda4111a", "shasum": "" }, "require": { @@ -6582,7 +6688,7 @@ "require-dev": { "amphp/php-cs-fixer-config": "^2", "phpunit/phpunit": "^9", - "psalm/phar": "5.23.1" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -6632,7 +6738,7 @@ ], "support": { "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v3.1.1" + "source": "https://github.com/amphp/amp/tree/v3.1.3" }, "funding": [ { @@ -6640,7 +6746,7 @@ "type": "github" } ], - "time": "2025-08-27T21:42:00+00:00" + "time": "2026-07-19T17:59:20+00:00" }, { "name": "amphp/byte-stream", @@ -6784,16 +6890,16 @@ }, { "name": "amphp/dns", - "version": "v2.4.0", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/amphp/dns.git", - "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71" + "reference": "ec5948bfafac808f410406e18bc7b52a2d4629b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", - "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", + "url": "https://api.github.com/repos/amphp/dns/zipball/ec5948bfafac808f410406e18bc7b52a2d4629b7", + "reference": "ec5948bfafac808f410406e18bc7b52a2d4629b7", "shasum": "" }, "require": { @@ -6812,7 +6918,7 @@ "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "phpunit/phpunit": "^9", - "psalm/phar": "5.20" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -6861,7 +6967,7 @@ ], "support": { "issues": "https://github.com/amphp/dns/issues", - "source": "https://github.com/amphp/dns/tree/v2.4.0" + "source": "https://github.com/amphp/dns/tree/v2.4.1" }, "funding": [ { @@ -6869,20 +6975,20 @@ "type": "github" } ], - "time": "2025-01-19T15:43:40+00:00" + "time": "2026-07-26T17:53:54+00:00" }, { "name": "amphp/parallel", - "version": "v2.3.3", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/amphp/parallel.git", - "reference": "296b521137a54d3a02425b464e5aee4c93db2c60" + "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60", - "reference": "296b521137a54d3a02425b464e5aee4c93db2c60", + "url": "https://api.github.com/repos/amphp/parallel/zipball/37f5b2754fadc229c00f9416bd68fb8d04529a81", + "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81", "shasum": "" }, "require": { @@ -6902,7 +7008,7 @@ "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "phpunit/phpunit": "^9", - "psalm/phar": "^5.18" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -6945,7 +7051,7 @@ ], "support": { "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v2.3.3" + "source": "https://github.com/amphp/parallel/tree/v2.4.0" }, "funding": [ { @@ -6953,7 +7059,7 @@ "type": "github" } ], - "time": "2025-11-15T06:23:42+00:00" + "time": "2026-05-16T16:54:01+00:00" }, { "name": "amphp/parser", @@ -7019,16 +7125,16 @@ }, { "name": "amphp/pipeline", - "version": "v1.2.3", + "version": "v1.2.7", "source": { "type": "git", "url": "https://github.com/amphp/pipeline.git", - "reference": "7b52598c2e9105ebcddf247fc523161581930367" + "reference": "cf2d67696c2015ea7c7fd8f6ec5f8ed7c2d17c17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/pipeline/zipball/7b52598c2e9105ebcddf247fc523161581930367", - "reference": "7b52598c2e9105ebcddf247fc523161581930367", + "url": "https://api.github.com/repos/amphp/pipeline/zipball/cf2d67696c2015ea7c7fd8f6ec5f8ed7c2d17c17", + "reference": "cf2d67696c2015ea7c7fd8f6ec5f8ed7c2d17c17", "shasum": "" }, "require": { @@ -7040,7 +7146,7 @@ "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "phpunit/phpunit": "^9", - "psalm/phar": "^5.18" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -7074,7 +7180,7 @@ ], "support": { "issues": "https://github.com/amphp/pipeline/issues", - "source": "https://github.com/amphp/pipeline/tree/v1.2.3" + "source": "https://github.com/amphp/pipeline/tree/v1.2.7" }, "funding": [ { @@ -7082,20 +7188,20 @@ "type": "github" } ], - "time": "2025-03-16T16:33:53+00:00" + "time": "2026-07-26T14:50:43+00:00" }, { "name": "amphp/process", - "version": "v2.0.3", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/amphp/process.git", - "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d" + "reference": "583959df17d00304ad7b0b32285373f985935643" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/process/zipball/52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d", - "reference": "52e08c09dec7511d5fbc1fb00d3e4e79fc77d58d", + "url": "https://api.github.com/repos/amphp/process/zipball/583959df17d00304ad7b0b32285373f985935643", + "reference": "583959df17d00304ad7b0b32285373f985935643", "shasum": "" }, "require": { @@ -7109,7 +7215,7 @@ "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "phpunit/phpunit": "^9", - "psalm/phar": "^5.4" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -7142,7 +7248,7 @@ "homepage": "https://amphp.org/process", "support": { "issues": "https://github.com/amphp/process/issues", - "source": "https://github.com/amphp/process/tree/v2.0.3" + "source": "https://github.com/amphp/process/tree/v2.1.0" }, "funding": [ { @@ -7150,28 +7256,31 @@ "type": "github" } ], - "time": "2024-04-19T03:13:44+00:00" + "time": "2026-05-31T15:11:55+00:00" }, { "name": "amphp/serialization", - "version": "v1.0.0", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/amphp/serialization.git", - "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" + "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", - "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", + "url": "https://api.github.com/repos/amphp/serialization/zipball/fdf2834d78cebb0205fb2672676c1b1eb84371f0", + "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.4" }, "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "phpunit/phpunit": "^9 || ^8 || ^7" + "amphp/php-cs-fixer-config": "^2", + "ext-json": "*", + "ext-zlib": "*", + "phpunit/phpunit": "^9", + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -7206,22 +7315,28 @@ ], "support": { "issues": "https://github.com/amphp/serialization/issues", - "source": "https://github.com/amphp/serialization/tree/master" + "source": "https://github.com/amphp/serialization/tree/v1.1.0" }, - "time": "2020-03-25T21:39:07+00:00" + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2026-04-05T15:59:53+00:00" }, { "name": "amphp/socket", - "version": "v2.3.1", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/amphp/socket.git", - "reference": "58e0422221825b79681b72c50c47a930be7bf1e1" + "reference": "b347be5aff6b2cc025208bb4d896607eb470c018" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/socket/zipball/58e0422221825b79681b72c50c47a930be7bf1e1", - "reference": "58e0422221825b79681b72c50c47a930be7bf1e1", + "url": "https://api.github.com/repos/amphp/socket/zipball/b347be5aff6b2cc025208bb4d896607eb470c018", + "reference": "b347be5aff6b2cc025208bb4d896607eb470c018", "shasum": "" }, "require": { @@ -7230,17 +7345,17 @@ "amphp/dns": "^2", "ext-openssl": "*", "kelunik/certificate": "^1.1", - "league/uri": "^6.5 | ^7", - "league/uri-interfaces": "^2.3 | ^7", + "league/uri": "^7", + "league/uri-interfaces": "^7", "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" + "revolt/event-loop": "^1" }, "require-dev": { "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "amphp/process": "^2", "phpunit/phpunit": "^9", - "psalm/phar": "5.20" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -7284,7 +7399,7 @@ ], "support": { "issues": "https://github.com/amphp/socket/issues", - "source": "https://github.com/amphp/socket/tree/v2.3.1" + "source": "https://github.com/amphp/socket/tree/v2.4.1" }, "funding": [ { @@ -7292,7 +7407,7 @@ "type": "github" } ], - "time": "2024-04-21T14:33:03+00:00" + "time": "2026-08-22T18:13:20+00:00" }, { "name": "amphp/sync", @@ -7434,16 +7549,16 @@ }, { "name": "brianium/paratest", - "version": "v7.19.2", + "version": "v7.24.1", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "66e4f7910cecf67736bccf2b8bd53a2e3eb98bd9" + "reference": "c29bc43a5cdd0124b7eff959064ae83ea902b49a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/66e4f7910cecf67736bccf2b8bd53a2e3eb98bd9", - "reference": "66e4f7910cecf67736bccf2b8bd53a2e3eb98bd9", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/c29bc43a5cdd0124b7eff959064ae83ea902b49a", + "reference": "c29bc43a5cdd0124b7eff959064ae83ea902b49a", "shasum": "" }, "require": { @@ -7453,25 +7568,25 @@ "ext-simplexml": "*", "fidry/cpu-core-counter": "^1.3.0", "jean85/pretty-package-versions": "^2.1.1", - "php": "~8.3.0 || ~8.4.0 || ~8.5.0", - "phpunit/php-code-coverage": "^12.5.3 || ^13.0.1", - "phpunit/php-file-iterator": "^6.0.1 || ^7", - "phpunit/php-timer": "^8 || ^9", - "phpunit/phpunit": "^12.5.14 || ^13.0.5", - "sebastian/environment": "^8.0.3 || ^9", - "symfony/console": "^7.4.7 || ^8.0.7", - "symfony/process": "^7.4.5 || ^8.0.5" + "php": "~8.4.0 || ~8.5.0", + "phpunit/php-code-coverage": "^14.3.1", + "phpunit/php-file-iterator": "^7", + "phpunit/php-timer": "^9", + "phpunit/phpunit": "^13.3.1", + "sebastian/environment": "^9.3.2", + "symfony/console": "^7.4.8 || ^8.1.2", + "symfony/process": "^7.4.8 || ^8.1.0" }, "require-dev": { "doctrine/coding-standard": "^14.0.0", "ext-pcntl": "*", "ext-pcov": "*", "ext-posix": "*", - "phpstan/phpstan": "^2.1.40", - "phpstan/phpstan-deprecation-rules": "^2.0.4", - "phpstan/phpstan-phpunit": "^2.0.16", - "phpstan/phpstan-strict-rules": "^2.0.10", - "symfony/filesystem": "^7.4.6 || ^8.0.6" + "phpstan/phpstan": "^2.2.8", + "phpstan/phpstan-deprecation-rules": "^2.0.5", + "phpstan/phpstan-phpunit": "^2.0.18", + "phpstan/phpstan-strict-rules": "^2.0.12", + "symfony/filesystem": "^7.4.8 || ^8.1.2" }, "bin": [ "bin/paratest", @@ -7511,7 +7626,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.19.2" + "source": "https://github.com/paratestphp/paratest/tree/v7.24.1" }, "funding": [ { @@ -7523,7 +7638,7 @@ "type": "paypal" } ], - "time": "2026-03-09T14:33:17+00:00" + "time": "2026-08-17T06:31:26+00:00" }, { "name": "clue/ndjson-react", @@ -7679,28 +7794,29 @@ }, { "name": "composer/pcre", - "version": "3.3.2", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed", + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "conflict": { - "phpstan/phpstan": "<1.11.10" + "phpstan/phpstan": "<2.2.2" }, "require-dev": { - "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8 || ^9" + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^9" }, "type": "library", "extra": { @@ -7738,7 +7854,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.2" + "source": "https://github.com/composer/pcre/tree/3.4.0" }, "funding": [ { @@ -7748,13 +7864,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-11-12T16:29:46+00:00" + "time": "2026-06-07T11:47:49+00:00" }, { "name": "composer/semver", @@ -8318,27 +8430,25 @@ }, { "name": "doctrine/lexer", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + "reference": "e96fe45e92a54233726014a7cc7340abf29bb14c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e96fe45e92a54233726014a7cc7340abf29bb14c", + "reference": "e96fe45e92a54233726014a7cc7340abf29bb14c", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.21" + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^10.5.58 || ^12.5.4" }, "type": "library", "autoload": { @@ -8375,7 +8485,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" + "source": "https://github.com/doctrine/lexer/tree/3.0.2" }, "funding": [ { @@ -8391,7 +8501,76 @@ "type": "tidelift" } ], - "time": "2024-02-05T11:56:58+00:00" + "time": "2026-06-14T20:44:06+00:00" + }, + { + "name": "ergebnis/agent-detector", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/agent-detector.git", + "reference": "e211f17928c8b95a51e06040792d57f5462fb271" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/agent-detector/zipball/e211f17928c8b95a51e06040792d57f5462fb271", + "reference": "e211f17928c8b95a51e06040792d57f5462fb271", + "shasum": "" + }, + "require": { + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0 || ~8.6.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.51.0", + "ergebnis/license": "^2.7.0", + "ergebnis/php-cs-fixer-config": "^6.60.2", + "ergebnis/phpstan-rules": "^2.13.1", + "ergebnis/phpunit-slow-test-detector": "^2.24.0", + "ergebnis/rector-rules": "^1.18.1", + "fakerphp/faker": "^1.24.1", + "infection/infection": "^0.26.6", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.54", + "phpstan/phpstan-deprecation-rules": "^2.0.4", + "phpstan/phpstan-phpunit": "^2.0.16", + "phpstan/phpstan-strict-rules": "^2.0.10", + "phpunit/phpunit": "^9.6.34", + "rector/rector": "^2.4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + }, + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Ergebnis\\AgentDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides a detector for detecting the presence of an agent.", + "homepage": "https://github.com/ergebnis/agent-detector", + "support": { + "issues": "https://github.com/ergebnis/agent-detector/issues", + "security": "https://github.com/ergebnis/agent-detector/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/agent-detector" + }, + "time": "2026-05-07T08:19:07+00:00" }, { "name": "evenement/evenement", @@ -8559,22 +8738,23 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.94.2", + "version": "v3.95.27", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "7787ceff91365ba7d623ec410b8f429cdebb4f63" + "reference": "1d0c68ee5f37446d8ad5970b82384cd1bb0a3317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/7787ceff91365ba7d623ec410b8f429cdebb4f63", - "reference": "7787ceff91365ba7d623ec410b8f429cdebb4f63", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1d0c68ee5f37446d8ad5970b82384cd1bb0a3317", + "reference": "1d0c68ee5f37446d8ad5970b82384cd1bb0a3317", "shasum": "" }, "require": { "clue/ndjson-react": "^1.3", "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.5", + "ergebnis/agent-detector": "^1.2", "ext-filter": "*", "ext-hash": "*", "ext-json": "*", @@ -8585,32 +8765,31 @@ "react/event-loop": "^1.5", "react/socket": "^1.16", "react/stream": "^1.4", - "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0 || ^8.0 || ^9.0", "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.33", - "symfony/polyfill-php80": "^1.33", - "symfony/polyfill-php81": "^1.33", - "symfony/polyfill-php84": "^1.33", + "symfony/polyfill-mbstring": "^1.37", + "symfony/polyfill-php80": "^1.37", + "symfony/polyfill-php81": "^1.37", + "symfony/polyfill-php84": "^1.37", "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.7.1", - "infection/infection": "^0.32.3", - "justinrainbow/json-schema": "^6.6.4", + "facile-it/paraunit": "^1.3.1 || ^2.11.0", + "infection/infection": "^0.32.7", + "justinrainbow/json-schema": "^6.12.0", "keradus/cli-executor": "^2.3", - "mikey179/vfsstream": "^1.6.12", "php-coveralls/php-coveralls": "^2.9.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.7", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.7", - "phpunit/phpunit": "^9.6.34 || ^10.5.63 || ^11.5.51", - "symfony/polyfill-php85": "^1.33", - "symfony/var-dumper": "^5.4.48 || ^6.4.32 || ^7.4.4 || ^8.0.4", - "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0.1" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.8", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.8", + "phpunit/phpunit": "^9.6.36 || ^10.5.64 || ^11.5.56 || ^12.5.35 || ^13.3.3", + "symfony/polyfill-php85": "^1.41", + "symfony/var-dumper": "^5.4.48 || ^6.4.45 || ^7.4.18 || ^8.1.7", + "symfony/yaml": "^5.4.53 || ^6.4.45 || ^7.4.18 || ^8.1.6" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -8651,7 +8830,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.94.2" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.95.27" }, "funding": [ { @@ -8659,29 +8838,31 @@ "type": "github" } ], - "time": "2026-02-20T16:13:53+00:00" + "time": "2026-09-22T09:54:55+00:00" }, { "name": "infection/abstract-testframework-adapter", - "version": "0.5.0", + "version": "0.5.1", "source": { "type": "git", "url": "https://github.com/infection/abstract-testframework-adapter.git", - "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b" + "reference": "b24bf3e850f70cd20a10621f08c3cef66f147ac8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/18925e20d15d1a5995bb85c9dc09e8751e1e069b", - "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b", + "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/b24bf3e850f70cd20a10621f08c3cef66f147ac8", + "reference": "b24bf3e850f70cd20a10621f08c3cef66f147ac8", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.3" }, "require-dev": { - "ergebnis/composer-normalize": "^2.8", - "friendsofphp/php-cs-fixer": "^2.17", - "phpunit/phpunit": "^9.5" + "ergebnis/composer-normalize": "^2.18", + "fidry/makefile": "^1.0", + "friendsofphp/php-cs-fixer": "^3.95.2", + "phpunit/phpunit": "^12.0 || ^13.0", + "rector/rector": "^2.4.5" }, "type": "library", "autoload": { @@ -8702,7 +8883,7 @@ "description": "Abstract Test Framework Adapter for Infection", "support": { "issues": "https://github.com/infection/abstract-testframework-adapter/issues", - "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.0" + "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.1" }, "funding": [ { @@ -8714,7 +8895,7 @@ "type": "open_collective" } ], - "time": "2021-08-17T18:49:12+00:00" + "time": "2026-05-28T19:10:29+00:00" }, { "name": "infection/extension-installer", @@ -8784,21 +8965,21 @@ }, { "name": "infection/include-interceptor", - "version": "0.2.5", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/infection/include-interceptor.git", - "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7" + "reference": "c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7", - "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7", + "url": "https://api.github.com/repos/infection/include-interceptor/zipball/c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992", + "reference": "c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992", "shasum": "" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.16", - "infection/infection": "^0.15.0", + "infection/infection": "^0.19.0", "phan/phan": "^2.4 || ^3", "php-coveralls/php-coveralls": "^2.2", "phpstan/phpstan": "^0.12.8", @@ -8824,7 +9005,7 @@ "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.", "support": { "issues": "https://github.com/infection/include-interceptor/issues", - "source": "https://github.com/infection/include-interceptor/tree/0.2.5" + "source": "https://github.com/infection/include-interceptor/tree/1.0.0" }, "funding": [ { @@ -8836,20 +9017,20 @@ "type": "open_collective" } ], - "time": "2021-08-09T10:03:57+00:00" + "time": "2024-05-03T21:48:06+00:00" }, { "name": "infection/infection", - "version": "0.32.6", + "version": "0.35.4", "source": { "type": "git", "url": "https://github.com/infection/infection.git", - "reference": "4ed769947eaf2ecf42203027301bad2bedf037e5" + "reference": "487bf060228e1272c6a9653468b87a4fe29436df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/infection/zipball/4ed769947eaf2ecf42203027301bad2bedf037e5", - "reference": "4ed769947eaf2ecf42203027301bad2bedf037e5", + "url": "https://api.github.com/repos/infection/infection/zipball/487bf060228e1272c6a9653468b87a4fe29436df", + "reference": "487bf060228e1272c6a9653468b87a4fe29436df", "shasum": "" }, "require": { @@ -8863,46 +9044,50 @@ "fidry/cpu-core-counter": "^1.0", "infection/abstract-testframework-adapter": "^0.5.0", "infection/extension-installer": "^0.1.0", - "infection/include-interceptor": "^0.2.5", + "infection/include-interceptor": "^0.2.5 || ^1.0.0", "infection/mutator": "^0.4", "justinrainbow/json-schema": "^6.0", "nikic/php-parser": "^5.6.2", "ondram/ci-detector": "^4.1.0", - "php": "^8.2", + "php": "^8.3", "psr/log": "^2.0 || ^3.0", - "sanmai/di-container": "^0.1.12", + "sanmai/di-container": "^0.1.23 || ^0.2", "sanmai/duoclock": "^0.1.0", "sanmai/later": "^0.1.7", "sanmai/pipeline": "^7.2", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", - "symfony/console": "^6.4 || ^7.0 || ^8.0", - "symfony/filesystem": "^6.4 || ^7.0 || ^8.0", - "symfony/finder": "^6.4 || ^7.0 || ^8.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "symfony/console": "^6.4 || ^7.4 || ^8.0", + "symfony/filesystem": "^6.4 || ^7.4 || ^8.0", + "symfony/finder": "^6.4 || ^7.4 || ^8.0", "symfony/polyfill-php85": "^1.33", - "symfony/process": "^6.4 || ^7.0 || ^8.0", + "symfony/process": "^6.4 || ^7.4 || ^8.0", "thecodingmachine/safe": "^v3.0", "webmozart/assert": "^1.11 || ^2.0" }, "conflict": { "antecedent/patchwork": "<2.1.25", - "dg/bypass-finals": "<1.4.1" + "dg/bypass-finals": "<1.4.1", + "marc-mabe/php-enum": "<4.4" }, "require-dev": { + "carthage-software/mago": "^1.20", "ext-simplexml": "*", "fidry/makefile": "^1.0", "fig/log-test": "^1.2", + "phpat/phpat": "^0.12.4", "phpbench/phpbench": "^1.4", "phpstan/extension-installer": "^1.4", "phpstan/phpstan": "^2.1", + "phpstan/phpstan-deprecation-rules": "^2.0", "phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", "phpstan/phpstan-webmozart-assert": "^2.0", - "phpunit/phpunit": "^11.5.27", + "phpunit/phpunit": "^12.5.29", "rector/rector": "^2.2.4", - "shipmonk/dead-code-detector": "^0.14.0", + "shipmonk/dead-code-detector": "^1.3", "shipmonk/name-collision-detector": "^2.1", "sidz/phpstan-rules": "^0.5.1", - "symfony/yaml": "^6.4 || ^7.0 || ^8.0", + "symfony/yaml": "^6.4 || ^7.4 || ^8.0", "thecodingmachine/phpstan-safe-rule": "^1.4", "webmozarts/strict-phpunit": "^7.15" }, @@ -8960,7 +9145,7 @@ ], "support": { "issues": "https://github.com/infection/infection/issues", - "source": "https://github.com/infection/infection/tree/0.32.6" + "source": "https://github.com/infection/infection/tree/0.35.4" }, "funding": [ { @@ -8972,7 +9157,7 @@ "type": "open_collective" } ], - "time": "2026-02-26T14:34:26+00:00" + "time": "2026-09-02T13:30:25+00:00" }, { "name": "infection/mutator", @@ -9089,26 +9274,27 @@ }, { "name": "justinrainbow/json-schema", - "version": "v6.7.2", + "version": "6.13.0", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "6fea66c7204683af437864e7c4e7abf383d14bc0" + "reference": "30de5e9b3fa04253af272a7d932a38cd026c311b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/6fea66c7204683af437864e7c4e7abf383d14bc0", - "reference": "6fea66c7204683af437864e7c4e7abf383d14bc0", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/30de5e9b3fa04253af272a7d932a38cd026c311b", + "reference": "30de5e9b3fa04253af272a7d932a38cd026c311b", "shasum": "" }, "require": { + "ext-filter": "*", "ext-json": "*", "marc-mabe/php-enum": "^4.4", "php": "^7.2 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "3.3.0", - "json-schema/json-schema-test-suite": "^23.2", + "json-schema/json-schema-test-suite": "dev-main", "marc-mabe/php-enum-phpstan": "^2.0", "phpspec/prophecy": "^1.19", "phpstan/phpstan": "^1.12", @@ -9134,20 +9320,9 @@ ], "authors": [ { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "name": "Danny van der Sluijs", + "email": "danny.vandersluijs@icloud.com", + "role": "Maintainer" } ], "description": "A library to validate a json schema.", @@ -9158,9 +9333,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/v6.7.2" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.13.0" }, - "time": "2026-02-15T15:06:22+00:00" + "time": "2026-09-23T19:46:42+00:00" }, { "name": "kelunik/certificate", @@ -9477,20 +9652,20 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.4", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", + "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.0" }, "conflict": { "doctrine/collections": "<1.6.8", @@ -9525,15 +9700,15 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + "source": "https://github.com/myclabs/DeepCopy/tree/1.14.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" + "url": "https://github.com/mnapoli", + "type": "github" } ], - "time": "2025-08-01T08:46:24+00:00" + "time": "2026-08-11T10:17:44+00:00" }, { "name": "netresearch/jsonmapper", @@ -9588,20 +9763,19 @@ }, { "name": "nikic/php-parser", - "version": "v5.7.0", + "version": "v5.9.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9e33da9553fe7786f0962b35f4e4ecf01be89def", + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-json": "*", "ext-tokenizer": "*", "php": ">=7.4" @@ -9640,9 +9814,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.9.0" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2026-09-13T18:51:52+00:00" }, { "name": "ondram/ci-detector", @@ -9722,69 +9896,6 @@ }, "time": "2024-03-12T13:22:30+00:00" }, - { - "name": "pdepend/pdepend", - "version": "2.16.2", - "source": { - "type": "git", - "url": "https://github.com/pdepend/pdepend.git", - "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58", - "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58", - "shasum": "" - }, - "require": { - "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0", - "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0", - "symfony/polyfill-mbstring": "^1.19" - }, - "require-dev": { - "easy-doc/easy-doc": "0.0.0|^1.2.3", - "gregwar/rst": "^1.0", - "squizlabs/php_codesniffer": "^2.0.0" - }, - "bin": [ - "src/bin/pdepend" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "PDepend\\": "src/main/php/PDepend" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Official version of pdepend to be handled with Composer", - "keywords": [ - "PHP Depend", - "PHP_Depend", - "dev", - "pdepend" - ], - "support": { - "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.16.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend", - "type": "tidelift" - } - ], - "time": "2023-12-17T18:09:59+00:00" - }, { "name": "phar-io/manifest", "version": "2.0.4", @@ -9956,16 +10067,16 @@ }, { "name": "phpbench/phpbench", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/phpbench/phpbench.git", - "reference": "fdeb35d0d277dd6b9e795df6cbbec9218f3b143e" + "reference": "3d13c0d5dcf8730a67b70fa7fb03b4556b5cc0fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpbench/phpbench/zipball/fdeb35d0d277dd6b9e795df6cbbec9218f3b143e", - "reference": "fdeb35d0d277dd6b9e795df6cbbec9218f3b143e", + "url": "https://api.github.com/repos/phpbench/phpbench/zipball/3d13c0d5dcf8730a67b70fa7fb03b4556b5cc0fe", + "reference": "3d13c0d5dcf8730a67b70fa7fb03b4556b5cc0fe", "shasum": "" }, "require": { @@ -9990,14 +10101,14 @@ "require-dev": { "dantleech/invoke": "^2.0", "ergebnis/composer-normalize": "^2.39", - "jangregor/phpstan-prophecy": "^1.0", + "jangregor/phpstan-prophecy": "^2.0", "php-cs-fixer/shim": "^3.9", "phpspec/prophecy": "^1.22", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^11.5", - "rector/rector": "^1.2", + "rector/rector": "^2.2", "sebastian/exporter": "^6.3.2", "symfony/error-handler": "^6.1 || ^7.0 || ^8.0", "symfony/var-dumper": "^6.1 || ^7.0 || ^8.0" @@ -10043,7 +10154,7 @@ ], "support": { "issues": "https://github.com/phpbench/phpbench/issues", - "source": "https://github.com/phpbench/phpbench/tree/1.6.0" + "source": "https://github.com/phpbench/phpbench/tree/1.7.0" }, "funding": [ { @@ -10051,7 +10162,7 @@ "type": "github" } ], - "time": "2026-03-21T18:08:17+00:00" + "time": "2026-06-08T19:09:20+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -10229,101 +10340,18 @@ }, "time": "2026-01-06T21:53:42+00:00" }, - { - "name": "phpmd/phpmd", - "version": "2.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpmd/phpmd.git", - "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0", - "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0", - "shasum": "" - }, - "require": { - "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", - "ext-xml": "*", - "pdepend/pdepend": "^2.16.1", - "php": ">=5.3.9" - }, - "require-dev": { - "easy-doc/easy-doc": "0.0.0 || ^1.3.2", - "ext-json": "*", - "ext-simplexml": "*", - "gregwar/rst": "^1.0", - "mikey179/vfsstream": "^1.6.8", - "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" - }, - "bin": [ - "src/bin/phpmd" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPMD\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Manuel Pichler", - "email": "github@manuel-pichler.de", - "homepage": "https://github.com/manuelpichler", - "role": "Project Founder" - }, - { - "name": "Marc Würth", - "email": "ravage@bluewin.ch", - "homepage": "https://github.com/ravage84", - "role": "Project Maintainer" - }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" - } - ], - "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "https://phpmd.org/", - "keywords": [ - "dev", - "mess detection", - "mess detector", - "pdepend", - "phpmd", - "pmd" - ], - "support": { - "irc": "irc://irc.freenode.org/phpmd", - "issues": "https://github.com/phpmd/phpmd/issues", - "source": "https://github.com/phpmd/phpmd/tree/2.15.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd", - "type": "tidelift" - } - ], - "time": "2023-12-11T08:22:20+00:00" - }, { "name": "phpspec/prophecy", - "version": "v1.26.0", + "version": "v1.26.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "0da07c10d5fe64cd0c748f0523b47599400f2ed1" + "reference": "09c2e5949d676286358a62af818f8407167a9dd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/0da07c10d5fe64cd0c748f0523b47599400f2ed1", - "reference": "0da07c10d5fe64cd0c748f0523b47599400f2ed1", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/09c2e5949d676286358a62af818f8407167a9dd6", + "reference": "09c2e5949d676286358a62af818f8407167a9dd6", "shasum": "" }, "require": { @@ -10379,9 +10407,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.26.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.26.1" }, - "time": "2026-02-24T15:40:48+00:00" + "time": "2026-04-13T14:35:16+00:00" }, { "name": "phpspec/prophecy-phpunit", @@ -10440,16 +10468,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.3.2", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" + "reference": "148cefffaf0233e4c08cc13db8a195a56dd6dfe9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", - "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/148cefffaf0233e4c08cc13db8a195a56dd6dfe9", + "reference": "148cefffaf0233e4c08cc13db8a195a56dd6dfe9", "shasum": "" }, "require": { @@ -10481,17 +10509,17 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.5" }, - "time": "2026-01-25T14:56:51+00:00" + "time": "2026-08-31T16:05:28+00:00" }, { "name": "phpstan/phpstan", - "version": "2.1.42", + "version": "2.2.15", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1279e1ce86ba768f0780c9d889852b4e02ff40d0", - "reference": "1279e1ce86ba768f0780c9d889852b4e02ff40d0", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b158556ffd26825cf615a1c1f72fb5157a2301b7", + "reference": "b158556ffd26825cf615a1c1f72fb5157a2301b7", "shasum": "" }, "require": { @@ -10514,6 +10542,17 @@ "license": [ "MIT" ], + "authors": [ + { + "name": "Ondřej Mirtes" + }, + { + "name": "Markus Staab" + }, + { + "name": "Vincent Langlet" + } + ], "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ "dev", @@ -10536,38 +10575,39 @@ "type": "github" } ], - "time": "2026-03-17T14:58:32+00:00" + "time": "2026-09-23T12:23:07+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "12.5.3", + "version": "14.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d" + "reference": "f8640c238e930b914d0098a1edbad6652e61a64a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b015312f28dd75b75d3422ca37dff2cd1a565e8d", - "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f8640c238e930b914d0098a1edbad6652e61a64a", + "reference": "f8640c238e930b914d0098a1edbad6652e61a64a", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", + "ext-mbstring": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.7.0", - "php": ">=8.3", - "phpunit/php-file-iterator": "^6.0", - "phpunit/php-text-template": "^5.0", - "sebastian/complexity": "^5.0", - "sebastian/environment": "^8.0.3", - "sebastian/lines-of-code": "^4.0", - "sebastian/version": "^6.0", + "nikic/php-parser": "^5.8.0", + "php": ">=8.4", + "phpunit/php-text-template": "^6.0", + "sebastian/complexity": "^6.0", + "sebastian/environment": "^9.3.2", + "sebastian/git-state": "^1.0", + "sebastian/lines-of-code": "^5.0.2", + "sebastian/version": "^7.0", "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^12.5.1" + "phpunit/phpunit": "^13.3.3" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10576,7 +10616,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "12.5.x-dev" + "dev-main": "14.3.x-dev" } }, "autoload": { @@ -10605,7 +10645,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.3" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.3.3" }, "funding": [ { @@ -10625,32 +10665,32 @@ "type": "tidelift" } ], - "time": "2026-02-06T06:01:44+00:00" + "time": "2026-09-10T13:08:32+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "6.0.1", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" + "reference": "9bb4e6c58b62c1e043be995c66abec7c97307aae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/9bb4e6c58b62c1e043be995c66abec7c97307aae", + "reference": "9bb4e6c58b62c1e043be995c66abec7c97307aae", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.3.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -10678,7 +10718,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/7.0.2" }, "funding": [ { @@ -10698,28 +10738,28 @@ "type": "tidelift" } ], - "time": "2026-02-02T14:04:18+00:00" + "time": "2026-08-25T14:47:43+00:00" }, { "name": "phpunit/php-invoker", - "version": "6.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" + "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", - "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88", + "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-pcntl": "*" @@ -10727,7 +10767,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -10754,40 +10794,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/7.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-invoker", + "type": "tidelift" } ], - "time": "2025-02-07T04:58:58+00:00" + "time": "2026-02-06T04:34:47+00:00" }, { "name": "phpunit/php-text-template", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/a47af19f93f76aa3368303d752aa5272ca3299f4", + "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10814,40 +10866,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/6.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-text-template", + "type": "tidelift" } ], - "time": "2025-02-07T04:59:16+00:00" + "time": "2026-02-06T04:36:37+00:00" }, { "name": "phpunit/php-timer", - "version": "8.0.0", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" + "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", - "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a0e12065831f6ab0d83120dc61513eb8d9a966f6", + "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -10874,56 +10938,70 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" + "source": "https://github.com/sebastianbergmann/php-timer/tree/9.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-timer", + "type": "tidelift" } ], - "time": "2025-02-07T04:59:38+00:00" + "time": "2026-02-06T04:37:53+00:00" }, { "name": "phpunit/phpunit", - "version": "12.5.14", + "version": "13.3.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "47283cfd98d553edcb1353591f4e255dc1bb61f0" + "reference": "d19d90cf860efb7e4d96cee8243e06a248578085" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/47283cfd98d553edcb1353591f4e255dc1bb61f0", - "reference": "47283cfd98d553edcb1353591f4e255dc1bb61f0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d19d90cf860efb7e4d96cee8243e06a248578085", + "reference": "d19d90cf860efb7e4d96cee8243e06a248578085", "shasum": "" }, "require": { "ext-dom": "*", + "ext-filter": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", - "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", + "myclabs/deep-copy": "^1.14.0", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.3", - "phpunit/php-code-coverage": "^12.5.3", - "phpunit/php-file-iterator": "^6.0.1", - "phpunit/php-invoker": "^6.0.0", - "phpunit/php-text-template": "^5.0.0", - "phpunit/php-timer": "^8.0.0", - "sebastian/cli-parser": "^4.2.0", - "sebastian/comparator": "^7.1.4", - "sebastian/diff": "^7.0.0", - "sebastian/environment": "^8.0.3", - "sebastian/exporter": "^7.0.2", - "sebastian/global-state": "^8.0.2", - "sebastian/object-enumerator": "^7.0.0", - "sebastian/recursion-context": "^7.0.1", - "sebastian/type": "^6.0.3", - "sebastian/version": "^6.0.0", + "php": ">=8.4.1", + "phpunit/php-code-coverage": "^14.3.3", + "phpunit/php-file-iterator": "^7.0.2", + "phpunit/php-invoker": "^7.0.0", + "phpunit/php-text-template": "^6.0.0", + "phpunit/php-timer": "^9.0.0", + "sebastian/cli-parser": "^5.0.1", + "sebastian/comparator": "^8.4", + "sebastian/diff": "^9.0.1", + "sebastian/environment": "^9.3.2", + "sebastian/exporter": "^8.2.1", + "sebastian/file-filter": "^1.0", + "sebastian/git-state": "^1.0", + "sebastian/global-state": "^9.0.1", + "sebastian/object-enumerator": "^8.1.0", + "sebastian/recursion-context": "^8.0.1", + "sebastian/type": "^7.0.2", + "sebastian/version": "^7.0.0", "staabm/side-effects-detector": "^1.0.5" }, "bin": [ @@ -10932,7 +11010,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "12.5-dev" + "dev-main": "13.3-dev" } }, "autoload": { @@ -10964,31 +11042,15 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.14" + "source": "https://github.com/sebastianbergmann/phpunit/tree/13.3.4" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2026-02-18T12:38:40+00:00" + "time": "2026-09-15T07:37:05+00:00" }, { "name": "psr/clock", @@ -11566,16 +11628,16 @@ }, { "name": "revolt/event-loop", - "version": "v1.0.8", + "version": "v1.0.9", "source": { "type": "git", "url": "https://github.com/revoltphp/event-loop.git", - "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c" + "reference": "44061cf513e53c6200372fc935ac42271566295d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/b6fc06dce8e9b523c9946138fa5e62181934f91c", - "reference": "b6fc06dce8e9b523c9946138fa5e62181934f91c", + "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/44061cf513e53c6200372fc935ac42271566295d", + "reference": "44061cf513e53c6200372fc935ac42271566295d", "shasum": "" }, "require": { @@ -11585,7 +11647,7 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^9", - "psalm/phar": "^5.15" + "psalm/phar": "6.16.*" }, "type": "library", "extra": { @@ -11632,28 +11694,28 @@ ], "support": { "issues": "https://github.com/revoltphp/event-loop/issues", - "source": "https://github.com/revoltphp/event-loop/tree/v1.0.8" + "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9" }, - "time": "2025-08-27T21:33:23+00:00" + "time": "2026-05-16T17:55:38+00:00" }, { "name": "sanmai/di-container", - "version": "0.1.12", + "version": "0.2", "source": { "type": "git", "url": "https://github.com/sanmai/di-container.git", - "reference": "8b9ad72f6ac1f9e185e5bd060dc9479cb5191d8b" + "reference": "c14ca816bb5527e2361e3dc554a20829674c7ee1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sanmai/di-container/zipball/8b9ad72f6ac1f9e185e5bd060dc9479cb5191d8b", - "reference": "8b9ad72f6ac1f9e185e5bd060dc9479cb5191d8b", + "url": "https://api.github.com/repos/sanmai/di-container/zipball/c14ca816bb5527e2361e3dc554a20829674c7ee1", + "reference": "c14ca816bb5527e2361e3dc554a20829674c7ee1", "shasum": "" }, "require": { "php": ">=8.2", "psr/container": "^1.1.2 || ^2.0", - "sanmai/pipeline": "^6.17 || ^7.0" + "sanmai/pipeline": "^7.10" }, "require-dev": { "ergebnis/composer-normalize": "^2.8", @@ -11705,7 +11767,7 @@ ], "support": { "issues": "https://github.com/sanmai/di-container/issues", - "source": "https://github.com/sanmai/di-container/tree/0.1.12" + "source": "https://github.com/sanmai/di-container/tree/0.2" }, "funding": [ { @@ -11713,7 +11775,7 @@ "type": "github" } ], - "time": "2026-01-27T08:25:46+00:00" + "time": "2026-08-11T06:42:18+00:00" }, { "name": "sanmai/duoclock", @@ -11780,16 +11842,16 @@ }, { "name": "sanmai/later", - "version": "0.1.7", + "version": "0.1.8", "source": { "type": "git", "url": "https://github.com/sanmai/later.git", - "reference": "72a82d783864bca90412d8a26c1878f8981fee97" + "reference": "c56aeb8fa7fdf81eda2640a68b51884685963d13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sanmai/later/zipball/72a82d783864bca90412d8a26c1878f8981fee97", - "reference": "72a82d783864bca90412d8a26c1878f8981fee97", + "url": "https://api.github.com/repos/sanmai/later/zipball/c56aeb8fa7fdf81eda2640a68b51884685963d13", + "reference": "c56aeb8fa7fdf81eda2640a68b51884685963d13", "shasum": "" }, "require": { @@ -11832,7 +11894,7 @@ "description": "Later: deferred wrapper object", "support": { "issues": "https://github.com/sanmai/later/issues", - "source": "https://github.com/sanmai/later/tree/0.1.7" + "source": "https://github.com/sanmai/later/tree/0.1.8" }, "funding": [ { @@ -11840,20 +11902,20 @@ "type": "github" } ], - "time": "2025-05-11T01:48:00+00:00" + "time": "2026-06-29T07:24:33+00:00" }, { "name": "sanmai/pipeline", - "version": "7.9", + "version": "7.10", "source": { "type": "git", "url": "https://github.com/sanmai/pipeline.git", - "reference": "d7046ecce91ae57fca403be694888371a21250eb" + "reference": "a8e4e57a6031efc7a92defd13fed9c1c4c73fc71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sanmai/pipeline/zipball/d7046ecce91ae57fca403be694888371a21250eb", - "reference": "d7046ecce91ae57fca403be694888371a21250eb", + "url": "https://api.github.com/repos/sanmai/pipeline/zipball/a8e4e57a6031efc7a92defd13fed9c1c4c73fc71", + "reference": "a8e4e57a6031efc7a92defd13fed9c1c4c73fc71", "shasum": "" }, "require": { @@ -11868,7 +11930,7 @@ "php-coveralls/php-coveralls": "^2.4.1", "phpstan/extension-installer": "^1.4", "phpstan/phpstan": "^2", - "phpunit/phpunit": ">=9.4 <12", + "phpunit/phpunit": "^11 || ^12", "sanmai/phpstan-rules": "^0.3.11", "sanmai/phpunit-double-colon-syntax": "^0.1.1", "vimeo/psalm": ">=2" @@ -11900,7 +11962,7 @@ "description": "General-purpose collections pipeline", "support": { "issues": "https://github.com/sanmai/pipeline/issues", - "source": "https://github.com/sanmai/pipeline/tree/7.9" + "source": "https://github.com/sanmai/pipeline/tree/7.10" }, "funding": [ { @@ -11908,32 +11970,32 @@ "type": "github" } ], - "time": "2026-01-16T11:54:05+00:00" + "time": "2026-08-03T04:56:22+00:00" }, { "name": "sebastian/cli-parser", - "version": "4.2.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" + "reference": "eeb759ad3146b7096fb59c3195d39e071cd409e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", - "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/eeb759ad3146b7096fb59c3195d39e071cd409e3", + "reference": "eeb759ad3146b7096fb59c3195d39e071cd409e3", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.2.6" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.2-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11957,7 +12019,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/5.0.1" }, "funding": [ { @@ -11977,31 +12039,31 @@ "type": "tidelift" } ], - "time": "2025-09-14T09:36:45+00:00" + "time": "2026-08-01T04:27:14+00:00" }, { "name": "sebastian/comparator", - "version": "7.1.4", + "version": "8.4.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "6a7de5df2e094f9a80b40a522391a7e6022df5f6" + "reference": "3b070e608146cba00fd6fd1f0ffba89e5a8897fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a7de5df2e094f9a80b40a522391a7e6022df5f6", - "reference": "6a7de5df2e094f9a80b40a522391a7e6022df5f6", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/3b070e608146cba00fd6fd1f0ffba89e5a8897fb", + "reference": "3b070e608146cba00fd6fd1f0ffba89e5a8897fb", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.3", - "sebastian/diff": "^7.0", - "sebastian/exporter": "^7.0" + "php": ">=8.4", + "sebastian/diff": "^9.0", + "sebastian/exporter": "^8.2" }, "require-dev": { - "phpunit/phpunit": "^12.2" + "phpunit/phpunit": "^13.3" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -12009,7 +12071,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "7.1-dev" + "dev-main": "8.4-dev" } }, "autoload": { @@ -12049,7 +12111,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.4" + "source": "https://github.com/sebastianbergmann/comparator/tree/8.4.0" }, "funding": [ { @@ -12069,33 +12131,33 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:28:48+00:00" + "time": "2026-08-07T07:23:13+00:00" }, { "name": "sebastian/complexity", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" + "reference": "c5651c795c98093480df79350cb050813fc7a2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", - "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c5651c795c98093480df79350cb050813fc7a2f3", + "reference": "c5651c795c98093480df79350cb050813fc7a2f3", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -12119,41 +12181,53 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/6.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/complexity", + "type": "tidelift" } ], - "time": "2025-02-07T04:55:25+00:00" + "time": "2026-02-06T04:41:32+00:00" }, { "name": "sebastian/diff", - "version": "7.0.0", + "version": "9.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + "reference": "a2df6626c1baf31d5a88674882a3072f151b5a26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a2df6626c1baf31d5a88674882a3072f151b5a26", + "reference": "a2df6626c1baf31d5a88674882a3072f151b5a26", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0", - "symfony/process": "^7.2" + "phpunit/phpunit": "^13.3.1", + "symfony/process": "^7.4.17" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -12186,35 +12260,47 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/diff/tree/9.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", + "type": "tidelift" } ], - "time": "2025-02-07T04:55:46+00:00" + "time": "2026-08-25T15:38:55+00:00" }, { "name": "sebastian/environment", - "version": "8.0.4", + "version": "9.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "7b8842c2d8e85d0c3a5831236bf5869af6ab2a11" + "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/7b8842c2d8e85d0c3a5831236bf5869af6ab2a11", - "reference": "7b8842c2d8e85d0c3a5831236bf5869af6ab2a11", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e", + "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.1.11" }, "suggest": { "ext-posix": "*" @@ -12222,7 +12308,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "9.3-dev" } }, "autoload": { @@ -12250,7 +12336,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/8.0.4" + "source": "https://github.com/sebastianbergmann/environment/tree/9.3.2" }, "funding": [ { @@ -12270,34 +12356,34 @@ "type": "tidelift" } ], - "time": "2026-03-15T07:05:40+00:00" + "time": "2026-05-25T13:41:38+00:00" }, { "name": "sebastian/exporter", - "version": "7.0.2", + "version": "8.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "016951ae10980765e4e7aee491eb288c64e505b7" + "reference": "24a3b69bba4a12ab615fca9d34680c5598d9ab7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7", - "reference": "016951ae10980765e4e7aee491eb288c64e505b7", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/24a3b69bba4a12ab615fca9d34680c5598d9ab7a", + "reference": "24a3b69bba4a12ab615fca9d34680c5598d9ab7a", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.3", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/recursion-context": "^8.0.1" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.2-dev" } }, "autoload": { @@ -12340,7 +12426,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/8.2.1" }, "funding": [ { @@ -12360,35 +12446,173 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:16:11+00:00" + "time": "2026-08-07T07:22:06+00:00" + }, + { + "name": "sebastian/file-filter", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/file-filter.git", + "reference": "33a26f394330f6faa7684bb9cc73afb7727aae93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/file-filter/zipball/33a26f394330f6faa7684bb9cc73afb7727aae93", + "reference": "33a26f394330f6faa7684bb9cc73afb7727aae93", + "shasum": "" + }, + "require": { + "php": ">=8.4" + }, + "require-dev": { + "phpunit/phpunit": "^13.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for filtering files", + "homepage": "https://github.com/sebastianbergmann/file-filter", + "support": { + "issues": "https://github.com/sebastianbergmann/file-filter/issues", + "security": "https://github.com/sebastianbergmann/file-filter/security/policy", + "source": "https://github.com/sebastianbergmann/file-filter/tree/1.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/file-filter", + "type": "tidelift" + } + ], + "time": "2026-04-22T07:20:04+00:00" + }, + { + "name": "sebastian/git-state", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/git-state.git", + "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/git-state/zipball/792a952e0eba55b6960a48aeceb9f371aad1f76b", + "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b", + "shasum": "" + }, + "require": { + "php": ">=8.4" + }, + "require-dev": { + "phpunit/phpunit": "^13.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for describing the state of a Git checkout", + "homepage": "https://github.com/sebastianbergmann/git-state", + "support": { + "issues": "https://github.com/sebastianbergmann/git-state/issues", + "security": "https://github.com/sebastianbergmann/git-state/security/policy", + "source": "https://github.com/sebastianbergmann/git-state/tree/1.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/git-state", + "type": "tidelift" + } + ], + "time": "2026-03-21T12:54:28+00:00" }, { "name": "sebastian/global-state", - "version": "8.0.2", + "version": "9.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "ef1377171613d09edd25b7816f05be8313f9115d" + "reference": "ba68ba79da690cf7eddefd3ce5b78b20b9ba9945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d", - "reference": "ef1377171613d09edd25b7816f05be8313f9115d", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ba68ba79da690cf7eddefd3ce5b78b20b9ba9945", + "reference": "ba68ba79da690cf7eddefd3ce5b78b20b9ba9945", "shasum": "" }, "require": { - "php": ">=8.3", - "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/object-reflector": "^6.0", + "sebastian/recursion-context": "^8.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.1.13" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -12414,7 +12638,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/9.0.1" }, "funding": [ { @@ -12434,33 +12658,33 @@ "type": "tidelift" } ], - "time": "2025-08-29T11:29:25+00:00" + "time": "2026-06-01T15:11:33+00:00" }, { "name": "sebastian/lines-of-code", - "version": "4.0.0", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f" + "reference": "d1b6f8fce682505dbd048977f1abedf1b8ad3ff8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f", - "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d1b6f8fce682505dbd048977f1abedf1b8ad3ff8", + "reference": "d1b6f8fce682505dbd048977f1abedf1b8ad3ff8", "shasum": "" }, "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.3" + "nikic/php-parser": "^5.8.0", + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -12484,42 +12708,53 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", + "type": "tidelift" } ], - "time": "2025-02-07T04:57:28+00:00" + "time": "2026-07-09T08:42:34+00:00" }, { "name": "sebastian/object-enumerator", - "version": "7.0.0", + "version": "8.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" + "reference": "511064ecde82bd747e2ba2fab3dda8d977b59576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", - "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/511064ecde82bd747e2ba2fab3dda8d977b59576", + "reference": "511064ecde82bd747e2ba2fab3dda8d977b59576", "shasum": "" }, "require": { - "php": ">=8.3", - "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/recursion-context": "^8.0.1" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -12542,40 +12777,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/8.1.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/object-enumerator", + "type": "tidelift" } ], - "time": "2025-02-07T04:57:48+00:00" + "time": "2026-08-13T07:05:05+00:00" }, { "name": "sebastian/object-reflector", - "version": "5.0.0", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "4bfa827c969c98be1e527abd576533293c634f6a" + "reference": "f71bbcdc4f95456b4622810bec64eb06372e25b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", - "reference": "4bfa827c969c98be1e527abd576533293c634f6a", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f71bbcdc4f95456b4622810bec64eb06372e25b2", + "reference": "f71bbcdc4f95456b4622810bec64eb06372e25b2", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -12598,40 +12845,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/6.1.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/object-reflector", + "type": "tidelift" } ], - "time": "2025-02-07T04:58:17+00:00" + "time": "2026-08-13T06:34:36+00:00" }, { "name": "sebastian/recursion-context", - "version": "7.0.1", + "version": "8.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" + "reference": "32dba72f2b4642d6a93db22d6c0a9280ff2e3ca0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", - "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/32dba72f2b4642d6a93db22d6c0a9280ff2e3ca0", + "reference": "32dba72f2b4642d6a93db22d6c0a9280ff2e3ca0", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.2.6" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -12662,7 +12921,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.1" }, "funding": [ { @@ -12682,32 +12941,32 @@ "type": "tidelift" } ], - "time": "2025-08-13T04:44:59+00:00" + "time": "2026-08-03T05:58:12+00:00" }, { "name": "sebastian/type", - "version": "6.0.3", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d" + "reference": "bd1df467864cb95140414059a535b2d906173fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d", - "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/bd1df467864cb95140414059a535b2d906173fcf", + "reference": "bd1df467864cb95140414059a535b2d906173fcf", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -12731,7 +12990,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/6.0.3" + "source": "https://github.com/sebastianbergmann/type/tree/7.0.2" }, "funding": [ { @@ -12751,29 +13010,29 @@ "type": "tidelift" } ], - "time": "2025-08-09T06:57:12+00:00" + "time": "2026-08-10T08:00:57+00:00" }, { "name": "sebastian/version", - "version": "6.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ad37a5552c8e2b88572249fdc19b6da7792e021b", + "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -12797,28 +13056,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/version/tree/7.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/version", + "type": "tidelift" } ], - "time": "2025-02-07T05:00:38+00:00" + "time": "2026-02-06T04:52:52+00:00" }, { "name": "seld/jsonlint", - "version": "1.11.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" + "reference": "9a90eb5d32d5a500296bf43f946d60246444d5f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", - "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9a90eb5d32d5a500296bf43f946d60246444d5f7", + "reference": "9a90eb5d32d5a500296bf43f946d60246444d5f7", "shasum": "" }, "require": { @@ -12857,7 +13128,7 @@ ], "support": { "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" + "source": "https://github.com/Seldaek/jsonlint/tree/1.12.1" }, "funding": [ { @@ -12869,7 +13140,7 @@ "type": "tidelift" } ], - "time": "2024-07-11T14:55:45+00:00" + "time": "2026-06-12T11:32:29+00:00" }, { "name": "spatie/array-to-xml", @@ -12993,32 +13264,32 @@ }, { "name": "symfony/maker-bundle", - "version": "v1.67.0", + "version": "1.68.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "6ce8b313845f16bcf385ee3cb31d8b24e30d5516" + "reference": "1b0fb459594fdeb1d183065451c5e954babeb16c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/6ce8b313845f16bcf385ee3cb31d8b24e30d5516", - "reference": "6ce8b313845f16bcf385ee3cb31d8b24e30d5516", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/1b0fb459594fdeb1d183065451c5e954babeb16c", + "reference": "1b0fb459594fdeb1d183065451c5e954babeb16c", "shasum": "" }, "require": { "composer-runtime-api": "^2.1", "doctrine/inflector": "^2.0", "nikic/php-parser": "^5.0", - "php": ">=8.1", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "php": ">=8.2", + "symfony/config": "^7.4|^8.1", + "symfony/console": "^7.4|^8.1", + "symfony/dependency-injection": "^7.4|^8.1", "symfony/deprecation-contracts": "^2.2|^3", - "symfony/filesystem": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", - "symfony/framework-bundle": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0" + "symfony/filesystem": "^7.4|^8.1", + "symfony/finder": "^7.4|^8.1", + "symfony/framework-bundle": "^7.4|^8.1", + "symfony/http-kernel": "^7.4|^8.1", + "symfony/process": "^7.4|^8.1" }, "conflict": { "doctrine/doctrine-bundle": "<2.10", @@ -13029,11 +13300,12 @@ "doctrine/doctrine-bundle": "^2.10|^3.0", "doctrine/orm": "^2.15|^3", "doctrine/persistence": "^3.1|^4.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/phpunit-bridge": "^6.4.1|^7.0|^8.0", - "symfony/security-core": "^6.4|^7.0|^8.0", - "symfony/security-http": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0", + "symfony/doctrine-bridge": "^7.4|^8.1", + "symfony/http-client": "^7.4|^8.1", + "symfony/phpunit-bridge": "^7.4|^8.1", + "symfony/security-core": "^7.4|^8.1", + "symfony/security-http": "^7.4|^8.1", + "symfony/yaml": "^7.4|^8.1", "twig/twig": "^3.0|^4.x-dev" }, "type": "symfony-bundle", @@ -13068,7 +13340,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.67.0" + "source": "https://github.com/symfony/maker-bundle/tree/1.68.0" }, "funding": [ { @@ -13088,20 +13360,20 @@ "type": "tidelift" } ], - "time": "2026-03-18T13:39:06+00:00" + "time": "2026-09-12T21:13:48+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v7.4.7", + "version": "v7.4.18", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "53c5a606cb4ae19c9466a5f8ffe60f61b0c93b5f" + "reference": "ff3a78aceb731b24b256a2845a8ad6e6851f942b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/53c5a606cb4ae19c9466a5f8ffe60f61b0c93b5f", - "reference": "53c5a606cb4ae19c9466a5f8ffe60f61b0c93b5f", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/ff3a78aceb731b24b256a2845a8ad6e6851f942b", + "reference": "ff3a78aceb731b24b256a2845a8ad6e6851f942b", "shasum": "" }, "require": { @@ -13153,7 +13425,7 @@ "testing" ], "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.7" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.18" }, "funding": [ { @@ -13173,20 +13445,20 @@ "type": "tidelift" } ], - "time": "2026-03-04T13:54:41+00:00" + "time": "2026-08-30T18:28:44+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.6.1", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "65a8bc82080447fae78373aa10f8d13b38338977" + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", - "reference": "65a8bc82080447fae78373aa10f8d13b38338977", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/ccb206b98faccc511ebae8e5fad50f2dc0b30621", + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621", "shasum": "" }, "require": { @@ -13199,7 +13471,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -13235,7 +13507,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.1" }, "funding": [ { @@ -13255,71 +13527,64 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/twig-bridge", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "c67219ca6b79a57b64e36bbb2cd8ba741286587e" + "reference": "7d9f1e128b44e37170f424046d23a48a3e545ad4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/c67219ca6b79a57b64e36bbb2cd8ba741286587e", - "reference": "c67219ca6b79a57b64e36bbb2cd8ba741286587e", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/7d9f1e128b44e37170f424046d23a48a3e545ad4", + "reference": "7d9f1e128b44e37170f424046d23a48a3e545ad4", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.4.1", "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^3.21" + "twig/twig": "^3.25|^4.0" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2|>=7", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/console": "<6.4", - "symfony/form": "<6.4.32|>7,<7.3.10|>7.4,<7.4.4|>8.0,<8.0.4", - "symfony/http-foundation": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/mime": "<6.4", - "symfony/serializer": "<6.4", - "symfony/translation": "<6.4", - "symfony/workflow": "<6.4" + "symfony/form": "<7.4.4|>8.0,<8.0.4", + "symfony/mime": "<7.4.9|>8.0,<8.0.9" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^5.2|^6.0", - "symfony/asset": "^6.4|^7.0|^8.0", - "symfony/asset-mapper": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/emoji": "^7.1|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", - "symfony/form": "^6.4.32|~7.3.10|^7.4.4|^8.0.4", - "symfony/html-sanitizer": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^7.3|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", - "symfony/mime": "^6.4|^7.0|^8.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^6.4|^7.0|^8.0", - "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/asset": "^7.4|^8.0", + "symfony/asset-mapper": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/form": "^7.4.4|^8.0.4", + "symfony/html-sanitizer": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/mime": "^7.4.9|^8.0.9", + "symfony/polyfill-intl-icu": "^1.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^6.4|^7.0|^8.0", - "symfony/security-csrf": "^6.4|^7.0|^8.0", - "symfony/security-http": "^6.4|^7.0|^8.0", - "symfony/serializer": "^6.4.3|^7.0.3|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4|^7.0|^8.0", - "symfony/validator": "^6.4|^7.0|^8.0", - "symfony/web-link": "^6.4|^7.0|^8.0", - "symfony/workflow": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0", + "symfony/security-core": "^7.4|^8.0", + "symfony/security-csrf": "^7.4|^8.0", + "symfony/security-http": "^7.4|^8.0", + "symfony/serializer": "^7.4.17|^8.1.5", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/web-link": "^7.4|^8.0", + "symfony/workflow": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0", "twig/cssinliner-extra": "^3", "twig/inky-extra": "^3", "twig/markdown-extra": "^3" @@ -13350,7 +13615,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.4.7" + "source": "https://github.com/symfony/twig-bridge/tree/v8.1.7" }, "funding": [ { @@ -13370,49 +13635,43 @@ "type": "tidelift" } ], - "time": "2026-03-04T15:37:05+00:00" + "time": "2026-09-14T12:20:25+00:00" }, { "name": "symfony/twig-bundle", - "version": "v7.4.4", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "e8829e02ff96a391ed0703bac9e7ff0537480b6b" + "reference": "71648fac591a675b91ae408f03a3d95a3f98b436" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/e8829e02ff96a391ed0703bac9e7ff0537480b6b", - "reference": "e8829e02ff96a391ed0703bac9e7ff0537480b6b", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/71648fac591a675b91ae408f03a3d95a3f98b436", + "reference": "71648fac591a675b91ae408f03a3d95a3f98b436", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", - "php": ">=8.2", + "php": ">=8.4.1", "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", - "symfony/twig-bridge": "^7.3|^8.0", - "twig/twig": "^3.12" + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/twig-bridge": "^7.4|^8.0" }, - "conflict": { - "symfony/framework-bundle": "<6.4", - "symfony/translation": "<6.4" - }, - "require-dev": { - "symfony/asset": "^6.4|^7.0|^8.0", - "symfony/expression-language": "^6.4|^7.0|^8.0", - "symfony/finder": "^6.4|^7.0|^8.0", - "symfony/form": "^6.4|^7.0|^8.0", - "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", - "symfony/routing": "^6.4|^7.0|^8.0", - "symfony/runtime": "^6.4.13|^7.1.6", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/translation": "^6.4|^7.0|^8.0", - "symfony/web-link": "^6.4|^7.0|^8.0", - "symfony/yaml": "^6.4|^7.0|^8.0" + "require-dev": { + "symfony/asset": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/form": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/web-link": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -13440,7 +13699,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v7.4.4" + "source": "https://github.com/symfony/twig-bundle/tree/v8.1.7" }, "funding": [ { @@ -13460,46 +13719,41 @@ "type": "tidelift" } ], - "time": "2026-01-06T12:34:24+00:00" + "time": "2026-09-11T14:51:16+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.4.7", + "version": "v8.1.7", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "da9e91746fc9c575be8b5ff466b7572d98e7e1ae" + "reference": "0b70c60cf63518375b59b0907712de79fa8162b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/da9e91746fc9c575be8b5ff466b7572d98e7e1ae", - "reference": "da9e91746fc9c575be8b5ff466b7572d98e7e1ae", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/0b70c60cf63518375b59b0907712de79fa8162b7", + "reference": "0b70c60cf63518375b59b0907712de79fa8162b7", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", - "php": ">=8.2", - "symfony/config": "^7.3|^8.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", - "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", - "symfony/routing": "^6.4|^7.0|^8.0", - "symfony/twig-bundle": "^6.4|^7.0|^8.0", - "twig/twig": "^3.15" + "php": ">=8.4.1", + "symfony/config": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-kernel": "^8.1", + "symfony/routing": "^7.4|^8.0", + "symfony/twig-bundle": "^7.4|^8.0" }, "conflict": { - "symfony/form": "<6.4", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/serializer": "<7.2", - "symfony/workflow": "<7.3" + "symfony/serializer": "<7.4", + "symfony/workflow": "<7.4" }, "require-dev": { - "symfony/browser-kit": "^6.4|^7.0|^8.0", - "symfony/console": "^6.4|^7.0|^8.0", - "symfony/css-selector": "^6.4|^7.0|^8.0", - "symfony/runtime": "^6.4.13|^7.1.6|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0" + "symfony/browser-kit": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -13530,7 +13784,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.7" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v8.1.7" }, "funding": [ { @@ -13550,27 +13804,27 @@ "type": "tidelift" } ], - "time": "2026-03-03T13:57:00+00:00" + "time": "2026-09-04T10:14:04+00:00" }, { "name": "thecodingmachine/phpstan-safe-rule", - "version": "v1.4.3", + "version": "v1.4.7", "source": { "type": "git", "url": "https://github.com/thecodingmachine/phpstan-safe-rule.git", - "reference": "5c804889253ce9498ef185e108e9f94b6023208e" + "reference": "51fa2a35a270f683fc9ea53384a03e892b4d7b51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/phpstan-safe-rule/zipball/5c804889253ce9498ef185e108e9f94b6023208e", - "reference": "5c804889253ce9498ef185e108e9f94b6023208e", + "url": "https://api.github.com/repos/thecodingmachine/phpstan-safe-rule/zipball/51fa2a35a270f683fc9ea53384a03e892b4d7b51", + "reference": "51fa2a35a270f683fc9ea53384a03e892b4d7b51", "shasum": "" }, "require": { "nikic/php-parser": "^5", "php": "^8.1", - "phpstan/phpstan": "^2.1.11", - "thecodingmachine/safe": "^1.2 || ^2.0 || ^3.0" + "phpstan/phpstan": "^2.2.2", + "thecodingmachine/safe": "^3.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.1", @@ -13606,9 +13860,9 @@ "description": "A PHPStan rule to detect safety issues. Must be used in conjunction with thecodingmachine/safe", "support": { "issues": "https://github.com/thecodingmachine/phpstan-safe-rule/issues", - "source": "https://github.com/thecodingmachine/phpstan-safe-rule/tree/v1.4.3" + "source": "https://github.com/thecodingmachine/phpstan-safe-rule/tree/v1.4.7" }, - "time": "2025-11-21T09:41:49+00:00" + "time": "2026-06-21T07:55:55+00:00" }, { "name": "theseer/tokenizer", @@ -13662,16 +13916,16 @@ }, { "name": "twig/twig", - "version": "v3.24.0", + "version": "v3.29.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "a6769aefb305efef849dc25c9fd1653358c148f0" + "reference": "45a3c6e9224c3377a39c7b150bb29d5d97d2c75d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a6769aefb305efef849dc25c9fd1653358c148f0", - "reference": "a6769aefb305efef849dc25c9fd1653358c148f0", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/45a3c6e9224c3377a39c7b150bb29d5d97d2c75d", + "reference": "45a3c6e9224c3377a39c7b150bb29d5d97d2c75d", "shasum": "" }, "require": { @@ -13726,7 +13980,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.24.0" + "source": "https://github.com/twigphp/Twig/tree/v3.29.0" }, "funding": [ { @@ -13738,20 +13992,20 @@ "type": "tidelift" } ], - "time": "2026-03-17T21:31:11+00:00" + "time": "2026-09-18T09:10:14+00:00" }, { "name": "vimeo/psalm", - "version": "6.16.1", + "version": "6.18.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac" + "reference": "536dd6236b39a5115385b0307b42d6d1ad431a02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", - "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/536dd6236b39a5115385b0307b42d6d1ad431a02", + "reference": "536dd6236b39a5115385b0307b42d6d1ad431a02", "shasum": "" }, "require": { @@ -13773,9 +14027,9 @@ "felixfbecker/language-server-protocol": "^1.5.3", "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", "netresearch/jsonmapper": "^5.0", - "nikic/php-parser": "^5.0.0", + "nikic/php-parser": "^5.2.0", "php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0", "spatie/array-to-xml": "^2.17.0 || ^3.0", "symfony/console": "^6.0 || ^7.0 || ^8.0", "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0", @@ -13856,20 +14110,20 @@ "issues": "https://github.com/vimeo/psalm/issues", "source": "https://github.com/vimeo/psalm" }, - "time": "2026-03-19T10:56:09+00:00" + "time": "2026-09-21T08:32:57+00:00" }, { "name": "webmozart/assert", - "version": "2.1.6", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8" + "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/ff31ad6efc62e66e518fbab1cde3453d389bcdc8", - "reference": "ff31ad6efc62e66e518fbab1cde3453d389bcdc8", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70", + "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70", "shasum": "" }, "require": { @@ -13885,7 +14139,11 @@ }, "type": "library", "extra": { + "psalm": { + "pluginClass": "Webmozart\\Assert\\PsalmPlugin" + }, "branch-alias": { + "dev-master": "2.0-dev", "dev-feature/2-0": "2.0-dev" } }, @@ -13916,9 +14174,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.1.6" + "source": "https://github.com/webmozarts/assert/tree/2.4.1" }, - "time": "2026-02-27T10:28:38+00:00" + "time": "2026-06-15T15:31:57+00:00" }, { "name": "webmozart/glob", @@ -13978,6 +14236,7 @@ "platform": { "php": ">=8.5", "ext-ctype": "*", + "ext-fileinfo": "*", "ext-iconv": "*" }, "platform-dev": {}, diff --git a/config/packages/flysystem.yaml b/config/packages/flysystem.yaml index 4a4bc08f..517c0bac 100755 --- a/config/packages/flysystem.yaml +++ b/config/packages/flysystem.yaml @@ -2,6 +2,5 @@ flysystem: storages: backup.storage: - adapter: 'local' - options: + local: directory: '%kernel.project_dir%/var/backup' diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml index 2ec4e814..311c8ceb 100755 --- a/config/packages/monolog.yaml +++ b/config/packages/monolog.yaml @@ -11,9 +11,10 @@ when@dev: level: debug channels: ["!event", "!request"] formatter: monolog_json_formatter + # only active for commands which run in a terminal, regular requests never use it console: - type: console - process_psr_3_messages: false + type: service + id: App\Logger\TerminalConsoleHandler channels: ["!event", "!doctrine", "!console"] when@test: @@ -33,6 +34,12 @@ when@test: when@prod: monolog: handlers: + # declared first: for commands which run in a terminal it handles the records and stops them from also reaching + # the JSON handlers below; without a terminal (cron, CI) or for regular requests it is inactive + console: + type: service + id: App\Logger\TerminalConsoleHandler + channels: ["!event", "!doctrine", "!deprecation"] main: type: fingers_crossed action_level: error @@ -44,11 +51,9 @@ when@prod: path: "php://stderr" level: debug formatter: monolog.formatter.json - console: - type: console - process_psr_3_messages: false - channels: ["!event", "!doctrine", "!deprecation"] deprecation: type: stream path: "php://stderr" level: error + # without the channel restriction every error would be written a second time in the line format + channels: ["deprecation"] diff --git a/config/packages/web_profiler.yaml b/config/packages/web_profiler.yaml index ec1d51da..9c6c8368 100755 --- a/config/packages/web_profiler.yaml +++ b/config/packages/web_profiler.yaml @@ -6,7 +6,6 @@ when@dev: framework: profiler: only_exceptions: false - collect_serializer_data: true when@test: web_profiler: diff --git a/config/reference.php b/config/reference.php index 67538263..3ab00db3 100644 --- a/config/reference.php +++ b/config/reference.php @@ -31,7 +31,7 @@ * @psalm-type ImportsConfig = list * @psalm-type ParametersConfig = array|Param|null>|Param|null> * @psalm-type ArgumentsType = list|array @@ -78,6 +78,7 @@ * tags?: TagsType, * resource_tags?: TagsType, * decorates?: string, + * decorates_tag?: string, * decoration_inner_name?: string, * decoration_priority?: int, * decoration_on_invalid?: 'exception'|'ignore'|null, @@ -118,17 +119,22 @@ * stack: list>, * public?: bool, * deprecated?: DeprecationType, + * decorates?: string, + * decorates_tag?: string, + * decoration_inner_name?: string, + * decoration_priority?: int, + * decoration_on_invalid?: 'exception'|'ignore'|null, * } * @psalm-type ServicesConfig = array{ * _defaults?: DefaultsType, - * _instanceof?: InstanceofType, + * _instanceof?: array, * ... * } * @psalm-type ExtensionType = array * @psalm-type FrameworkConfig = array{ * secret?: scalar|Param|null, * http_method_override?: bool|Param, // Set true to enable support for the '_method' request parameter to determine the intended HTTP method on POST requests. // Default: false - * allowed_http_method_override?: list|null, + * allowed_http_method_override?: null|list, * trust_x_sendfile_type_header?: scalar|Param|null, // Set true to enable support for xsendfile in binary file responses. // Default: "%env(bool:default::SYMFONY_TRUST_X_SENDFILE_TYPE_HEADER)%" * ide?: scalar|Param|null, // Default: "%env(default::SYMFONY_IDE)%" * test?: bool|Param, @@ -136,9 +142,9 @@ * set_locale_from_accept_language?: bool|Param, // Whether to use the Accept-Language HTTP header to set the Request locale (only when the "_locale" request attribute is not passed). // Default: false * set_content_language_from_locale?: bool|Param, // Whether to set the Content-Language HTTP header on the Response using the Request locale. // Default: false * enabled_locales?: list, - * trusted_hosts?: list, + * trusted_hosts?: Param|string|list, * trusted_proxies?: mixed, // Default: ["%env(default::SYMFONY_TRUSTED_PROXIES)%"] - * trusted_headers?: list, + * trusted_headers?: Param|string|list, * error_controller?: scalar|Param|null, // Default: "error_controller" * handle_all_throwables?: bool|Param, // HttpKernel will handle all kinds of \Throwable. // Default: true * csrf_protection?: bool|array{ @@ -168,7 +174,7 @@ * allow_revalidate?: bool|Param, * stale_while_revalidate?: int|Param, * stale_if_error?: int|Param, - * terminate_on_cache_hit?: bool|Param, + * terminate_on_cache_hit?: bool|Param, // Deprecated: Setting the "framework.http_cache.terminate_on_cache_hit.terminate_on_cache_hit" configuration option is deprecated. It will be removed in version 9.0. * }, * esi?: bool|array{ // ESI configuration * enabled?: bool|Param, // Default: false @@ -188,7 +194,7 @@ * only_exceptions?: bool|Param, // Default: false * only_main_requests?: bool|Param, // Default: false * dsn?: scalar|Param|null, // Default: "file:%kernel.cache_dir%/profiler" - * collect_serializer_data?: bool|Param, // Enables the serializer data collector and profiler panel. // Default: false + * collect_serializer_data?: true|Param, // Deprecated: Setting the "framework.profiler.collect_serializer_data.collect_serializer_data" configuration option is deprecated. It will be removed in version 9.0. // Default: true * }, * workflows?: bool|array{ * enabled?: bool|Param, // Default: false @@ -202,23 +208,23 @@ * property?: scalar|Param|null, * service?: scalar|Param|null, * }, - * supports?: list, + * supports?: Param|string|list, * definition_validators?: list, * support_strategy?: scalar|Param|null, - * initial_marking?: list, - * events_to_dispatch?: list|null, - * places?: list, + * events_to_dispatch?: null|list, + * places?: Param|string|list, * }>, * transitions?: list, - * to?: list, @@ -232,7 +238,6 @@ * enabled?: bool|Param, // Default: false * resource?: scalar|Param|null, * type?: scalar|Param|null, - * cache_dir?: scalar|Param|null, // Deprecated: Setting the "framework.router.cache_dir.cache_dir" configuration option is deprecated. It will be removed in version 8.0. // Default: "%kernel.build_dir%" * default_uri?: scalar|Param|null, // The default URI used to generate URLs in a non-HTTP context. // Default: null * http_port?: scalar|Param|null, // Default: 80 * https_port?: scalar|Param|null, // Default: 443 @@ -256,12 +261,10 @@ * gc_maxlifetime?: scalar|Param|null, * save_path?: scalar|Param|null, // Defaults to "%kernel.cache_dir%/sessions" if the "handler_id" option is not null. * metadata_update_threshold?: int|Param, // Seconds to wait between 2 session metadata updates. // Default: 0 - * sid_length?: int|Param, // Deprecated: Setting the "framework.session.sid_length.sid_length" configuration option is deprecated. It will be removed in version 8.0. No alternative is provided as PHP 8.4 has deprecated the related option. - * sid_bits_per_character?: int|Param, // Deprecated: Setting the "framework.session.sid_bits_per_character.sid_bits_per_character" configuration option is deprecated. It will be removed in version 8.0. No alternative is provided as PHP 8.4 has deprecated the related option. * }, * request?: bool|array{ // Request configuration * enabled?: bool|Param, // Default: false - * formats?: array>, + * formats?: array>, * }, * assets?: bool|array{ // Assets configuration * enabled?: bool|Param, // Default: true @@ -271,7 +274,7 @@ * version_format?: scalar|Param|null, // Default: "%%s?%%s" * json_manifest_path?: scalar|Param|null, // Default: null * base_path?: scalar|Param|null, // Default: "" - * base_urls?: list, + * base_urls?: Param|string|list, * packages?: array, + * base_urls?: Param|string|list, * }>, * }, * asset_mapper?: bool|array{ // Asset Mapper configuration * enabled?: bool|Param, // Default: false - * paths?: array, + * paths?: Param|string|array, * excluded_patterns?: list, * exclude_dotfiles?: bool|Param, // If true, any files starting with "." will be excluded from the asset mapper. // Default: true * server?: bool|Param, // If true, a "dev server" will return the assets from the public directory (true in "debug" mode only by default). // Default: true @@ -303,7 +306,7 @@ * }, * translator?: bool|array{ // Translator configuration * enabled?: bool|Param, // Default: false - * fallbacks?: list, + * fallbacks?: Param|string|list, * logging?: bool|Param, // Default: false * formatter?: scalar|Param|null, // Default: "translator.formatter.default" * cache_dir?: scalar|Param|null, // Default: "%kernel.cache_dir%/translations" @@ -322,7 +325,7 @@ * domains?: list, * locales?: list, * }>, - * globals?: array, @@ -331,11 +334,10 @@ * }, * validation?: bool|array{ // Validation configuration * enabled?: bool|Param, // Default: false - * cache?: scalar|Param|null, // Deprecated: Setting the "framework.validation.cache.cache" configuration option is deprecated. It will be removed in version 8.0. * enable_attributes?: bool|Param, // Default: true - * static_method?: list, + * static_method?: Param|string|list, * translation_domain?: scalar|Param|null, // Default: "validators" - * email_validation_mode?: "html5"|"html5-allow-no-tld"|"strict"|"loose"|Param, // Default: "html5" + * email_validation_mode?: "html5"|"html5-allow-no-tld"|"strict"|Param, // Default: "html5" * mapping?: array{ * paths?: list, * }, @@ -344,13 +346,11 @@ * endpoint?: scalar|Param|null, // API endpoint for the NotCompromisedPassword Validator. // Default: null * }, * disable_translation?: bool|Param, // Default: false + * property_metadata_existence_check?: bool|Param, // When enabled, validateProperty() and validatePropertyValue() throw an exception if no metadata is found for the given property. // Default: false * auto_mapping?: array, * }>, * }, - * annotations?: bool|array{ - * enabled?: bool|Param, // Default: false - * }, * serializer?: bool|array{ // Serializer configuration * enabled?: bool|Param, // Default: false * enable_attributes?: bool|Param, // Default: true @@ -382,7 +382,7 @@ * }, * property_info?: bool|array{ // Property info configuration * enabled?: bool|Param, // Default: false - * with_constructor_extractor?: bool|Param, // Registers the constructor extractor. + * with_constructor_extractor?: bool|Param, // Registers the constructor extractor. // Default: true * }, * cache?: array{ // Cache configuration * prefix_seed?: scalar|Param|null, // Used to namespace cache keys when using several apps with the same shared backend. // Default: "_%kernel.project_dir%.%kernel.container_class%" @@ -396,13 +396,14 @@ * default_doctrine_dbal_provider?: scalar|Param|null, // Default: "database_connection" * default_pdo_provider?: scalar|Param|null, // Default: null * pools?: array, + * adapters?: Param|string|list, * tags?: scalar|Param|null, // Default: null * public?: bool|Param, // Default: false * default_lifetime?: scalar|Param|null, // Default lifetime of the pool. * provider?: scalar|Param|null, // Overwrite the setting from the default provider for this adapter. * early_expiration_message_bus?: scalar|Param|null, * clearer?: scalar|Param|null, + * marshaller?: scalar|Param|null, // The marshaller service to use for this pool. * }>, * }, * php_errors?: array{ // PHP errors handling configuration @@ -417,19 +418,17 @@ * web_link?: bool|array{ // Web links configuration * enabled?: bool|Param, // Default: false * }, - * lock?: bool|string|array{ // Lock configuration + * lock?: Param|bool|string|array{ // Lock configuration * enabled?: bool|Param, // Default: false - * resources?: array>, + * resources?: Param|string|array>, * }, - * semaphore?: bool|string|array{ // Semaphore configuration + * semaphore?: Param|bool|string|array{ // Semaphore configuration * enabled?: bool|Param, // Default: false - * resources?: array, + * resources?: Param|string|array, * }, * messenger?: bool|array{ // Messenger configuration * enabled?: bool|Param, // Default: false - * routing?: array, - * }>, + * routing?: array>, * serializer?: array{ * default_serializer?: scalar|Param|null, // Service id to use as the default serializer for the transports. // Default: "messenger.transport.native_php_serializer" * symfony_serializer?: array{ @@ -437,12 +436,12 @@ * context?: array, * }, * }, - * transports?: array, * failure_transport?: scalar|Param|null, // Transport name to send failed messages to (after all retries have failed). // Default: null - * retry_strategy?: string|array{ + * retry_strategy?: Param|string|array{ * service?: scalar|Param|null, // Service id to override the retry strategy entirely. // Default: null * max_retries?: int|Param, // Default: 3 * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 @@ -453,15 +452,15 @@ * rate_limiter?: scalar|Param|null, // Rate limiter name to use when processing messages. // Default: null * }>, * failure_transport?: scalar|Param|null, // Transport name to send failed messages to (after all retries have failed). // Default: null - * stop_worker_on_signals?: list, + * stop_worker_on_signals?: Param|int|string|list, * default_bus?: scalar|Param|null, // Default: null * buses?: array, * }>, @@ -505,14 +504,14 @@ * enabled?: bool|Param, // Default: false * cache_pool?: string|Param, // The taggable cache pool to use for storing the responses. // Default: "cache.http_client" * shared?: bool|Param, // Indicates whether the cache is shared (public) or private. // Default: true - * max_ttl?: int|Param, // The maximum TTL (in seconds) allowed for cached responses. Null means no cap. // Default: null + * max_ttl?: int|Param, // The maximum TTL (in seconds) allowed for cached responses. // Default: 86400 * }, * retry_failed?: bool|array{ * enabled?: bool|Param, // Default: false * retry_strategy?: scalar|Param|null, // service id to override the retry strategy. // Default: null - * http_codes?: array, + * methods?: Param|string|list, * }>, * max_retries?: int|Param, // Default: 3 * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 @@ -521,8 +520,8 @@ * jitter?: float|Param, // Randomness in percent (between 0 and 1) to apply to the delay. // Default: 0.1 * }, * }, - * mock_response_factory?: scalar|Param|null, // The id of the service that should generate mock responses. It should be either an invokable or an iterable. - * scoped_clients?: array, * rate_limiter?: scalar|Param|null, // Rate limiter name to use for throttling requests. // Default: null * caching?: bool|array{ // Caching configuration. * enabled?: bool|Param, // Default: false * cache_pool?: string|Param, // The taggable cache pool to use for storing the responses. // Default: "cache.http_client" * shared?: bool|Param, // Indicates whether the cache is shared (public) or private. // Default: true - * max_ttl?: int|Param, // The maximum TTL (in seconds) allowed for cached responses. Null means no cap. // Default: null + * max_ttl?: int|Param, // The maximum TTL (in seconds) allowed for cached responses. // Default: 86400 * }, * retry_failed?: bool|array{ * enabled?: bool|Param, // Default: false * retry_strategy?: scalar|Param|null, // service id to override the retry strategy. // Default: null - * http_codes?: array, + * methods?: Param|string|list, * }>, * max_retries?: int|Param, // Default: 3 * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 @@ -582,10 +582,10 @@ * transports?: array, * envelope?: array{ // Mailer Envelope configuration * sender?: scalar|Param|null, - * recipients?: list, - * allowed_recipients?: list, + * recipients?: Param|string|list, + * allowed_recipients?: Param|string|list, * }, - * headers?: array, * dkim_signer?: bool|array{ // DKIM signer configuration @@ -622,7 +622,7 @@ * chatter_transports?: array, * texter_transports?: array, * notification_on_failed_messages?: bool|Param, // Default: false - * channel_policy?: array>, + * channel_policy?: array>, * admin_recipients?: list, + * limiters?: Param|string|list, * limit?: int|Param, // The maximum allowed hits in a fixed interval or burst. * interval?: scalar|Param|null, // Configures the fixed interval if "policy" is set to "fixed_window" or "sliding_window". The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). * rate?: array{ // Configures the fill rate if "policy" is set to "token_bucket". * interval?: scalar|Param|null, // Configures the rate interval. The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). * amount?: int|Param, // Amount of tokens to add each interval. // Default: 1 * }, + * anchor_at?: scalar|Param|null, // Aligns the "fixed_window" policy to a calendar (e.g. "2024-01-05 00:00:00 UTC" combined with `interval: 1 month` resets the counter on the 5th of each month). UTC if not specified. // Default: null * }>, * }, * uid?: bool|array{ // Uid configuration @@ -651,47 +652,58 @@ * name_based_uuid_namespace?: scalar|Param|null, * time_based_uuid_version?: 7|6|1|Param, // Default: 7 * time_based_uuid_node?: scalar|Param|null, + * uuid47_secret?: scalar|Param|null, // A high-entropy secret used by the "uuid47_transformer" service. Defaults to "kernel.secret". // Default: null * }, * html_sanitizer?: bool|array{ // HtmlSanitizer configuration * enabled?: bool|Param, // Default: false * sanitizers?: array, - * block_elements?: list, - * drop_elements?: list, + * block_elements?: Param|string|list, + * drop_elements?: Param|string|list, * allow_attributes?: array, * drop_attributes?: array, * force_attributes?: array>, * force_https_urls?: bool|Param, // Transforms URLs using the HTTP scheme to use the HTTPS scheme instead. // Default: false - * allowed_link_schemes?: list, - * allowed_link_hosts?: list|null, + * allowed_link_schemes?: Param|string|list, + * allowed_link_hosts?: Param|null|string|list, * allow_relative_links?: bool|Param, // Allows relative URLs to be used in links href attributes. // Default: false - * allowed_media_schemes?: list, - * allowed_media_hosts?: list|null, + * allowed_media_schemes?: Param|string|list, + * allowed_media_hosts?: Param|null|string|list, * allow_relative_medias?: bool|Param, // Allows relative URLs to be used in media source attributes (img, audio, video, ...). // Default: false - * with_attribute_sanitizers?: list, - * without_attribute_sanitizers?: list, + * with_attribute_sanitizers?: Param|string|list, + * without_attribute_sanitizers?: Param|string|list, * max_input_length?: int|Param, // The maximum length allowed for the sanitized input. // Default: 0 * }>, * }, * webhook?: bool|array{ // Webhook configuration * enabled?: bool|Param, // Default: false * message_bus?: scalar|Param|null, // The message bus to use. // Default: "messenger.default_bus" + * event_header_name?: scalar|Param|null, // Default: "Webhook-Event" + * id_header_name?: scalar|Param|null, // Default: "Webhook-Id" + * signature_header_name?: scalar|Param|null, // Default: "Webhook-Signature" + * signing_algorithm?: scalar|Param|null, // Default: "sha256" * routing?: array, * }, - * remote-event?: bool|array{ // RemoteEvent configuration + * remote_event?: bool|array{ // RemoteEvent configuration * enabled?: bool|Param, // Default: false * }, * json_streamer?: bool|array{ // JSON streamer configuration * enabled?: bool|Param, // Default: false + * default_options?: array{ + * include_null_properties?: bool|Param, // Encode the properties with null value // Default: false + * ... + * }, * }, * } * @psalm-type MonologConfig = array{ * use_microseconds?: scalar|Param|null, // Default: true + * timezone?: string|Param, // The timezone used for the timestamp of every log record (e.g. "UTC" or "Europe/Paris"). Defaults to the PHP default timezone. // Default: null * channels?: list, * handlers?: array * }, * path?: scalar|Param|null, // Default: "%kernel.logs_dir%/%kernel.environment%.log" * file_permission?: scalar|Param|null, // Default: null * use_locking?: bool|Param, // Default: false * filename_format?: scalar|Param|null, // Default: "{filename}-{date}" * date_format?: scalar|Param|null, // Default: "Y-m-d" - * ident?: scalar|Param|null, // Default: false + * ident?: scalar|Param|null, // Default: "php" * logopts?: scalar|Param|null, // Default: 1 * facility?: scalar|Param|null, // Default: "user" * max_files?: scalar|Param|null, // Default: 0 @@ -722,7 +735,6 @@ * activation_strategy?: scalar|Param|null, // Default: null * stop_buffering?: bool|Param, // Default: true * passthru_level?: scalar|Param|null, // Default: null - * excluded_404s?: list, * excluded_http_codes?: list, @@ -736,9 +748,6 @@ * url?: scalar|Param|null, * exchange?: scalar|Param|null, * exchange_name?: scalar|Param|null, // Default: "log" - * room?: scalar|Param|null, - * message_format?: scalar|Param|null, // Default: "text" - * api_version?: scalar|Param|null, // Default: null * channel?: scalar|Param|null, // Default: null * bot_name?: scalar|Param|null, // Default: "Monolog" * use_attachment?: scalar|Param|null, // Default: true @@ -747,9 +756,6 @@ * icon_emoji?: scalar|Param|null, // Default: null * webhook_url?: scalar|Param|null, * exclude_fields?: list, - * team?: scalar|Param|null, - * notify?: scalar|Param|null, // Default: false - * nickname?: scalar|Param|null, // Default: "Monolog" * token?: scalar|Param|null, * region?: scalar|Param|null, * source?: scalar|Param|null, @@ -758,6 +764,7 @@ * title?: scalar|Param|null, // Default: null * host?: scalar|Param|null, // Default: null * port?: scalar|Param|null, // Default: 514 + * rfc?: scalar|Param|null, // Default: 1 * config?: list, * members?: list, * connection_string?: scalar|Param|null, @@ -767,13 +774,8 @@ * store?: scalar|Param|null, // Default: null * connection_timeout?: scalar|Param|null, * persistent?: bool|Param, - * dsn?: scalar|Param|null, - * hub_id?: scalar|Param|null, // Default: null - * client_id?: scalar|Param|null, // Default: null - * auto_log_stacks?: scalar|Param|null, // Default: false - * release?: scalar|Param|null, // Default: null - * environment?: scalar|Param|null, // Default: null * message_type?: scalar|Param|null, // Default: 0 + * expand_newlines?: bool|Param, // Default: false * parse_mode?: scalar|Param|null, // Default: null * disable_webpage_preview?: bool|Param|null, // Default: null * disable_notification?: bool|Param|null, // Default: null @@ -781,28 +783,18 @@ * delay_between_messages?: bool|Param, // Default: false * topic?: int|Param, // Default: null * factor?: int|Param, // Default: 1 - * tags?: list, - * console_formater_options?: mixed, // Deprecated: "monolog.handlers..console_formater_options.console_formater_options" is deprecated, use "monolog.handlers..console_formater_options.console_formatter_options" instead. + * tags?: Param|string|list, * console_formatter_options?: mixed, // Default: [] * formatter?: scalar|Param|null, * nested?: bool|Param, // Default: false - * publisher?: string|array{ + * publisher?: Param|string|array{ * id?: scalar|Param|null, * hostname?: scalar|Param|null, * port?: scalar|Param|null, // Default: 12201 * chunk_size?: scalar|Param|null, // Default: 1420 * encoder?: "json"|"compressed_json"|Param, * }, - * mongo?: string|array{ - * id?: scalar|Param|null, - * host?: scalar|Param|null, - * port?: scalar|Param|null, // Default: 27017 - * user?: scalar|Param|null, - * pass?: scalar|Param|null, - * database?: scalar|Param|null, // Default: "monolog" - * collection?: scalar|Param|null, // Default: "logs" - * }, - * mongodb?: string|array{ + * mongodb?: Param|string|array{ * id?: scalar|Param|null, // ID of a MongoDB\Client service * uri?: scalar|Param|null, * username?: scalar|Param|null, @@ -810,7 +802,7 @@ * database?: scalar|Param|null, // Default: "monolog" * collection?: scalar|Param|null, // Default: "logs" * }, - * elasticsearch?: string|array{ + * elasticsearch?: Param|string|array{ * id?: scalar|Param|null, * hosts?: list, * host?: scalar|Param|null, @@ -822,7 +814,7 @@ * index?: scalar|Param|null, // Default: "monolog" * document_type?: scalar|Param|null, // Default: "logs" * ignore_error?: scalar|Param|null, // Default: false - * redis?: string|array{ + * redis?: Param|string|array{ * id?: scalar|Param|null, * host?: scalar|Param|null, * password?: scalar|Param|null, // Default: null @@ -830,21 +822,21 @@ * database?: scalar|Param|null, // Default: 0 * key_name?: scalar|Param|null, // Default: "monolog_redis" * }, - * predis?: string|array{ + * predis?: Param|string|array{ // Deprecated: The "predis" option is deprecated and ignored, use the "redis" option to configure the Predis client. * id?: scalar|Param|null, * host?: scalar|Param|null, * }, * from_email?: scalar|Param|null, - * to_email?: list, + * to_email?: Param|string|list, * subject?: scalar|Param|null, * content_type?: scalar|Param|null, // Default: null * headers?: list, + * parameters?: list, * mailer?: scalar|Param|null, // Default: null - * email_prototype?: string|array{ + * email_prototype?: Param|string|array{ * id?: scalar|Param|null, * method?: scalar|Param|null, // Default: null * }, - * lazy?: bool|Param, // Default: true * verbosity_levels?: array{ * VERBOSITY_QUIET?: scalar|Param|null, // Default: "ERROR" * VERBOSITY_NORMAL?: scalar|Param|null, // Default: "WARNING" @@ -852,9 +844,10 @@ * VERBOSITY_VERY_VERBOSE?: scalar|Param|null, // Default: "INFO" * VERBOSITY_DEBUG?: scalar|Param|null, // Default: "DEBUG" * }, - * channels?: string|array{ + * channels?: Param|string|array{ * type?: scalar|Param|null, * elements?: list, + * ... * }, * }>, * } @@ -864,10 +857,10 @@ * id?: scalar|Param|null, * type?: scalar|Param|null, * value?: mixed, + * ... * }>, * autoescape_service?: scalar|Param|null, // Default: null * autoescape_service_method?: scalar|Param|null, // Default: null - * base_template_class?: scalar|Param|null, // Deprecated: The child node "base_template_class" at path "twig.base_template_class" is deprecated. * cache?: scalar|Param|null, // Default: true * charset?: scalar|Param|null, // Default: "%kernel.charset%" * debug?: bool|Param, // Default: "%kernel.debug%" @@ -875,7 +868,7 @@ * auto_reload?: scalar|Param|null, * optimizations?: int|Param, * default_path?: scalar|Param|null, // The default path used to load templates. // Default: "%kernel.project_dir%/templates" - * file_name_pattern?: list, + * file_name_pattern?: Param|string|list, * paths?: array, * date?: array{ // The default format options used by the date filter. * format?: scalar|Param|null, // Default: "F j, Y H:i" @@ -906,18 +899,134 @@ * } * @psalm-type FlysystemConfig = array{ * storages?: array, - * visibility?: scalar|Param|null, // Default: null - * directory_visibility?: scalar|Param|null, // Default: null - * retain_visibility?: bool|Param|null, // Default: null - * case_sensitive?: bool|Param, // Default: true - * disable_asserts?: bool|Param, // Default: false + * asyncaws?: array{ + * client?: scalar|Param|null, // The AsyncAws S3 client service name + * bucket?: scalar|Param|null, // The name of the AWS S3 bucket + * prefix?: scalar|Param|null, // Optional path prefix to prepend to all object keys // Default: "" + * }, + * aws?: array{ + * client?: scalar|Param|null, // The AWS S3 client service name + * bucket?: scalar|Param|null, // The name of the AWS S3 bucket + * prefix?: scalar|Param|null, // Optional path prefix to prepend to all object keys // Default: "" + * options?: list, + * streamReads?: bool|Param, // Whether to use streaming for file reads // Default: true + * }, + * azure?: array{ + * client?: scalar|Param|null, // The Azure Blob Storage client service name + * container?: scalar|Param|null, // The name of the Azure Blob Storage container + * prefix?: scalar|Param|null, // Optional path prefix to prepend to all blob names // Default: "" + * }, + * ftp?: array{ + * host?: scalar|Param|null, // FTP host + * username?: scalar|Param|null, // FTP username + * password?: scalar|Param|null, // FTP password + * port?: int|Param, // FTP port number // Default: 21 + * root?: scalar|Param|null, // FTP root directory // Default: "" + * passive?: bool|Param, // Use passive mode // Default: true + * ssl?: bool|Param, // Use SSL/TLS encryption // Default: false + * timeout?: int|Param, // Connection timeout in seconds // Default: 90 + * ignore_passive_address?: scalar|Param|null, // Ignore passive address // Default: null + * utf8?: bool|Param, // Enable UTF8 mode // Default: false + * transfer_mode?: scalar|Param|null, // Transfer mode (FTP_ASCII or FTP_BINARY constant on ftp extension) // Default: null + * system_type?: null|"windows"|"unix"|Param, // FTP system type // Default: null + * timestamps_on_unix_listings_enabled?: bool|Param, // Enable timestamps on Unix listings // Default: false + * recurse_manually?: bool|Param, // Recurse directories manually // Default: true + * use_raw_list_options?: bool|Param|null, // Use raw list options // Default: null + * connectivityChecker?: scalar|Param|null, // Connectivity checker service name // Default: null + * permissions?: array{ // Unix permissions configuration for files and directories + * file?: array{ // File permissions + * public?: int|Param, // Public file permissions // Default: 420 + * private?: int|Param, // Private file permissions // Default: 384 + * }, + * dir?: array{ // Directory permissions + * public?: int|Param, // Public directory permissions // Default: 493 + * private?: int|Param, // Private directory permissions // Default: 448 + * }, + * }, + * }, + * gcloud?: array{ + * client?: scalar|Param|null, // The Google Cloud Storage client service name + * bucket?: scalar|Param|null, // The name of the Google Cloud Storage bucket + * prefix?: scalar|Param|null, // Optional path prefix to prepend to all object keys // Default: "" + * visibility_handler?: scalar|Param|null, // Optional visibility handler service name // Default: null + * streamReads?: bool|Param, // Whether to use streaming for file reads // Default: false + * }, + * gridfs?: array{ + * bucket?: scalar|Param|null, // GridFS bucket service name (if using an existing bucket service) // Default: null + * prefix?: scalar|Param|null, // Optional path prefix to prepend to all file names // Default: "" + * database?: scalar|Param|null, // MongoDB database name // Default: null + * doctrine_connection?: scalar|Param|null, // Doctrine MongoDB connection name (mutually exclusive with mongodb_uri) + * mongodb_uri?: scalar|Param|null, // MongoDB connection URI (mutually exclusive with doctrine_connection) + * mongodb_uri_options?: list, + * mongodb_driver_options?: list, + * }, + * lazy?: array{ // Lazy adapter for runtime storage selection + * source?: scalar|Param|null, // The service name of the storage to use at runtime + * }, + * local?: array{ + * directory?: scalar|Param|null, // Directory path for local storage + * lock?: int|Param, // Lock flags for file operations // Default: 0 + * skip_links?: bool|Param, // Whether to skip symbolic links // Default: false + * lazy_root_creation?: bool|Param, // Whether to create the root directory lazily // Default: false + * permissions?: array{ // Unix permissions configuration for files and directories + * file?: array{ // File permissions + * public?: int|Param, // Public file permissions // Default: 420 + * private?: int|Param, // Private file permissions // Default: 384 + * }, + * dir?: array{ // Directory permissions + * public?: int|Param, // Public directory permissions // Default: 493 + * private?: int|Param, // Private directory permissions // Default: 448 + * }, + * }, + * }, + * memory?: array, + * sftp?: array{ + * host?: scalar|Param|null, // SFTP host + * username?: scalar|Param|null, // SFTP username + * password?: scalar|Param|null, // SFTP password (optional if using private key) // Default: null + * privateKey?: scalar|Param|null, // Path to private key file or private key content // Default: null + * passphrase?: scalar|Param|null, // Private key passphrase // Default: null + * port?: int|Param, // SFTP port number // Default: 22 + * timeout?: int|Param, // Connection timeout in seconds // Default: 90 + * hostFingerprint?: scalar|Param|null, // Host fingerprint for verification // Default: null + * connectivityChecker?: scalar|Param|null, // Connectivity checker service name // Default: null + * preferredAlgorithms?: list, + * root?: scalar|Param|null, // SFTP root directory // Default: "" + * permissions?: array{ // Unix permissions configuration for files and directories + * file?: array{ // File permissions + * public?: int|Param, // Public file permissions // Default: 420 + * private?: int|Param, // Private file permissions // Default: 384 + * }, + * dir?: array{ // Directory permissions + * public?: int|Param, // Public directory permissions // Default: 493 + * private?: int|Param, // Private directory permissions // Default: 448 + * }, + * }, + * }, + * webdav?: array{ + * client?: scalar|Param|null, // The WebDAV client service name + * prefix?: scalar|Param|null, // Optional path prefix to prepend to all paths // Default: "" + * visibility_handling?: "throw"|"ignore"|Param, // How to handle visibility operations // Default: "throw" + * manual_copy?: bool|Param, // Whether to handle copy operations manually // Default: false + * manual_move?: bool|Param, // Whether to handle move operations manually // Default: false + * }, + * bunnycdn?: array{ + * client?: scalar|Param|null, // The BunnyCDN client service name + * pull_zone?: scalar|Param|null, // The BunnyCDN pull zone name // Default: "" + * }, + * service?: scalar|Param|null, // Reference to a custom adapter service (alternative to registered adapter types) + * visibility?: scalar|Param|null, // Default visibility for files // Default: null + * directory_visibility?: scalar|Param|null, // Default visibility for directories // Default: null + * retain_visibility?: scalar|Param|null, // Keeps the original file visibility (public/private) when copying or moving. // Default: null + * case_sensitive?: bool|Param, // Deprecated: The "case_sensitive" option is deprecated and will be removed in 4.0. // Default: true + * disable_asserts?: bool|Param, // Deprecated: The "disable_asserts" option is deprecated and will be removed in 4.0. // Default: false * public_url?: list, - * path_normalizer?: scalar|Param|null, // Default: null - * public_url_generator?: scalar|Param|null, // Default: null - * temporary_url_generator?: scalar|Param|null, // Default: null - * read_only?: bool|Param, // Default: false + * path_normalizer?: scalar|Param|null, // Path normalizer service name (should implement League\Flysystem\PathNormalizer) // Default: null + * public_url_generator?: scalar|Param|null, // For adapter that do not provide public URLs or override adapter capabilities and public_url option, a public URL generator service name can be configured in the main Filesystem configuration (should implement League\Flysystem\UrlGeneration\PublicUrlGenerator) // Default: null + * temporary_url_generator?: scalar|Param|null, // For adapter that do not provide public URLs or override adapter capabilities, a temporary URL generator service name can be configured in the main Filesystem configuration (should implement League\Flysystem\UrlGeneration\TemporaryUrlGenerator) // Default: null + * read_only?: bool|Param, // Converts a file system to read-only // Default: false * }>, * } * @psalm-type EmberNexusConfig = array{ @@ -950,8 +1059,20 @@ * etagSeed?: scalar|Param|null, // Seed used to generate Etag values. Changing it invalidates all data cached by clients. // Default: "" * etagUpperLimitInCollectionEndpoints?: scalar|Param|null, // Maximum number of items in a collection for which to generate Etags. Bigger collection do not contain Etags due to performance problems. // Default: 100 * }, - * featureFlag?: array{ // Configures feature flags. - * 280_OldUniqueUserIdentifierDisabled?: bool|Param, // If true, the original behavior of some user endpoints in versions before 0.1.6 will no longer be supported. Old behavior will be dropped with version 0.2.0. See GitHub issue #280. // Default: false + * file?: array{ // Configures behavior related to files. + * maxFileSizeInBytes?: int|Param, // Maximum supported file size in bytes. Note: Upstream services like S3 have limits of their own (5TB). // Default: 10737418240 + * uploadExpiresInSecondsAfterFirstRequest?: int|Param, // Number of seconds after which unfinished uploads are expired. // Default: 10800 + * uploadChunkDigitsLength?: int|Param, // Number of digits for the upload chunk counter. Number of max chunks can be limited by upstream services, e.g. AWS can only support up to 10.000 chunks, i.e. a chunk digits length of 4. // Default: 4 + * uploadMinChunkSizeInBytes?: int|Param, // Minimum size in bytes of uploaded chunks. Limited by the S3 provider, e.g. AWS requires that chunks are at least 5 MiB big. // Default: 5242880 + * uploadMaxChunkSizeInBytes?: int|Param, // Maximum size in bytes of uploaded chunks. Limited by the S3 provider, Caddy and the PHP configuration. // Default: 105906176 + * expiredUploadCanBeDeletedAfterExpirationInSeconds?: int|Param, // Grace period after an upload expires during which the cron:delete-expired-uploads command will not yet delete it. Gives clients a bit of leeway past the expiration date before their partial upload and its S3 chunks are removed. // Default: 3600 + * S3StorageBucket?: scalar|Param|null, // Name of the S3 bucket used for storage of files. // Default: "api-storage" + * S3UploadBucket?: scalar|Param|null, // Name of the S3 bucket used for temporary storage of uploads. // Default: "api-upload" + * S3StorageBucketLevels?: int|Param, // Number of levels (folders) used within the S3 storage bucket. // Default: 3 + * S3StorageBucketLevelLength?: int|Param, // Number of characters used for each level (folder) in the S3 storage bucket. // Default: 2 + * S3UploadBucketLevels?: int|Param, // Number of levels (folders) used within the S3 upload bucket. // Default: 2 + * S3UploadBucketLevelLength?: int|Param, // Number of characters used for each level (folder) in the S3 upload bucket. // Default: 2 + * S3MaxHostConnections?: int|Param, // Maximum number of concurrent HTTP connections kept open to the S3 host. Used to parallelize otherwise sequential S3 operations, e.g. copying the parts of a large file during merge. Must be greater than 1. // Default: 16 * }, * } * @psalm-type ConfigType = array{ diff --git a/config/routes/framework.yaml b/config/routes/framework.yaml index c0bfda32..aa5c3c43 100755 --- a/config/routes/framework.yaml +++ b/config/routes/framework.yaml @@ -1,4 +1,4 @@ when@dev: _errors: - resource: '@FrameworkBundle/Resources/config/routing/errors.xml' + resource: '@FrameworkBundle/Resources/config/routing/errors.php' prefix: /_error diff --git a/config/routes/web_profiler.yaml b/config/routes/web_profiler.yaml index 4f744d5f..3d84c092 100755 --- a/config/routes/web_profiler.yaml +++ b/config/routes/web_profiler.yaml @@ -1,8 +1,8 @@ when@dev: web_profiler_wdt: - resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' + resource: '@WebProfilerBundle/Resources/config/routing/wdt.php' prefix: /_wdt web_profiler_profiler: - resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' + resource: '@WebProfilerBundle/Resources/config/routing/profiler.php' prefix: /_profiler diff --git a/config/services.yaml b/config/services.yaml index eae0e4d6..4a2b98e2 100755 --- a/config/services.yaml +++ b/config/services.yaml @@ -18,6 +18,9 @@ services: - '../src/DependencyInjection/' - '../src/Kernel.php' + # only one S3 connection is supported for now; replace with a per-connection factory once there are more + App\Contract\S3\S3TechnicalLimitsInterface: '@App\Type\S3\S3TechnicalLimits' + # library services monolog_json_formatter: @@ -181,3 +184,13 @@ services: PhpAmqpLib\Connection\AMQPStreamConnection: factory: ['@App\Factory\RabbitMQFactory', 'createRabbitMQ'] class: PhpAmqpLib\Connection\AMQPStreamConnection + + App\Factory\S3ClientFactory: + arguments: + $s3Endpoint: '%env(S3_ENDPOINT)%' + $s3AccessKeyId: '%env(S3_ACCESS_KEY_ID)%' + $s3SecretAccessKey: '%env(S3_SECRET_ACCESS_KEY)%' + + AsyncAws\S3\S3Client: + factory: ['@App\Factory\S3ClientFactory', 'createS3Client'] + class: AsyncAws\S3\S3Client diff --git a/docker/.env.docker b/docker/.env.docker index 22baf851..902f93be 100644 --- a/docker/.env.docker +++ b/docker/.env.docker @@ -19,4 +19,4 @@ APP_ENV=prod APP_SECRET=f762ce98c98b7579d2d6a6c0e5eb1d39 ###< symfony/framework-bundle ### -ANONYMOUS_USER_UUID=1f875943-5a12-42bb-b093-1826a8e1a34d \ No newline at end of file +ANONYMOUS_USER_UUID=2d376349-c5e2-42c8-8ce0-d6f525256cf7 \ No newline at end of file diff --git a/docker/Caddyfile b/docker/Caddyfile index db3e87be..1c021628 100644 --- a/docker/Caddyfile +++ b/docker/Caddyfile @@ -3,16 +3,44 @@ admin off servers { protocols h1 + timeouts { + # default for all endpoints, upload endpoints are extended below + read_body {$API_REQUEST_BODY_TIMEOUT:30s} + } } log { output stdout format json } + frankenphp { + # upload requests hold a PHP thread while the client sends the request body, so more threads than the default + # (2x cores) may be started under load; both values are calculated by the entrypoint, the fallbacks are only used + # if it did not run. `num_threads` has to be set explicitly, as it drops to 1 as soon as `max_threads` is set. + num_threads {$FRANKENPHP_NUM_THREADS:16} + max_threads {$FRANKENPHP_MAX_THREADS:auto} + # do not queue requests forever if all threads are busy + max_wait_time {$FRANKENPHP_MAX_WAIT_TIME:30s} + } supervisor { supercronic -json /etc/crontabs/supercronic } } +# headers of problem json responses which are created by the server instead of the application, they have to be +# identical to the headers of the application's error responses, see public/index.php and ProblemJsonResponse; +# errors of the web server have no route, therefore no `Allow` header +(problem_json_headers) { + header { + Access-Control-Allow-Headers "*" + Access-Control-Allow-Methods "GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE" + Access-Control-Allow-Origin "*" + Access-Control-Expose-Headers "ETag, Location" + Cache-Control "no-cache, private" + Content-Type "application/problem+json; charset=utf-8" + X-Powered-By "Ember Nexus API" + } +} + :80 { root * /var/www/html/public encode zstd br gzip @@ -20,6 +48,56 @@ -Server -Set-Cookie } + # identifies the request in the access log below and, via the request header, in the logs of the application; it is + # not part of the response headers, but of the `instance` of every problem json response (`urn:uuid:`); always + # set by the server, so that clients can not spoof it in the logs + request_header X-Request-Id "{http.request.uuid}" + log_append request_id {http.request.uuid} + request_body { + max_size 101MiB + } + # only endpoints which receive upload data from the client may take up to 15 minutes to receive it: single request + # uploads (POST/PUT //file) and resumable upload chunks (PATCH /upload/); slow clients have to send + # smaller chunks + @uploadFile { + method POST PUT + path_regexp ^/[0-9a-fA-F-]{36}/file$ + } + @uploadChunk { + method PATCH + path_regexp ^/upload/[0-9a-fA-F-]{36}$ + } + request_body @uploadFile { + read_timeout {$API_UPLOAD_REQUEST_BODY_TIMEOUT:15m} + } + request_body @uploadChunk { + read_timeout {$API_UPLOAD_REQUEST_BODY_TIMEOUT:15m} + } + # server errors which do not come from the application as problem json still get a problem json body, in the same + # format as the application's errors (compact json, member order type, title, status, instance, detail, `type` links to the error page, but as relative reference + # without scheme and host, which clients resolve against the request URI, see RFC 9457): + # - PHP failures before the application handles them (e.g. PHP can not start the application at all) answer with + # an empty body and the default html content type -> 500 + # - FrankenPHP answers by itself, without content type, if it did not get a free PHP thread in time + # (`max_wait_time`) -> 503; this is the only such case, other server errors are not rewritten + intercept { + @phpFailure { + status 5xx + header Content-Type text/html* + } + handle_response @phpFailure { + import problem_json_headers + respond `{"type":"/error/500/internal-server-error","title":"Internal server error","status":500,"instance":"urn:uuid:{http.request.uuid}","detail":"Internal server error, see log."}` 500 + } + @noFreePhpThread { + status 503 + header !Content-Type + } + handle_response @noFreePhpThread { + import problem_json_headers + respond `{"type":"/error/503/service-unavailable","title":"Service unavailable","status":503,"instance":"urn:uuid:{http.request.uuid}","detail":"The service itself or an internal component is currently unavailable."}` 503 + } + } log { no_hostname output stdout diff --git a/docker/Caddyfile.dev b/docker/Caddyfile.dev new file mode 100644 index 00000000..f5bdf7fe --- /dev/null +++ b/docker/Caddyfile.dev @@ -0,0 +1,107 @@ +{ + auto_https off + admin off + servers { + protocols h1 + timeouts { + # default for all endpoints, upload endpoints are extended below + read_body {$API_REQUEST_BODY_TIMEOUT:30s} + } + } + log { + output stdout + format json + } + frankenphp { + # upload requests hold a PHP thread while the client sends the request body, so more threads than the default + # (2x cores) may be started under load; both values are calculated by the entrypoint, the fallbacks are only used + # if it did not run. `num_threads` has to be set explicitly, as it drops to 1 as soon as `max_threads` is set. + num_threads {$FRANKENPHP_NUM_THREADS:16} + max_threads {$FRANKENPHP_MAX_THREADS:auto} + # do not queue requests forever if all threads are busy + max_wait_time {$FRANKENPHP_MAX_WAIT_TIME:30s} + } + # no `supervisor` block here, unlike the production Caddyfile: the dev image has no vendor/ installed by default + # (it's provided by the mounted source instead), so supercronic's scheduled `php bin/console cron` runs would fail + # with a missing symfony/runtime error until `composer install` is run manually +} + +# headers of problem json responses which are created by the server instead of the application, they have to be +# identical to the headers of the application's error responses, see public/index.php and ProblemJsonResponse; +# errors of the web server have no route, therefore no `Allow` header +(problem_json_headers) { + header { + Access-Control-Allow-Headers "*" + Access-Control-Allow-Methods "GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE" + Access-Control-Allow-Origin "*" + Access-Control-Expose-Headers "ETag, Location" + Cache-Control "no-cache, private" + Content-Type "application/problem+json; charset=utf-8" + X-Powered-By "Ember Nexus API" + } +} + +:80 { + root * /var/www/html/public + encode zstd br gzip + header { + -Server + -Set-Cookie + } + # identifies the request in the access log below and, via the request header, in the logs of the application; it is + # not part of the response headers, but of the `instance` of every problem json response (`urn:uuid:`); always + # set by the server, so that clients can not spoof it in the logs + request_header X-Request-Id "{http.request.uuid}" + log_append request_id {http.request.uuid} + request_body { + max_size 101MiB + } + # only endpoints which receive upload data from the client may take up to 15 minutes to receive it: single request + # uploads (POST/PUT //file) and resumable upload chunks (PATCH /upload/); slow clients have to send + # smaller chunks + @uploadFile { + method POST PUT + path_regexp ^/[0-9a-fA-F-]{36}/file$ + } + @uploadChunk { + method PATCH + path_regexp ^/upload/[0-9a-fA-F-]{36}$ + } + request_body @uploadFile { + read_timeout {$API_UPLOAD_REQUEST_BODY_TIMEOUT:15m} + } + request_body @uploadChunk { + read_timeout {$API_UPLOAD_REQUEST_BODY_TIMEOUT:15m} + } + # server errors which do not come from the application as problem json still get a problem json body, in the same + # format as the application's errors (compact json, member order type, title, status, instance, detail, `type` links to the error page, but as relative reference + # without scheme and host, which clients resolve against the request URI, see RFC 9457): + # - PHP failures before the application handles them (e.g. PHP can not start the application at all) answer with + # an empty body and the default html content type -> 500 + # - FrankenPHP answers by itself, without content type, if it did not get a free PHP thread in time + # (`max_wait_time`) -> 503; this is the only such case, other server errors are not rewritten + intercept { + @phpFailure { + status 5xx + header Content-Type text/html* + } + handle_response @phpFailure { + import problem_json_headers + respond `{"type":"/error/500/internal-server-error","title":"Internal server error","status":500,"instance":"urn:uuid:{http.request.uuid}","detail":"Internal server error, see log."}` 500 + } + @noFreePhpThread { + status 503 + header !Content-Type + } + handle_response @noFreePhpThread { + import problem_json_headers + respond `{"type":"/error/503/service-unavailable","title":"Service unavailable","status":503,"instance":"urn:uuid:{http.request.uuid}","detail":"The service itself or an internal component is currently unavailable."}` 503 + } + } + log { + no_hostname + output stdout + format json + } + php_server +} diff --git a/docker/Dockerfile b/docker/Dockerfile index 9828b54f..87f22b58 100755 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,21 +1,342 @@ +# PHP itself is compiled from source in the `php_base` stage below instead of reusing the prebuilt +# `dunglas/frankenphp:*-alpine` image, for control over the build (pinned/reproducible toolchain, SQL +# stripped out, etc.). Note this does NOT get ext/hash's SHA-NI (hardware-accelerated SHA-256) code path +# working on Alpine/musl either -- confirmed by building it here too (still ~330 MB/s, same as the prebuilt +# image); see ext/hash/php_hash_sha.h (PHP_HASH_INTRIN_SHA_RESOLVER) in php-src for why. +# +# `php_base`'s RUN steps are adapted from https://github.com/docker-library/php (MIT licensed), with all +# SQL-related configure flags/extensions removed (this project has no SQL dependency) and ZTS + embed kept +# enabled (required by FrankenPHP). The `frankenphp_builder` stage is adapted from FrankenPHP's own +# https://github.com/dunglas/frankenphp/blob/main/alpine.Dockerfile (MIT licensed), building FrankenPHP's +# Go binary via xcaddy/cgo against `php_base` instead of against docker-library's own PHP image. +# +# Helper scripts in ./php-embed/ (docker-php-source, docker-php-ext-*, docker-php-entrypoint) are copied +# verbatim from docker-library/php, unmodified. + +ARG ALPINE_VERSION='3.23' +ARG PHP_VERSION='8.5.11' ARG FRANKENPHP_VERSION='1.12.1' -ARG PHP_VERSION='8.5.4' +ARG WATCHER_VERSION='0.14.5' +ARG GO_VERSION='1.26' ARG CADDY_BUILDER_VERSION='2.11' + FROM caddy:${CADDY_BUILDER_VERSION}-builder-alpine AS caddy_builder -FROM dunglas/frankenphp:${FRANKENPHP_VERSION}-builder-php${PHP_VERSION}-alpine AS frankenphp_builder + + +FROM golang:${GO_VERSION}-alpine AS golang_base + + +FROM alpine:${ALPINE_VERSION} AS frankenphp_source +ARG FRANKENPHP_VERSION +RUN apk add --no-cache curl tar +RUN set -eux; \ + mkdir -p /usr/local/src/frankenphp; \ + curl -fsSL "https://github.com/dunglas/frankenphp/archive/refs/tags/v${FRANKENPHP_VERSION}.tar.gz" -o /tmp/frankenphp.tar.gz; \ + tar -xzf /tmp/frankenphp.tar.gz -C /usr/local/src/frankenphp --strip-components=1; \ + rm /tmp/frankenphp.tar.gz + + +FROM alpine:${ALPINE_VERSION} AS php_base +LABEL org.opencontainers.image.source="https://github.com/docker-library/php" \ + org.opencontainers.image.title="Custom PHP, ZTS + embed, no SQL" \ + org.opencontainers.image.description="PHP compiled from source using the docker-library/php Alpine ZTS recipe (MIT licensed), with all SQL-related extensions/flags removed." + +ARG PHP_VERSION + +# dependencies required for running "phpize" +# these get automatically installed and removed by "docker-php-ext-*" (unless they're already installed) +ENV PHPIZE_DEPS="\ + autoconf \ + dpkg-dev dpkg \ + file \ + g++ \ + gcc \ + libc-dev \ + make \ + pkgconf \ + re2c" \ + PHP_INI_DIR="/usr/local/etc/php" \ +# Apply stack smash protection to functions using local buffers and alloca() +# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64) +# Enable optimization (-O2) +# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default) +# https://github.com/docker-library/php/issues/272 +# -D_LARGEFILE_SOURCE and -D_FILE_OFFSET_BITS=64 (https://www.php.net/manual/en/intro.filesystem.php) +# -DHAVE_FUNC_ATTRIBUTE_TARGET=1: works around ext/hash's SHA-256 (and zend_cpuinfo's other SIMD dispatch) +# never getting a hardware-accelerated code path on Alpine. That path is gated behind this exact macro (see +# ext/hash/php_hash_sha.h / Zend/zend_cpuinfo.h), which configure only sets via build/ax_gcc_func_attribute.m4 +# -- a probe that treats *any* compiler warning on a throwaway one-line test as "attribute unsupported", even +# though GCC only warns (never errors) for it; see https://github.com/php/php-src/issues/15384. GCC on Alpine +# does support `__attribute__((target(...)))` in the actual code (ordinary, well-supported syntax), so this +# just skips the flaky probe instead of trusting it; if that's wrong, `make` fails loudly on a real compiler +# error instead of silently keeping the slow path. Harmless on arm64: the attribute-gated code is additionally +# scoped to `__i386__`/`__x86_64__` at the point this macro is checked, so it has no effect there. + PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_FUNC_ATTRIBUTE_TARGET=1" \ + PHP_CPPFLAGS="-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_FUNC_ATTRIBUTE_TARGET=1" \ + PHP_LDFLAGS="-Wl,-O1 -pie" \ + PHP_BUILD_PROVIDER="https://github.com/ember-nexus/api" \ + PHP_UNAME="Linux - Docker" \ + GPG_KEYS="1198C0117593497A5EC5C199286AF1F9897469DC 49D9AF6BC72A80D6691719C8AA23F5BE9C7097D4 D95C03BC702BE9515344AE3374E44BC9067701A5" \ + PHP_VERSION="${PHP_VERSION}" \ + PHP_URL="https://www.php.net/distributions/php-${PHP_VERSION}.tar.xz" \ + PHP_ASC_URL="https://www.php.net/distributions/php-${PHP_VERSION}.tar.xz.asc" \ +# pinned to PHP_VERSION 8.5.11; bump together when bumping the ARG above + PHP_SHA256="d9be75c08e8c316f4c8f4194d8fbe1750a15f6a6d9d4e3fe72082abeeb800360" + +# persistent / runtime deps +RUN apk add --no-cache \ + ca-certificates \ + curl \ + tar \ + xz + +# ensure www-data user exists +RUN set -eux; \ + adduser -u 82 -D -S -G www-data www-data +# 82 is the standard uid/gid for "www-data" in Alpine +# https://git.alpinelinux.org/aports/tree/main/apache2/apache2.pre-install?h=3.14-stable +# https://git.alpinelinux.org/aports/tree/main/lighttpd/lighttpd.pre-install?h=3.14-stable +# https://git.alpinelinux.org/aports/tree/main/nginx/nginx.pre-install?h=3.14-stable + +RUN set -eux; \ + mkdir -p "$PHP_INI_DIR/conf.d"; \ +# allow running as an arbitrary user (https://github.com/docker-library/php/issues/743) + [ ! -d /var/www/html ]; \ + mkdir -p /var/www/html; \ + chown www-data:www-data /var/www/html; \ + chmod 1777 /var/www/html + +RUN set -eux; \ + apk add --no-cache --virtual .fetch-deps gnupg; \ + mkdir -p /usr/src; \ + cd /usr/src; \ + curl -fsSL -o php.tar.xz "$PHP_URL"; \ + echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \ + curl -fsSL -o php.tar.xz.asc "$PHP_ASC_URL"; \ + export GNUPGHOME="$(mktemp -d)"; \ + for key in $GPG_KEYS; do \ + gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; \ + done; \ + gpg --batch --verify php.tar.xz.asc php.tar.xz; \ + gpgconf --kill all; \ + rm -rf "$GNUPGHOME"; \ + apk del --no-network .fetch-deps + +COPY ./docker/php-embed/docker-php-source /usr/local/bin/ +COPY ./docker/php-embed/patches /usr/local/src/php-patches + +RUN set -eux; \ + apk add --no-cache --virtual .build-deps \ + $PHPIZE_DEPS \ + argon2-dev \ + coreutils \ + curl-dev \ + gnu-libiconv-dev \ + libsodium-dev \ + libxml2-dev \ + linux-headers \ + oniguruma-dev \ + openssl-dev \ + patch \ + readline-dev \ + sed \ + ; \ +# make sure musl's iconv doesn't get used (https://www.php.net/manual/en/intro.iconv.php) + rm -vf /usr/include/iconv.h; \ + export \ + CFLAGS="$PHP_CFLAGS" \ + CPPFLAGS="$PHP_CPPFLAGS" \ + LDFLAGS="$PHP_LDFLAGS" \ + ; \ + docker-php-source extract; \ + cd /usr/src/php; \ +# ext/hash's hash_update_stream() (used by IncrementalHashService for upload chunk hashing) reads the +# resource through php_stream_read() in a 1024-byte buffer, which for a large chunk means well over 100,000 +# small stream reads, each paying PHP's stream-wrapper dispatch overhead; that dominates once SHA-256 itself +# is SHA-NI-accelerated (see -DHAVE_FUNC_ATTRIBUTE_TARGET=1 above). Bump it to 16KiB: measured as the point +# where throughput plateaus (larger buffers, up to 1MiB+, gave no further gain in benchmarking -- and large +# buffers eventually regress due to allocation/copy overhead), while cutting the read-call count by ~16x and +# staying a total non-issue as a stack buffer. Only the buffer inside PHP_FUNCTION(hash_update_stream) is +# touched (matched by the `toread = 1024` line immediately following the declaration, which is unique to +# that function) -- hash()/hash_hmac()/hash_update_file()'s own `buf[1024]` (used for e.g. hashing a +# filename/path directly, not this project's upload path) are deliberately left as-is. + sed -i '/char buf\[1024\];/{N;s/char buf\[1024\];\n\([ \t]*\)zend_long toread = 1024;/char buf[16384];\n\1zend_long toread = 16384;/}' ext/hash/hash.c; \ + grep -q 'char buf\[16384\];' ext/hash/hash.c; \ + grep -q 'zend_long toread = 16384;' ext/hash/hash.c; \ + [ "$(grep -c 'char buf\[1024\];' ext/hash/hash.c)" = 3 ]; \ +# SHA256Transform() (the SHA-NI dispatch used by the hash above) re-checks zend_cpu_supports() -- a CPUID +# feature lookup -- on every single 64-byte block, i.e. over a million times for a large upload chunk, unlike +# every other SIMD-dispatched function in php-src (crc32_x86_simd_update(), php_base64_encode_ex(), etc.), +# which resolve their CPU-feature check exactly once via an ifunc resolver or a PHP_MINIT_FUNCTION-cached +# pointer. This patch brings SHA256Transform() in line with that existing convention: the check is resolved +# once in PHP_MINIT_FUNCTION(hash) into a plain static int, instead of being repeated every block. + patch -p1 --forward < /usr/local/src/php-patches/0001-hash-sha-minit-shani-resolver.patch; \ + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \ + test "$PHP_INI_DIR" != "${PHP_INI_DIR%/php}"; \ + ./configure \ + --build="$gnuArch" \ + --sysconfdir="${PHP_INI_DIR%/php}" \ + --with-config-file-path="$PHP_INI_DIR" \ + --with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \ +# make sure invalid --configure-flags are fatal errors instead of just warnings + --enable-option-checking=fatal \ +# https://github.com/docker-library/php/issues/439 + --with-mhash \ +# https://github.com/docker-library/php/issues/822 + --with-pic \ +# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195) + --enable-mbstring \ +# opcache is bundled and enabled by default since PHP 7.3, no configure flag needed/accepted anymore +# https://wiki.php.net/rfc/argon2_password_hash + --with-password-argon2 \ +# https://wiki.php.net/rfc/libsodium + --with-sodium=shared \ +# this project has no SQL dependency; PDO and all SQL drivers are fully disabled/removed instead of just unused + --disable-pdo \ + --without-sqlite3 \ + --without-pdo-sqlite \ + --with-curl \ + --with-iconv=/usr \ + --with-openssl \ + --with-readline \ + --with-zlib \ +# https://github.com/docker-library/php/pull/1259 + --enable-phpdbg \ + --enable-phpdbg-readline \ +# in PHP 7.4+, the pecl/pear installers are officially deprecated (requiring an explicit "--with-pear") + --with-pear \ +# https://github.com/docker-library/php/pull/939#issuecomment-730501748 + --enable-embed \ +# required by FrankenPHP + --enable-zts \ +# https://externals.io/message/118859 + --disable-zend-signals \ +# bundled pcre does not support JIT on s390x +# https://manpages.debian.org/bullseye/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT + $(test "$gnuArch" = 's390x-linux-musl' && echo '--without-pcre-jit') \ + ; \ + make -j "$(nproc)"; \ + find -type f -name '*.a' -delete; \ + make install; \ + find \ + /usr/local \ + -type f \ + -perm '/0111' \ + -exec sh -euxc ' \ + strip --strip-all "$@" || : \ + ' -- '{}' + \ + ; \ + make clean; \ +# https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable) + cp -v php.ini-* "$PHP_INI_DIR/"; \ + cd /; \ + docker-php-source delete; \ + runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )"; \ + apk add --no-cache $runDeps; \ + apk del --no-network .build-deps; \ +# update pecl channel definitions https://github.com/docker-library/php/issues/443 + pecl update-channels; \ + rm -rf /tmp/pear ~/.pearrc; \ +# smoke test + php --version + +# informational only (never fails the build): reports whether ext/hash's SHA-256 actually got the SHA-NI +# hardware path this time, see the -DHAVE_FUNC_ATTRIBUTE_TARGET=1 comment above for why this was in doubt. +# the sample is generated in memory (random_bytes + str_repeat), nothing is read from or stored in the repo. +RUN if [ "$(uname -m)" = "x86_64" ]; then \ + php -r ' \ + $data = str_repeat(random_bytes(1024 * 1024), 32); \ + $t0 = microtime(true); \ + hash("sha256", $data); \ + $t1 = microtime(true); \ + $mbPerSec = (strlen($data) / 1024 / 1024) / ($t1 - $t0); \ + fwrite(STDERR, sprintf("[php_base] ext/hash SHA-256 throughput: %.0f MB/s -- %s\n", $mbPerSec, $mbPerSec > 700 ? "SHA-NI accelerated" : "generic/SSE2 fallback, no hardware acceleration")); \ + '; \ + fi + +COPY ./docker/php-embed/docker-php-ext-* ./docker/php-embed/docker-php-entrypoint /usr/local/bin/ +COPY ./docker/php-embed/php.prod.ini "$PHP_INI_DIR/php.ini" + +# sodium was built as a shared module (so that it can be replaced later if so desired), so let's enable it too (https://github.com/docker-library/php/issues/598) +RUN docker-php-ext-enable sodium \ + && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + + + +FROM php_base AS frankenphp_builder +ARG FRANKENPHP_VERSION +ARG WATCHER_VERSION +ARG GO_VERSION + COPY --from=caddy_builder /usr/bin/xcaddy /usr/bin/xcaddy +COPY --from=golang_base /usr/local/go /usr/local/go +ENV PATH="/usr/local/go/bin:${PATH}" \ + GOTOOLCHAIN=local \ + GOBIN=/usr/local/bin + +# same build deps as https://github.com/dunglas/frankenphp/blob/main/alpine.Dockerfile's "builder" stage, +# minus sqlite-dev (this project's php_base has no SQL support to link against) +RUN apk add --no-cache --virtual .frankenphp-build-deps \ + $PHPIZE_DEPS \ + argon2-dev \ + bash \ + brotli-dev \ + cmake \ + coreutils \ + curl-dev \ + git \ + gnu-libiconv-dev \ + libcap \ + libsodium-dev \ + libstdc++ \ + libxml2-dev \ + linux-headers \ + oniguruma-dev \ + openssl-dev \ + readline-dev \ + upx + +# e-dant/watcher powers FrankenPHP's file watcher; pinned to a release instead of "latest" for reproducible +# builds (bump alongside FRANKENPHP_VERSION if FrankenPHP requires a newer watcher ABI) +WORKDIR /usr/local/src/watcher +RUN set -eux; \ + curl -fsSL "https://github.com/e-dant/watcher/archive/refs/tags/${WATCHER_VERSION}.tar.gz" -o /tmp/watcher.tar.gz; \ + tar -xzf /tmp/watcher.tar.gz -C /usr/local/src/watcher --strip-components=1; \ + rm /tmp/watcher.tar.gz; \ + cmake -S . -B build -DCMAKE_BUILD_TYPE=Release; \ + cmake --build build; \ + cmake --install build + +COPY --from=frankenphp_source /usr/local/src/frankenphp /go/src/app +WORKDIR /go/src/app +RUN go mod download +WORKDIR /go/src/app/caddy +RUN go mod download +WORKDIR /go/src/app + +# see also https://github.com/docker-library/php/blob/master/8.3/alpine3.20/zts/Dockerfile#L53-L55 and +# https://github.com/dunglas/frankenphp/blob/main/alpine.Dockerfile RUN CGO_ENABLED=1 \ XCADDY_SETCAP=1 \ - XCADDY_GO_BUILD_FLAGS="-tags=nobadger,nomysql,nopgx -ldflags='-w -s -extldflags \'-Wl,-z,stack-size=0x80000\''" \ - CGO_CFLAGS=$(php-config --includes) \ - CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" \ + XCADDY_GO_BUILD_FLAGS="-tags=nobadger,nomysql,nopgx -ldflags='-w -s -extldflags \'-Wl,-z,stack-size=0x80000\' -X \'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ${FRANKENPHP_VERSION} PHP ${PHP_VERSION} Caddy\' -X \'github.com/caddyserver/caddy/v2/modules/caddyhttp.ServerHeader=FrankenPHP Caddy\''" \ + CGO_CFLAGS="-DFRANKENPHP_VERSION=${FRANKENPHP_VERSION} $(php-config --includes) $PHP_CFLAGS" \ + CGO_CPPFLAGS="$PHP_CPPFLAGS" \ + CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs) -lssl -lcrypto -lreadline -largon2 -lcurl -lonig -lz $PHP_LDFLAGS" \ xcaddy build \ --output /usr/local/bin/frankenphp \ --with github.com/dunglas/frankenphp=./ \ --with github.com/dunglas/frankenphp/caddy=./caddy/ \ --with github.com/dunglas/caddy-cbrotli \ - --with github.com/baldinof/caddy-supervisor + --with github.com/baldinof/caddy-supervisor \ + && setcap cap_net_bind_service=+ep /usr/local/bin/frankenphp \ + && /usr/local/bin/frankenphp version \ + && /usr/local/bin/frankenphp build-info FROM golang:1.25-alpine AS go_builder @@ -27,7 +348,7 @@ RUN cd /build && \ upx --best --lzma expr-cli -FROM dunglas/frankenphp:${FRANKENPHP_VERSION}-php${PHP_VERSION}-alpine AS php +FROM php_base AS php # see also https://github.com/opencontainers/image-spec/blob/main/annotations.md LABEL org.opencontainers.image.vendor="Ember Nexus" \ org.opencontainers.image.authors="Sören Klein / Syndesi " \ @@ -42,18 +363,21 @@ ENV VERSION=${VERSION} ARG FRANKENPHP_VERSION ENV FRANKENPHP_VERSION=${FRANKENPHP_VERSION} -COPY --from=frankenphp_builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp RUN apk add --no-cache \ ca-certificates \ curl \ icu \ + icu-data-full \ + libcap \ + libstdc++ \ libzip \ + mailcap \ # https://github.com/docker-library/php/issues/494 openssl \ pcre \ supercronic \ tar \ - xz \ + xz \ zlib \ && apk add --no-cache --virtual .build-deps \ ${PHPIZE_DEPS} \ @@ -72,14 +396,24 @@ RUN apk add --no-cache \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ && apk del .build-deps +COPY --from=frankenphp_builder /usr/local/bin/frankenphp /usr/local/bin/frankenphp +COPY --from=frankenphp_builder /usr/local/lib/libwatcher* /usr/local/lib/ +RUN ldconfig /usr/local/lib || true + +ENV GODEBUG=cgocheck=0 \ + XDG_CONFIG_HOME=/config \ + XDG_DATA_HOME=/data + COPY ./docker/Caddyfile /etc/frankenphp/Caddyfile COPY ./docker/docker-entrypoint.sh /usr/local/bin/ COPY ./docker/supercronic /etc/crontabs/supercronic COPY --from=go_builder /build/expr-cli /usr/local/bin/expr-cli RUN set -x \ + && mkdir -p /config/caddy /data/caddy \ && chmod +x /usr/local/bin/docker-entrypoint.sh \ && adduser -D worker \ && setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp \ + && /usr/local/bin/frankenphp version \ && chown -R worker:worker /config/caddy /data/caddy /etc/crontabs/supercronic STOPSIGNAL SIGTERM @@ -100,10 +434,13 @@ COPY public /var/www/html/public COPY src /var/www/html/src COPY lib/EmberNexusBundle /var/www/html/lib/EmberNexusBundle COPY docker/.env.docker /var/www/html/.env +COPY ./docker/php-embed/php.prod.ini "$PHP_INI_DIR/php.ini" COPY composer.json /var/www/html/composer.json COPY composer.lock /var/www/html/composer.lock COPY LICENSE /var/www/html/LICENSE RUN APP_ENV=prod COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader --no-cache \ + && rm -rf /var/www/html/var/cache \ + && mkdir -p /var/www/html/var/cache \ && rm -rf /usr/local/include/php \ && mv /usr/local/lib/php/extensions /usr/local/lib/php_extensions \ && rm -rf /usr/local/lib/php \ @@ -150,6 +487,11 @@ USER worker FROM php AS development +# the dev image has no vendor/ installed by default (it's provided by the mounted source instead), so supercronic's +# scheduled `php bin/console cron` runs would fail until `composer install` is run manually; the dev Caddyfile drops +# the `supervisor` block so supercronic never starts +COPY ./docker/Caddyfile.dev /etc/frankenphp/Caddyfile + COPY ./docker/php-embed/php.dev.ini "$PHP_INI_DIR/php.ini" RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS judy-dev bsd-compat-headers linux-headers \ @@ -173,5 +515,4 @@ USER worker ENV CLASSPATH=".:/usr/local/lib/antlr-4.13.2-complete.jar:/usr/local/lib/rrd-antlr4-0.1.2.jar:$CLASSPATH" -HEALTHCHECK --interval=30s --timeout=3s \ - CMD php bin/console healthcheck +HEALTHCHECK NONE diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 465fafef..18c5f716 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -9,6 +9,12 @@ set -e # exit 1 #fi +# upload requests hold a PHP thread while the client is sending data, so start 2 (FrankenPHP's default) and allow up to +# 8 threads per CPU core, see Caddyfile +CPU_COUNT="$(nproc)" +export FRANKENPHP_NUM_THREADS="${FRANKENPHP_NUM_THREADS:-$((CPU_COUNT * 2))}" +export FRANKENPHP_MAX_THREADS="${FRANKENPHP_MAX_THREADS:-$((CPU_COUNT * 8))}" + if [ -z "$@" ]; then frankenphp run --config /etc/frankenphp/Caddyfile else diff --git a/docker/php-embed/docker-php-entrypoint b/docker/php-embed/docker-php-entrypoint new file mode 100755 index 00000000..88a016c1 --- /dev/null +++ b/docker/php-embed/docker-php-entrypoint @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- php "$@" +fi + +exec "$@" diff --git a/docker/php-embed/docker-php-ext-configure b/docker/php-embed/docker-php-ext-configure new file mode 100755 index 00000000..34fc1337 --- /dev/null +++ b/docker/php-embed/docker-php-ext-configure @@ -0,0 +1,69 @@ +#!/bin/sh +set -e + +# prefer user supplied CFLAGS, but default to our PHP_CFLAGS +: ${CFLAGS:=$PHP_CFLAGS} +: ${CPPFLAGS:=$PHP_CPPFLAGS} +: ${LDFLAGS:=$PHP_LDFLAGS} +export CFLAGS CPPFLAGS LDFLAGS + +srcExists= +if [ -d /usr/src/php ]; then + srcExists=1 +fi +docker-php-source extract +if [ -z "$srcExists" ]; then + touch /usr/src/php/.docker-delete-me +fi + +cd /usr/src/php/ext + +usage() { + echo "usage: $0 ext-name [configure flags]" + echo " ie: $0 gd --with-jpeg-dir=/usr/local/something" + echo + echo 'Possible values for ext-name:' + find . \ + -mindepth 2 \ + -maxdepth 2 \ + -type f \ + -name 'config.m4' \ + | xargs -n1 dirname \ + | xargs -n1 basename \ + | sort \ + | xargs + echo + echo 'Some of the above modules are already compiled into PHP; please check' + echo 'the output of "php -i" to see which modules are already loaded.' +} + +ext="$1" +if [ -z "$ext" ] || [ ! -d "$ext" ]; then + usage >&2 + exit 1 +fi +shift + +pm='unknown' +if [ -e /lib/apk/db/installed ]; then + pm='apk' +fi + +if [ "$pm" = 'apk' ]; then + if \ + [ -n "$PHPIZE_DEPS" ] \ + && ! apk info --installed .phpize-deps > /dev/null \ + && ! apk info --installed .phpize-deps-configure > /dev/null \ + ; then + apk add --no-cache --virtual .phpize-deps-configure $PHPIZE_DEPS + fi +fi + +if command -v dpkg-architecture > /dev/null; then + gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" + set -- --build="$gnuArch" "$@" +fi + +cd "$ext" +phpize +./configure --enable-option-checking=fatal "$@" diff --git a/docker/php-embed/docker-php-ext-enable b/docker/php-embed/docker-php-ext-enable new file mode 100755 index 00000000..41d20bbe --- /dev/null +++ b/docker/php-embed/docker-php-ext-enable @@ -0,0 +1,121 @@ +#!/bin/sh +set -e + +extDir="$(php -d 'display_errors=stderr' -r 'echo ini_get("extension_dir");')" +cd "$extDir" + +usage() { + echo "usage: $0 [options] module-name [module-name ...]" + echo " ie: $0 gd mysqli" + echo " $0 pdo pdo_mysql" + echo " $0 --ini-name 0-apc.ini apcu apc" + echo + echo 'Possible values for module-name:' + find -maxdepth 1 \ + -type f \ + -name '*.so' \ + -exec basename '{}' ';' \ + | sort \ + | xargs + echo + echo 'Some of the above modules are already compiled into PHP; please check' + echo 'the output of "php -i" to see which modules are already loaded.' +} + +opts="$(getopt -o 'h?' --long 'help,ini-name:' -- "$@" || { usage >&2 && false; })" +eval set -- "$opts" + +iniName= +while true; do + flag="$1" + shift + case "$flag" in + --help|-h|'-?') usage && exit 0 ;; + --ini-name) iniName="$1" && shift ;; + --) break ;; + *) + { + echo "error: unknown flag: $flag" + usage + } >&2 + exit 1 + ;; + esac +done + +modules= +for module; do + if [ -z "$module" ]; then + continue + fi + if ! [ -f "$module" ] && ! [ -f "$module.so" ]; then + echo >&2 "error: '$module' does not exist" + echo >&2 + usage >&2 + exit 1 + fi + modules="$modules $module" +done + +if [ -z "$modules" ]; then + usage >&2 + exit 1 +fi + +pm='unknown' +if [ -e /lib/apk/db/installed ]; then + pm='apk' +fi + +apkDel= +if [ "$pm" = 'apk' ]; then + if \ + [ -n "$PHPIZE_DEPS" ] \ + && ! apk info --installed .phpize-deps > /dev/null \ + && ! apk info --installed .phpize-deps-configure > /dev/null \ + ; then + apk add --no-cache --virtual '.docker-php-ext-enable-deps' binutils + apkDel='.docker-php-ext-enable-deps' + fi +fi + +for module in $modules; do + moduleFile="$module" + if [ -f "$module.so" ] && ! [ -f "$module" ]; then + moduleFile="$module.so" + fi + if readelf --wide --syms "$moduleFile" | grep -q ' zend_extension_entry$'; then + # https://wiki.php.net/internals/extensions#loading_zend_extensions + line="zend_extension=$module" + else + line="extension=$module" + fi + + ext="$(basename "$module")" + ext="${ext%.*}" + if php -d 'display_errors=stderr' -r 'exit(extension_loaded("'"$ext"'") ? 0 : 1);'; then + # this isn't perfect, but it's better than nothing + # (for example, 'opcache.so' presents inside PHP as 'Zend OPcache', not 'opcache') + echo >&2 + echo >&2 "warning: $ext ($module) is already loaded!" + echo >&2 + continue + fi + + case "$iniName" in + /*) + # allow an absolute path + ini="$iniName" + ;; + *) + ini="$PHP_INI_DIR/conf.d/${iniName:-"docker-php-ext-$ext.ini"}" + ;; + esac + if ! grep -qFx -e "$line" -e "$line.so" "$ini" 2>/dev/null; then + echo "$line" >> "$ini" + fi +done + +if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then + apk del --no-network $apkDel +fi diff --git a/docker/php-embed/docker-php-ext-install b/docker/php-embed/docker-php-ext-install new file mode 100755 index 00000000..fbf44849 --- /dev/null +++ b/docker/php-embed/docker-php-ext-install @@ -0,0 +1,143 @@ +#!/bin/sh +set -e + +# prefer user supplied CFLAGS, but default to our PHP_CFLAGS +: ${CFLAGS:=$PHP_CFLAGS} +: ${CPPFLAGS:=$PHP_CPPFLAGS} +: ${LDFLAGS:=$PHP_LDFLAGS} +export CFLAGS CPPFLAGS LDFLAGS + +srcExists= +if [ -d /usr/src/php ]; then + srcExists=1 +fi +docker-php-source extract +if [ -z "$srcExists" ]; then + touch /usr/src/php/.docker-delete-me +fi + +cd /usr/src/php/ext + +usage() { + echo "usage: $0 [-jN] [--ini-name file.ini] ext-name [ext-name ...]" + echo " ie: $0 gd mysqli" + echo " $0 pdo pdo_mysql" + echo " $0 -j5 gd mbstring mysqli pdo pdo_mysql shmop" + echo + echo 'if custom ./configure arguments are necessary, see docker-php-ext-configure' + echo + echo 'Possible values for ext-name:' + find . \ + -mindepth 2 \ + -maxdepth 2 \ + -type f \ + -name 'config.m4' \ + | xargs -n1 dirname \ + | xargs -n1 basename \ + | sort \ + | xargs + echo + echo 'Some of the above modules are already compiled into PHP; please check' + echo 'the output of "php -i" to see which modules are already loaded.' +} + +opts="$(getopt -o 'h?j:' --long 'help,ini-name:,jobs:' -- "$@" || { usage >&2 && false; })" +eval set -- "$opts" + +j=1 +iniName= +while true; do + flag="$1" + shift + case "$flag" in + --help|-h|'-?') usage && exit 0 ;; + --ini-name) iniName="$1" && shift ;; + --jobs|-j) j="$1" && shift ;; + --) break ;; + *) + { + echo "error: unknown flag: $flag" + usage + } >&2 + exit 1 + ;; + esac +done + +exts= +for ext; do + if [ -z "$ext" ]; then + continue + fi + if [ ! -d "$ext" ]; then + echo >&2 "error: $PWD/$ext does not exist" + echo >&2 + usage >&2 + exit 1 + fi + exts="$exts $ext" +done + +if [ -z "$exts" ]; then + usage >&2 + exit 1 +fi + +pm='unknown' +if [ -e /lib/apk/db/installed ]; then + pm='apk' +fi + +apkDel= +if [ "$pm" = 'apk' ]; then + if [ -n "$PHPIZE_DEPS" ]; then + if apk info --installed .phpize-deps-configure > /dev/null; then + apkDel='.phpize-deps-configure' + elif ! apk info --installed .phpize-deps > /dev/null; then + apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS + apkDel='.phpize-deps' + fi + fi +fi + +popDir="$PWD" +for ext in $exts; do + cd "$ext" + + [ -e Makefile ] || docker-php-ext-configure "$ext" + + make -j"$j" + + if ! php -n -d 'display_errors=stderr' -r 'exit(ZEND_DEBUG_BUILD ? 0 : 1);' > /dev/null; then + # only "strip" modules if we aren't using a debug build of PHP + # (none of our builds are debug builds, but PHP might be recompiled with "--enable-debug" configure option) + # https://github.com/docker-library/php/issues/1268 + + find modules \ + -maxdepth 1 \ + -name '*.so' \ + -exec sh -euxc ' \ + strip --strip-all "$@" || : + ' -- '{}' + + fi + + make -j"$j" install + + find modules \ + -maxdepth 1 \ + -name '*.so' \ + -exec basename '{}' '.so' ';' \ + | xargs -r docker-php-ext-enable ${iniName:+--ini-name "$iniName"} + + make -j"$j" clean + + cd "$popDir" +done + +if [ "$pm" = 'apk' ] && [ -n "$apkDel" ]; then + apk del --no-network $apkDel +fi + +if [ -e /usr/src/php/.docker-delete-me ]; then + docker-php-source delete +fi diff --git a/docker/php-embed/docker-php-source b/docker/php-embed/docker-php-source new file mode 100755 index 00000000..9033d243 --- /dev/null +++ b/docker/php-embed/docker-php-source @@ -0,0 +1,34 @@ +#!/bin/sh +set -e + +dir=/usr/src/php + +usage() { + echo "usage: $0 COMMAND" + echo + echo "Manage php source tarball lifecycle." + echo + echo "Commands:" + echo " extract extract php source tarball into directory $dir if not already done." + echo " delete delete extracted php source located into $dir if not already done." + echo +} + +case "$1" in + extract) + mkdir -p "$dir" + if [ ! -f "$dir/.docker-extracted" ]; then + tar -Jxf /usr/src/php.tar.xz -C "$dir" --strip-components=1 + touch "$dir/.docker-extracted" + fi + ;; + + delete) + rm -rf "$dir" + ;; + + *) + usage + exit 1 + ;; +esac diff --git a/docker/php-embed/patches/0001-hash-sha-minit-shani-resolver.patch b/docker/php-embed/patches/0001-hash-sha-minit-shani-resolver.patch new file mode 100644 index 00000000..3bba19af --- /dev/null +++ b/docker/php-embed/patches/0001-hash-sha-minit-shani-resolver.patch @@ -0,0 +1,61 @@ +--- a/ext/hash/php_hash_sha.h ++++ b/ext/hash/php_hash_sha.h +@@ -67,6 +67,10 @@ + void SHA256_Transform_shani(uint32_t state[PHP_STATIC_RESTRICT 8], const uint8_t block[PHP_STATIC_RESTRICT 64]); + #endif + ++#if defined(PHP_HASH_INTRIN_SHA_RESOLVER) ++void php_hash_sha256_minit_shani(void); ++#endif ++ + PHP_HASH_API void PHP_SHA256Final(unsigned char[32], PHP_SHA256_CTX *); + + /* SHA384 context */ +--- a/ext/hash/hash_sha.c ++++ b/ext/hash/hash_sha.c +@@ -159,6 +159,15 @@ + } + /* }}} */ + ++#if defined(PHP_HASH_INTRIN_SHA_RESOLVER) ++static int php_hash_sha256_has_shani = 0; ++ ++void php_hash_sha256_minit_shani(void) ++{ ++ php_hash_sha256_has_shani = zend_cpu_supports(ZEND_CPU_FEATURE_SSSE3) && zend_cpu_supports(ZEND_CPU_FEATURE_SHA); ++} ++#endif ++ + /* {{{ SHA256Transform + * SHA256 basic transformation. Transforms state based on block. + */ +@@ -168,7 +177,7 @@ + SHA256_Transform_shani(state, block); + return; + #elif defined(PHP_HASH_INTRIN_SHA_RESOLVER) +- if (zend_cpu_supports(ZEND_CPU_FEATURE_SSSE3) && zend_cpu_supports(ZEND_CPU_FEATURE_SHA)) { ++ if (php_hash_sha256_has_shani) { + SHA256_Transform_shani(state, block); + return; + } +--- a/ext/hash/hash.c ++++ b/ext/hash/hash.c +@@ -20,6 +20,7 @@ + #endif + + #include "php_hash.h" ++#include "php_hash_sha.h" + #include "ext/standard/info.h" + #include "ext/standard/file.h" + #include "ext/standard/php_var.h" +@@ -1588,6 +1589,10 @@ + /* {{{ PHP_MINIT_FUNCTION */ + PHP_MINIT_FUNCTION(hash) + { ++#if defined(PHP_HASH_INTRIN_SHA_RESOLVER) ++ php_hash_sha256_minit_shani(); ++#endif ++ + zend_hash_init(&php_hash_hashtable, 35, NULL, NULL, 1); + + php_hash_register_algo("md2", &php_hash_md2_ops); diff --git a/docker/php-embed/php.dev.ini b/docker/php-embed/php.dev.ini index c1b92717..710a7bca 100644 --- a/docker/php-embed/php.dev.ini +++ b/docker/php-embed/php.dev.ini @@ -2,6 +2,15 @@ expose_php = Off memory_limit = -1 error_log = /dev/stderr +; upload limited to 101 MiB +upload_max_filesize = 105906176 +post_max_size = 105906176 +max_file_uploads = 1 + +; a single request may take at most 15 minutes, see also `read_body` in the Caddyfile; on Linux this only counts time +; in which PHP itself is working, not time spent waiting for the client or S3 +max_execution_time = 900 + xdebug.mode=profile xdebug.start_with_request=trigger xdebug.output_dir="/var/www/html/xdebug-trace" diff --git a/docker/php-embed/php.prod.ini b/docker/php-embed/php.prod.ini index ef68f622..2116f931 100644 --- a/docker/php-embed/php.prod.ini +++ b/docker/php-embed/php.prod.ini @@ -1,3 +1,30 @@ expose_php = Off -memory_limit = -1 +memory_limit = 256M error_log = /dev/stderr +display_errors = Off +; failures which happen before the application handles them (e.g. exhausted memory while booting) are only visible here +log_errors = On +html_errors = Off +zend.assertions = -1 + +; upload limited to 101 MiB +upload_max_filesize = 105906176 +post_max_size = 105906176 +max_file_uploads = 1 + +; a single request may take at most 15 minutes, see also `read_body` in the Caddyfile; on Linux this only counts time +; in which PHP itself is working, not time spent waiting for the client or S3 +max_execution_time = 900 + +; production: the image is immutable, so files are never checked for changes; the compiled container/preload file is +; not shipped in the image and is instead generated fresh on first request from whatever config is mounted at +; container start; config/preload.php itself checks whether that generated file exists before requiring it +opcache.enable = 1 +opcache.validate_timestamps = 0 +opcache.memory_consumption = 256 +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.preload = /var/www/html/config/preload.php +opcache.preload_user = worker +realpath_cache_size = 4096K +realpath_cache_ttl = 600 diff --git a/docker/supercronic b/docker/supercronic index 6188298c..72f58946 100644 --- a/docker/supercronic +++ b/docker/supercronic @@ -7,4 +7,4 @@ # | | | | | | + year # | | | | | | | + command # | | | | | | | | - 0 */2 * * * * * php bin/console cron + 0 */5 * * * * * php bin/console cron diff --git a/docs/README.md b/docs/README.md index 0ba574a8..d44c5342 100755 --- a/docs/README.md +++ b/docs/README.md @@ -1,49 +1,40 @@ # Ember Nexus: Knowledge Graph API -Store anything, connect everything, search it all? Sure thing! 😃 +Ember Nexus is a knowledge graph API, which means that it is specialized in storing and retrieving your data. +It can be used as an alternative to Obsidian, Notion, your companies ERP or content management systems or as a blank +database for your own projects. As long as you need to store data and are interested in easy to use cutting edge +features - Ember Nexus will be useful for you! :D -Ember Nexus API is a dynamic and versatile REST-API that leverages the power of graphs to provide flexible and secure -data storage and retrieval for data-minded people. It is [source first](https://sourcefirst.com/) and can be hosted on -your own hardware - we currently support AMD and ARM architectures. +## How is Ember Nexus different to other solutions? -## Quick Links +Ember Nexus is built on three principles: -- [Getting Started](https://ember-nexus.github.io/api/#/getting-started/tech-stack) -- [Check out the documentation](https://ember-nexus.github.io/api) -- [Find us on Docker Hub](https://hub.docker.com/r/embernexus/api) -- [Demo API](https://reference-dataset.ember-nexus.dev/) +- Be easy to use. +- Be secure. +- Expose the advantages and modern features of its internal databases. -## Features +The "secret sauce" is the combination of databases Ember Nexus uses: -Ember Nexus offers a range of cutting-edge features to meet your data storage needs, including: +- **Neo4j**: A graph database, which stores relationships and core properties of your data elements. +- **MongoDB**: A document database, stores more complex properties which Neo4j can not handle itself. +- **Elasticsearch**: A search database, used for full text search, vector search and more. +- **S3 compatible object store**: Used to store binary files, up to 1 TB by default. -- **Graph-based data model**: Ember Nexus uses the graph database [Neo4j](https://neo4j.com/) internally, which enables - you to connect any data element to any other data element and efficiently search long and recursive relations. -- **Access through UUID**: Ember Nexus assigns a UUID to every storable element, making it easy to retrieve and manage - data. User can provide their own UUIDs as well, although this feature is disabled by default. -- **Near real-time search**: Ember Nexus supports full-text search that is fast and responsive. Most of - [Elasticsearch](https://www.elastic.co/elasticsearch/)'s features are directly available while not bypassing the - security model. -- **Secure by default**: User-created data is only visible to the owner by default. Sharing data requires explicit - rules, which are recursive and optionally limited in access scope and other features. -- **High-quality software**: We invested quite a bit of time to make sure that this software is as stable as possible. - We employ code linters, unit tests, feature tests, memory leak tests, mutant tests, and more. Most examples in the - documentation are automatically checked for deprecations. +Instead of using multiple specialized databases yourself, simply use Ember Nexus, and benefit of the exposed features +and without having to worry about data consistency, security aspects and more. -## Planned Features +It just works :D -See our [milestone](https://github.com/ember-nexus/api/milestones) and -[issue](https://github.com/ember-nexus/api/issues) list on GitHub for planned features. +## What can you find where? -## When should I use Ember Nexus API? +- [GitHub Repository](https://github.com/ember-nexus/api): Keep up to date with new releases, post issues and more. +- [API Documentation](https://ember-nexus.github.io/api/#/): For everyone who wants to develop own apps on top of + Ember Nexus. +- [Docker Hub](https://hub.docker.com/r/embernexus/api): Ready to use container images for AMD and ARM architectures. +- [Demo API](https://reference-dataset.ember-nexus.dev/): Instance which can be used for quick testing. Is being reset + every day, and uses the [reference dataset](https://github.com/ember-nexus/reference-dataset) as its data, which + includes eternal tokens. -Ember Nexus is a powerful tool for a range of use cases, including: +## Is there a graphical user interface (GUI)? -- **Private cloud**: Use Ember Nexus to create your own private cloud, similar to Nextcloud. -- **Websites**: Use Ember Nexus as a CMS or blog platform. -- **Data management systems**: Ember Nexus is ideal for building data management systems and archives. -- **Data lakes**: Ember Nexus makes it easy to create data lakes, where you can store and manage large volumes of data. -- **Interface between multiple systems**: Ember Nexus can serve as a bridge between multiple systems, making it easy to - integrate and manage data across your entire infrastructure. - -Experience the power of Ember Nexus for yourself - [try it out today](https://ember-nexus.github.io/api/#/)! +It is currently being developed, but not yet ready to be used. diff --git a/docs/_sidebar.md b/docs/_sidebar.md index f9bb4c85..8b04796e 100755 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -10,33 +10,6 @@ - [Caching](/concepts/caching) - [Grammars](/concepts/grammars) -- Search Steps - - [Elasticsearch Query DSL Mixin](/search/step/elasticsearch-query-dsl-mixin) - - [Cypher Path Subset](/search/step/cypher-path-subset) - - [Element Hydration](/search/step/element-hydration) - -- Search Examples - - Elasticsearch Query DSL Mixins - - [Simple Full Text Search](/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search) - - [Advanced Full Text Search](/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search) - - [Keyword Search](/search/example/elasticsearch-query-dsl-mixin/keyword-search) - - [Text Prefix Search](/search/example/elasticsearch-query-dsl-mixin/text-prefix-search) - - [Wildcard Search](/search/example/elasticsearch-query-dsl-mixin/wildcard-search) - - [Query String Search](/search/example/elasticsearch-query-dsl-mixin/query-string-search) - - [Parameterized Search](/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search) - - Cypher Path Subset - - [Find Tagged Elements](/search/example/cypher-path-subset/find-tagged-elements) - - [Find Nested Elements](/search/example/cypher-path-subset/find-nested-elements) - - [Parameterized Cypher Search](/search/example/cypher-path-subset/parameterized-cypher-search) - - Element Hydration - - [Implicit Elements Hydration](/search/example/element-hydration/implicit-elements-hydration) - - [Implicit Paths Hydration](/search/example/element-hydration/implicit-paths-hydration) - - [Explicit ElementIds Hydration](/search/example/element-hydration/explicit-elementids-hydration) - - [Parameterized ElementIds Hydration](/search/example/element-hydration/parameterized-elementids-hydration) - - Polyglot - - [Elasticsearch -> Cypher -> Hydration](/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration) - - [Cypher -> Elasticsearch -> Hydration](/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration) - - API Endpoints - **User Endpoints** @@ -59,6 +32,15 @@ - [DELETE` / -` Delete Element Endpoint](/api-endpoints/element/delete-element) - **Search Endpoints** - [POST` /search -` Search Endpoint](/api-endpoints/search/post-search) + - **File Endpoints** + - [GET` //file -` Get Element File Endpoint](/api-endpoints/file/get-element-file) + - [POST` //file -` Create Element File Endpoint](/api-endpoints/file/post-element-file) + - [PUT` //file -` Replace Element File Endpoint](/api-endpoints/file/put-element-file) + - [DELETE` //file -` Delete Element File Endpoint](/api-endpoints/file/delete-element-file) + - **Upload Endpoints** + - [HEAD` /upload/ -` Head Upload Endpoint](/api-endpoints/upload/head-upload) + - [PATCH` /upload/ -` Patch Upload Endpoint](/api-endpoints/upload/patch-upload) + - [DELETE` /upload/ -` Delete Upload Endpoint](/api-endpoints/upload/delete-upload) - **System Endpoints** - [GET` /instance-configuration -` Get Instance Configuration Endpoint](/api-endpoints/system/get-instance-configuration) - [GET` /graph-structure -` Get Graph Structure Endpoint](/api-endpoints/system/get-graph-structure) @@ -69,26 +51,15 @@ - [GET` /error/400/incomplete-mutual-dependency -` Get Details for Error 400 Incomplete Mutual Dependency Endpoint](/api-endpoints/error/get-400-incomplete-mutual-dependency) - [GET` /error/400/missing-property -` Get Details for Error 400 Missing Property Endpoint](/api-endpoints/error/get-400-missing-property) - [GET` /error/400/reserved-identifier -` Get Details for Error 400 Reserved Identifier Endpoint](/api-endpoints/error/get-400-reserved-identifier) + - [GET` /error/400/reserved-type -` Get Details for Error 400 Reserved Type Endpoint](/api-endpoints/error/get-400-reserved-type) - [GET` /error/401/unauthorized -` Get Details for Error 401 Unauthorized Endpoint](/api-endpoints/error/get-401-unauthorized) - [GET` /error/403/forbidden -` Get Details for Error 403 Forbidden Endpoint](/api-endpoints/error/get-403-forbidden) - [GET` /error/404/not-found -` Get Details for Error 404 Not Found Endpoint](/api-endpoints/error/get-404-not-found) + - [GET` /error/408/request-timeout -` Get Details for Error 408 Request Timeout Endpoint](/api-endpoints/error/get-408-request-timeout) - [GET` /error/412/precondition-failed -` Get Details for Error 412 Precondition Failed Endpoint](/api-endpoints/error/get-412-precondition-failed) - [GET` /error/500/internal-server-error -` Get Details for Error 500 Internal Server Error Endpoint](/api-endpoints/error/get-500-internal-server-error) - [GET` /error/501/not-implemented -` Get Details for Error 501 Not Implemented Endpoint](/api-endpoints/error/get-501-not-implemented) - - **File Endpoints (TBI)** - - [🚧 GET` //file -` Get Element File Endpoint](/api-endpoints/file/get-element-file) - - [🚧 POST` //file -` Create Element File Endpoint](/api-endpoints/file/post-element-file) - - [🚧 PUT` //file -` Replace Element File Endpoint](/api-endpoints/file/put-element-file) - - [🚧 PATCH` //file -` Update Element File Endpoint](/api-endpoints/file/patch-element-file) - - [🚧 DELETE` //file -` Delete Element File Endpoint](/api-endpoints/file/delete-element-file) - - **WebDAV Endpoints (TBI)** - - [🚧 COPY` / -` Copy Element Endpoint](/api-endpoints/webdav/copy-element) - - [🚧 LOCK` / -` Lock Element Endpoint](/api-endpoints/webdav/lock-element) - - [🚧 UNLOCK` / -` Unlock Element Endpoint](/api-endpoints/webdav/unlock-element) - - [🚧 MKCOL` / -` Create Folder Endpoint](/api-endpoints/webdav/mkcol-folder) - - [🚧 MOVE` / -` Move Element Endpoint](/api-endpoints/webdav/move-element) - - [🚧 PROPFIND` / -` Find Element Property Endpoint](/api-endpoints/webdav/propfind-element) - - [🚧 PROPPATCH` / -` Change Element Property Endpoint](/api-endpoints/webdav/proppatch-element) + - [GET` /error/503/service-unavailable -` Get Details for Error 503 Service Unavailable Endpoint](/api-endpoints/error/get-503-service-unavailable) - Commands - **System Commands** @@ -108,6 +79,33 @@ - **Database Commands** - [`database:drop`](/commands/database/database-drop) +- Search + - Search Step Types + - [Elasticsearch Query DSL Mixin](/search/step/elasticsearch-query-dsl-mixin) + - [Cypher Path Subset](/search/step/cypher-path-subset) + - [Element Hydration](/search/step/element-hydration) + - Search Examples + - Elasticsearch Query DSL Mixins + - [Simple Full Text Search](/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search) + - [Advanced Full Text Search](/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search) + - [Keyword Search](/search/example/elasticsearch-query-dsl-mixin/keyword-search) + - [Text Prefix Search](/search/example/elasticsearch-query-dsl-mixin/text-prefix-search) + - [Wildcard Search](/search/example/elasticsearch-query-dsl-mixin/wildcard-search) + - [Query String Search](/search/example/elasticsearch-query-dsl-mixin/query-string-search) + - [Parameterized Search](/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search) + - Cypher Path Subset + - [Find Tagged Elements](/search/example/cypher-path-subset/find-tagged-elements) + - [Find Nested Elements](/search/example/cypher-path-subset/find-nested-elements) + - [Parameterized Cypher Search](/search/example/cypher-path-subset/parameterized-cypher-search) + - Element Hydration + - [Implicit Elements Hydration](/search/example/element-hydration/implicit-elements-hydration) + - [Implicit Paths Hydration](/search/example/element-hydration/implicit-paths-hydration) + - [Explicit ElementIds Hydration](/search/example/element-hydration/explicit-elementids-hydration) + - [Parameterized ElementIds Hydration](/search/example/element-hydration/parameterized-elementids-hydration) + - Polyglot + - [Elasticsearch -> Cypher -> Hydration](/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration) + - [Cypher -> Elasticsearch -> Hydration](/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration) + - Security - [Ownership](/security/ownership) - [Access](/security/access) @@ -116,7 +114,3 @@ - [Predefined Data Types](/security/predefined-data-types) - [Passwords, Tokens and Hashing](/security/passwords-tokens-and-hashing) - [Security Tests](/security/test/general) - -- Development - - [Long Term Plans](/development/long-term-plans) - - [Best Practices](/development/best-practices) diff --git a/docs/api-endpoints/element/delete-element/204-response-header.txt b/docs/api-endpoints/element/delete-element/204-response-header.txt index 5587e440..2ef566f1 100644 --- a/docs/api-endpoints/element/delete-element/204-response-header.txt +++ b/docs/api-endpoints/element/delete-element/204-response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private -Date: Mon, 11 Dec 2023 12:11:20 GMT +Date: Fri, 02 Oct 2026 22:37:54 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/delete-element/401-response-body.json b/docs/api-endpoints/element/delete-element/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/delete-element/401-response-body.json +++ b/docs/api-endpoints/element/delete-element/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/delete-element/401-response-header.txt b/docs/api-endpoints/element/delete-element/401-response-header.txt index b7f1d0d2..00973bdf 100644 --- a/docs/api-endpoints/element/delete-element/401-response-header.txt +++ b/docs/api-endpoints/element/delete-element/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 11 Dec 2023 12:11:20 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:02:56 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/delete-element/404-response-body.json b/docs/api-endpoints/element/delete-element/404-response-body.json index d2abaadb..0e06dd51 100644 --- a/docs/api-endpoints/element/delete-element/404-response-body.json +++ b/docs/api-endpoints/element/delete-element/404-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/404/not-found", "title": "Not found", "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested element was not found." } \ No newline at end of file diff --git a/docs/api-endpoints/element/delete-element/404-response-header.txt b/docs/api-endpoints/element/delete-element/404-response-header.txt index 127e2afa..569e9b6b 100644 --- a/docs/api-endpoints/element/delete-element/404-response-header.txt +++ b/docs/api-endpoints/element/delete-element/404-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 177 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 11 Dec 2023 12:12:52 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:54 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/delete-element/412-response-body.json b/docs/api-endpoints/element/delete-element/412-response-body.json index 4c3d4ecf..216a1e4c 100644 --- a/docs/api-endpoints/element/delete-element/412-response-body.json +++ b/docs/api-endpoints/element/delete-element/412-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/412/precondition-failed", "title": "Precondition Failed", "status": 412, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Precondition does not match." } \ No newline at end of file diff --git a/docs/api-endpoints/element/delete-element/412-response-header.txt b/docs/api-endpoints/element/delete-element/412-response-header.txt index 3ce2f21e..8c34576a 100644 --- a/docs/api-endpoints/element/delete-element/412-response-header.txt +++ b/docs/api-endpoints/element/delete-element/412-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 193 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 08 Mar 2024 21:34:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:54 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/delete-element/429-response-body.json b/docs/api-endpoints/element/delete-element/429-response-body.json index 793a1e82..70ca31f8 100644 --- a/docs/api-endpoints/element/delete-element/429-response-body.json +++ b/docs/api-endpoints/element/delete-element/429-response-body.json @@ -2,5 +2,6 @@ "type": "429-too-many-requests", "title": "Too Many Requests", "status": "429", + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "The client sent too many requests in a given timeframe; rate limiting is active." } \ No newline at end of file diff --git a/docs/api-endpoints/element/delete-element/429-response-header.txt b/docs/api-endpoints/element/delete-element/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/delete-element/429-response-header.txt +++ b/docs/api-endpoints/element/delete-element/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/get-children/200-response-header.txt b/docs/api-endpoints/element/get-children/200-response-header.txt index 221b6f7e..86f7a92e 100644 --- a/docs/api-endpoints/element/get-children/200-response-header.txt +++ b/docs/api-endpoints/element/get-children/200-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:48:30 GMT -Etag: "OniT9I2cuUI" +Date: Fri, 02 Oct 2026 22:37:54 GMT +Etag: "BI9Him3H9KR" Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/304-response-header.txt b/docs/api-endpoints/element/get-children/304-response-header.txt index 3cc8f8d8..e8c555b4 100644 --- a/docs/api-endpoints/element/get-children/304-response-header.txt +++ b/docs/api-endpoints/element/get-children/304-response-header.txt @@ -1,9 +1,9 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private -Date: Sun, 10 Mar 2024 13:46:31 GMT -Etag: "TMfc6KdsY3a" +Date: Fri, 02 Oct 2026 22:37:55 GMT +Etag: "BI9Him3H9KR" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/401-response-body.json b/docs/api-endpoints/element/get-children/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/get-children/401-response-body.json +++ b/docs/api-endpoints/element/get-children/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/401-response-header.txt b/docs/api-endpoints/element/get-children/401-response-header.txt index 17762cd0..86a77314 100644 --- a/docs/api-endpoints/element/get-children/401-response-header.txt +++ b/docs/api-endpoints/element/get-children/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:47:05 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:02:56 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/404-response-body.json b/docs/api-endpoints/element/get-children/404-response-body.json index d2abaadb..0e06dd51 100644 --- a/docs/api-endpoints/element/get-children/404-response-body.json +++ b/docs/api-endpoints/element/get-children/404-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/404/not-found", "title": "Not found", "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested element was not found." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/404-response-header.txt b/docs/api-endpoints/element/get-children/404-response-header.txt index 17762cd0..52d4ad97 100644 --- a/docs/api-endpoints/element/get-children/404-response-header.txt +++ b/docs/api-endpoints/element/get-children/404-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 177 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:47:05 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:55 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/412-response-body.json b/docs/api-endpoints/element/get-children/412-response-body.json index 4c3d4ecf..216a1e4c 100644 --- a/docs/api-endpoints/element/get-children/412-response-body.json +++ b/docs/api-endpoints/element/get-children/412-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/412/precondition-failed", "title": "Precondition Failed", "status": 412, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Precondition does not match." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/412-response-header.txt b/docs/api-endpoints/element/get-children/412-response-header.txt index 3ce2f21e..6def7a1a 100644 --- a/docs/api-endpoints/element/get-children/412-response-header.txt +++ b/docs/api-endpoints/element/get-children/412-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 193 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 08 Mar 2024 21:34:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:55 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/429-response-body.json b/docs/api-endpoints/element/get-children/429-response-body.json index 793a1e82..70ca31f8 100644 --- a/docs/api-endpoints/element/get-children/429-response-body.json +++ b/docs/api-endpoints/element/get-children/429-response-body.json @@ -2,5 +2,6 @@ "type": "429-too-many-requests", "title": "Too Many Requests", "status": "429", + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "The client sent too many requests in a given timeframe; rate limiting is active." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-children/429-response-header.txt b/docs/api-endpoints/element/get-children/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/get-children/429-response-header.txt +++ b/docs/api-endpoints/element/get-children/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/get-element/200-node-response-header.txt b/docs/api-endpoints/element/get-element/200-node-response-header.txt index 9259b18e..1f944fb7 100644 --- a/docs/api-endpoints/element/get-element/200-node-response-header.txt +++ b/docs/api-endpoints/element/get-element/200-node-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 886 Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:24:10 GMT -Etag: "YgbFC4u5EgC" -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:55 GMT +Etag: "97In06W2lLE" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/200-relation-response-header.txt b/docs/api-endpoints/element/get-element/200-relation-response-header.txt index 100d33a0..e6adbef8 100644 --- a/docs/api-endpoints/element/get-element/200-relation-response-header.txt +++ b/docs/api-endpoints/element/get-element/200-relation-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 236 Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:24:11 GMT -Etag: "9FX6hrAKraU" -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:55 GMT +Etag: "fAP2PaCUC0X" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/304-response-header.txt b/docs/api-endpoints/element/get-element/304-response-header.txt index 3cc8f8d8..f8704338 100644 --- a/docs/api-endpoints/element/get-element/304-response-header.txt +++ b/docs/api-endpoints/element/get-element/304-response-header.txt @@ -1,9 +1,9 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private -Date: Sun, 10 Mar 2024 13:46:31 GMT -Etag: "TMfc6KdsY3a" +Date: Fri, 02 Oct 2026 22:37:55 GMT +Etag: "97In06W2lLE" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/401-response-body.json b/docs/api-endpoints/element/get-element/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/get-element/401-response-body.json +++ b/docs/api-endpoints/element/get-element/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/401-response-header.txt b/docs/api-endpoints/element/get-element/401-response-header.txt index cd60e44a..5d50eaff 100644 --- a/docs/api-endpoints/element/get-element/401-response-header.txt +++ b/docs/api-endpoints/element/get-element/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:22:32 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:02:57 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/404-response-body.json b/docs/api-endpoints/element/get-element/404-response-body.json index d2abaadb..0e06dd51 100644 --- a/docs/api-endpoints/element/get-element/404-response-body.json +++ b/docs/api-endpoints/element/get-element/404-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/404/not-found", "title": "Not found", "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested element was not found." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/404-response-header.txt b/docs/api-endpoints/element/get-element/404-response-header.txt index 3e554fe4..c5a7309f 100644 --- a/docs/api-endpoints/element/get-element/404-response-header.txt +++ b/docs/api-endpoints/element/get-element/404-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 177 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:32:44 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:55 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/412-response-body.json b/docs/api-endpoints/element/get-element/412-response-body.json index 4c3d4ecf..216a1e4c 100644 --- a/docs/api-endpoints/element/get-element/412-response-body.json +++ b/docs/api-endpoints/element/get-element/412-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/412/precondition-failed", "title": "Precondition Failed", "status": 412, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Precondition does not match." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/412-response-header.txt b/docs/api-endpoints/element/get-element/412-response-header.txt index 3ce2f21e..ee3ed42d 100644 --- a/docs/api-endpoints/element/get-element/412-response-header.txt +++ b/docs/api-endpoints/element/get-element/412-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 193 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 08 Mar 2024 21:34:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:55 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/429-response-body.json b/docs/api-endpoints/element/get-element/429-response-body.json index 793a1e82..70ca31f8 100644 --- a/docs/api-endpoints/element/get-element/429-response-body.json +++ b/docs/api-endpoints/element/get-element/429-response-body.json @@ -2,5 +2,6 @@ "type": "429-too-many-requests", "title": "Too Many Requests", "status": "429", + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "The client sent too many requests in a given timeframe; rate limiting is active." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-element/429-response-header.txt b/docs/api-endpoints/element/get-element/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/get-element/429-response-header.txt +++ b/docs/api-endpoints/element/get-element/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/get-index/200-response-header.txt b/docs/api-endpoints/element/get-index/200-response-header.txt index 7f5f0928..e1938fa0 100644 --- a/docs/api-endpoints/element/get-index/200-response-header.txt +++ b/docs/api-endpoints/element/get-index/200-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 686 Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:02:22 GMT -Etag: "Fj0kUmVpX2T" -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:56 GMT +Etag: "K5bj4nQ2QPv" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-index/304-response-header.txt b/docs/api-endpoints/element/get-index/304-response-header.txt index 3cc8f8d8..0a5df027 100644 --- a/docs/api-endpoints/element/get-index/304-response-header.txt +++ b/docs/api-endpoints/element/get-index/304-response-header.txt @@ -1,9 +1,9 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private -Date: Sun, 10 Mar 2024 13:46:31 GMT -Etag: "TMfc6KdsY3a" +Date: Fri, 02 Oct 2026 22:37:56 GMT +Etag: "K5bj4nQ2QPv" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-index/401-response-body.json b/docs/api-endpoints/element/get-index/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/get-index/401-response-body.json +++ b/docs/api-endpoints/element/get-index/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-index/401-response-header.txt b/docs/api-endpoints/element/get-index/401-response-header.txt index a1c4c53c..a2053506 100644 --- a/docs/api-endpoints/element/get-index/401-response-header.txt +++ b/docs/api-endpoints/element/get-index/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:15:40 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:02:57 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-index/412-response-body.json b/docs/api-endpoints/element/get-index/412-response-body.json index 4c3d4ecf..216a1e4c 100644 --- a/docs/api-endpoints/element/get-index/412-response-body.json +++ b/docs/api-endpoints/element/get-index/412-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/412/precondition-failed", "title": "Precondition Failed", "status": 412, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Precondition does not match." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-index/412-response-header.txt b/docs/api-endpoints/element/get-index/412-response-header.txt index 3ce2f21e..5646a06b 100644 --- a/docs/api-endpoints/element/get-index/412-response-header.txt +++ b/docs/api-endpoints/element/get-index/412-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 193 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 08 Mar 2024 21:34:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:56 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-index/429-response-body.json b/docs/api-endpoints/element/get-index/429-response-body.json index 793a1e82..70ca31f8 100644 --- a/docs/api-endpoints/element/get-index/429-response-body.json +++ b/docs/api-endpoints/element/get-index/429-response-body.json @@ -2,5 +2,6 @@ "type": "429-too-many-requests", "title": "Too Many Requests", "status": "429", + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "The client sent too many requests in a given timeframe; rate limiting is active." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-index/429-response-header.txt b/docs/api-endpoints/element/get-index/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/get-index/429-response-header.txt +++ b/docs/api-endpoints/element/get-index/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/get-parents/200-response-header.txt b/docs/api-endpoints/element/get-parents/200-response-header.txt index 2a8af605..1931135d 100644 --- a/docs/api-endpoints/element/get-parents/200-response-header.txt +++ b/docs/api-endpoints/element/get-parents/200-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 667 Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:39:19 GMT -Etag: "Fj0kUmVpX2T" -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:56 GMT +Etag: "5eT3LcZFgR0" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/304-response-header.txt b/docs/api-endpoints/element/get-parents/304-response-header.txt index 3cc8f8d8..68b77496 100644 --- a/docs/api-endpoints/element/get-parents/304-response-header.txt +++ b/docs/api-endpoints/element/get-parents/304-response-header.txt @@ -1,9 +1,9 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private -Date: Sun, 10 Mar 2024 13:46:31 GMT -Etag: "TMfc6KdsY3a" +Date: Fri, 02 Oct 2026 22:37:56 GMT +Etag: "5eT3LcZFgR0" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/401-response-body.json b/docs/api-endpoints/element/get-parents/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/get-parents/401-response-body.json +++ b/docs/api-endpoints/element/get-parents/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/401-response-header.txt b/docs/api-endpoints/element/get-parents/401-response-header.txt index 41097212..8558777e 100644 --- a/docs/api-endpoints/element/get-parents/401-response-header.txt +++ b/docs/api-endpoints/element/get-parents/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:39:20 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:02:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/404-response-body.json b/docs/api-endpoints/element/get-parents/404-response-body.json index d2abaadb..0e06dd51 100644 --- a/docs/api-endpoints/element/get-parents/404-response-body.json +++ b/docs/api-endpoints/element/get-parents/404-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/404/not-found", "title": "Not found", "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested element was not found." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/404-response-header.txt b/docs/api-endpoints/element/get-parents/404-response-header.txt index 41097212..e7abf9d8 100644 --- a/docs/api-endpoints/element/get-parents/404-response-header.txt +++ b/docs/api-endpoints/element/get-parents/404-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 177 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:39:20 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:56 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/412-response-body.json b/docs/api-endpoints/element/get-parents/412-response-body.json index 4c3d4ecf..216a1e4c 100644 --- a/docs/api-endpoints/element/get-parents/412-response-body.json +++ b/docs/api-endpoints/element/get-parents/412-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/412/precondition-failed", "title": "Precondition Failed", "status": 412, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Precondition does not match." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/412-response-header.txt b/docs/api-endpoints/element/get-parents/412-response-header.txt index 3ce2f21e..1ac27ed3 100644 --- a/docs/api-endpoints/element/get-parents/412-response-header.txt +++ b/docs/api-endpoints/element/get-parents/412-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 193 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 08 Mar 2024 21:34:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:56 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/429-response-body.json b/docs/api-endpoints/element/get-parents/429-response-body.json index 793a1e82..70ca31f8 100644 --- a/docs/api-endpoints/element/get-parents/429-response-body.json +++ b/docs/api-endpoints/element/get-parents/429-response-body.json @@ -2,5 +2,6 @@ "type": "429-too-many-requests", "title": "Too Many Requests", "status": "429", + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "The client sent too many requests in a given timeframe; rate limiting is active." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-parents/429-response-header.txt b/docs/api-endpoints/element/get-parents/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/get-parents/429-response-header.txt +++ b/docs/api-endpoints/element/get-parents/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/get-related/200-response-body.json b/docs/api-endpoints/element/get-related/200-response-body.json index 26f401c2..64991fde 100644 --- a/docs/api-endpoints/element/get-related/200-response-body.json +++ b/docs/api-endpoints/element/get-related/200-response-body.json @@ -13,9 +13,9 @@ "type": "Comment", "id": "251654a1-588e-4dc4-836f-b1e334d91aae", "data": { - "created": "2025-09-27T10:39:51+00:00", + "created": "2026-10-02T22:16:07+00:00", "name": "Yellow", - "updated": "2025-09-27T10:39:51+00:00", + "updated": "2026-10-02T22:16:07+00:00", "content": "Yellow is the color between green and orange on the spectrum of light. It is evoked by light with a dominant wavelength of roughly 575–585 nm. It is a primary color in subtractive color systems, used in painting or color printing. In the RGB color model, used to create colors on television and computer screens, yellow is a secondary color made by combining red and green at equal intensity. Carotenoids give the characteristic yellow color to autumn leaves, corn, canaries, daffodils, and lemons, as well as egg yolks, buttercups, and bananas. They absorb light energy and protect plants from photo damage in some cases. Sunlight has a slight yellowish hue when the Sun is near the horizon, due to atmospheric scattering of shorter wavelengths (green, blue, and violet)." } }, @@ -23,18 +23,18 @@ "type": "Sphere", "id": "56fda20c-b238-4034-b555-1df47c47e17a", "data": { - "created": "2025-09-27T10:39:51+00:00", + "created": "2026-10-02T22:16:07+00:00", "name": "Tag", - "updated": "2025-09-27T10:39:51+00:00" + "updated": "2026-10-02T22:16:07+00:00" } }, { "type": "Comment", "id": "5bd2a18a-6d26-4fcd-99a7-9705794b63fc", "data": { - "created": "2025-09-27T10:39:51+00:00", + "created": "2026-10-02T22:16:07+00:00", "name": "Additive color model", - "updated": "2025-09-27T10:39:51+00:00", + "updated": "2026-10-02T22:16:07+00:00", "content": "Additive color or additive mixing is a property of a color model that predicts the appearance of colors made by coincident component lights, i.e. the perceived color can be predicted by summing the numeric representations of the component colors. Modern formulations of Grassmann's laws describe the additivity in the color perception of light mixtures in terms of algebraic equations. Additive color predicts perception and not any sort of change in the photons of light themselves. These predictions are only applicable in the limited scope of color matching experiments where viewers match small patches of uniform color isolated against a grey or black background." } } @@ -46,8 +46,8 @@ "start": "251654a1-588e-4dc4-836f-b1e334d91aae", "end": "45482998-274a-43d0-a466-f31d0b24cc0a", "data": { - "created": "2025-09-27T10:39:58+00:00", - "updated": "2025-09-27T10:39:58+00:00" + "created": "2026-10-02T22:16:15+00:00", + "updated": "2026-10-02T22:16:15+00:00" } }, { @@ -56,8 +56,8 @@ "start": "56fda20c-b238-4034-b555-1df47c47e17a", "end": "45482998-274a-43d0-a466-f31d0b24cc0a", "data": { - "created": "2025-09-27T10:39:58+00:00", - "updated": "2025-09-27T10:39:58+00:00" + "created": "2026-10-02T22:16:15+00:00", + "updated": "2026-10-02T22:16:15+00:00" } }, { @@ -66,8 +66,8 @@ "start": "5bd2a18a-6d26-4fcd-99a7-9705794b63fc", "end": "45482998-274a-43d0-a466-f31d0b24cc0a", "data": { - "created": "2025-09-27T10:39:58+00:00", - "updated": "2025-09-27T10:39:58+00:00" + "created": "2026-10-02T22:16:15+00:00", + "updated": "2026-10-02T22:16:15+00:00" } } ] diff --git a/docs/api-endpoints/element/get-related/200-response-header.txt b/docs/api-endpoints/element/get-related/200-response-header.txt index 211ffa95..6663dc77 100644 --- a/docs/api-endpoints/element/get-related/200-response-header.txt +++ b/docs/api-endpoints/element/get-related/200-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 20 Dec 2025 12:54:52 GMT -Etag: "WGivC9HMX9o" +Date: Fri, 02 Oct 2026 22:37:57 GMT +Etag: "RonS1Oo9heM" Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/304-response-header.txt b/docs/api-endpoints/element/get-related/304-response-header.txt index 26ad85f7..80179ca4 100644 --- a/docs/api-endpoints/element/get-related/304-response-header.txt +++ b/docs/api-endpoints/element/get-related/304-response-header.txt @@ -1,9 +1,9 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private -Date: Sat, 20 Dec 2025 13:05:16 GMT -Etag: "LZWAF9Oo38W" +Date: Fri, 02 Oct 2026 22:37:57 GMT +Etag: "RonS1Oo9heM" X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/401-response-body.json b/docs/api-endpoints/element/get-related/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/get-related/401-response-body.json +++ b/docs/api-endpoints/element/get-related/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/401-response-header.txt b/docs/api-endpoints/element/get-related/401-response-header.txt index f4c0c56d..2dcac8bb 100644 --- a/docs/api-endpoints/element/get-related/401-response-header.txt +++ b/docs/api-endpoints/element/get-related/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:54:33 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:02:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/404-response-body.json b/docs/api-endpoints/element/get-related/404-response-body.json index d2abaadb..0e06dd51 100644 --- a/docs/api-endpoints/element/get-related/404-response-body.json +++ b/docs/api-endpoints/element/get-related/404-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/404/not-found", "title": "Not found", "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested element was not found." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/404-response-header.txt b/docs/api-endpoints/element/get-related/404-response-header.txt index f4c0c56d..826b55a9 100644 --- a/docs/api-endpoints/element/get-related/404-response-header.txt +++ b/docs/api-endpoints/element/get-related/404-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 177 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 20:54:33 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:57 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/412-response-body.json b/docs/api-endpoints/element/get-related/412-response-body.json index 4c3d4ecf..216a1e4c 100644 --- a/docs/api-endpoints/element/get-related/412-response-body.json +++ b/docs/api-endpoints/element/get-related/412-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/412/precondition-failed", "title": "Precondition Failed", "status": 412, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Precondition does not match." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/412-response-header.txt b/docs/api-endpoints/element/get-related/412-response-header.txt index 3ce2f21e..58cfa8b2 100644 --- a/docs/api-endpoints/element/get-related/412-response-header.txt +++ b/docs/api-endpoints/element/get-related/412-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 193 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 08 Mar 2024 21:34:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:57 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/429-response-body.json b/docs/api-endpoints/element/get-related/429-response-body.json index 793a1e82..70ca31f8 100644 --- a/docs/api-endpoints/element/get-related/429-response-body.json +++ b/docs/api-endpoints/element/get-related/429-response-body.json @@ -2,5 +2,6 @@ "type": "429-too-many-requests", "title": "Too Many Requests", "status": "429", + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "The client sent too many requests in a given timeframe; rate limiting is active." } \ No newline at end of file diff --git a/docs/api-endpoints/element/get-related/429-response-header.txt b/docs/api-endpoints/element/get-related/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/get-related/429-response-header.txt +++ b/docs/api-endpoints/element/get-related/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/patch-element/204-response-header.txt b/docs/api-endpoints/element/patch-element/204-response-header.txt index b15369f3..b2b0e2ec 100644 --- a/docs/api-endpoints/element/patch-element/204-response-header.txt +++ b/docs/api-endpoints/element/patch-element/204-response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private -Date: Sun, 10 Mar 2024 15:09:01 GMT +Date: Fri, 02 Oct 2026 22:37:57 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/patch-element/401-response-body.json b/docs/api-endpoints/element/patch-element/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/patch-element/401-response-body.json +++ b/docs/api-endpoints/element/patch-element/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/patch-element/401-response-header.txt b/docs/api-endpoints/element/patch-element/401-response-header.txt index 8a088f12..cb9c51f6 100644 --- a/docs/api-endpoints/element/patch-element/401-response-header.txt +++ b/docs/api-endpoints/element/patch-element/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 21:22:18 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:02:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/patch-element/404-response-body.json b/docs/api-endpoints/element/patch-element/404-response-body.json index d2abaadb..0e06dd51 100644 --- a/docs/api-endpoints/element/patch-element/404-response-body.json +++ b/docs/api-endpoints/element/patch-element/404-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/404/not-found", "title": "Not found", "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested element was not found." } \ No newline at end of file diff --git a/docs/api-endpoints/element/patch-element/404-response-header.txt b/docs/api-endpoints/element/patch-element/404-response-header.txt index 8a088f12..d575d2ec 100644 --- a/docs/api-endpoints/element/patch-element/404-response-header.txt +++ b/docs/api-endpoints/element/patch-element/404-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 177 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 21:22:18 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:57 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/patch-element/412-response-body.json b/docs/api-endpoints/element/patch-element/412-response-body.json index 4c3d4ecf..216a1e4c 100644 --- a/docs/api-endpoints/element/patch-element/412-response-body.json +++ b/docs/api-endpoints/element/patch-element/412-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/412/precondition-failed", "title": "Precondition Failed", "status": 412, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Precondition does not match." } \ No newline at end of file diff --git a/docs/api-endpoints/element/patch-element/412-response-header.txt b/docs/api-endpoints/element/patch-element/412-response-header.txt index 3ce2f21e..bde4f0e4 100644 --- a/docs/api-endpoints/element/patch-element/412-response-header.txt +++ b/docs/api-endpoints/element/patch-element/412-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 193 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 08 Mar 2024 21:34:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:57 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/patch-element/429-response-body.json b/docs/api-endpoints/element/patch-element/429-response-body.json index 4555b0be..d1552ef4 100644 --- a/docs/api-endpoints/element/patch-element/429-response-body.json +++ b/docs/api-endpoints/element/patch-element/429-response-body.json @@ -2,5 +2,6 @@ "type": "401-unauthorized", "title": "Request does not contain valid token, or anonymous user is disabled.", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "" } \ No newline at end of file diff --git a/docs/api-endpoints/element/patch-element/429-response-header.txt b/docs/api-endpoints/element/patch-element/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/patch-element/429-response-header.txt +++ b/docs/api-endpoints/element/patch-element/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/post-element/204-response-header.txt b/docs/api-endpoints/element/post-element/204-response-header.txt index 8dc7fd05..d2f52675 100644 --- a/docs/api-endpoints/element/post-element/204-response-header.txt +++ b/docs/api-endpoints/element/post-element/204-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 0 Content-Type: text/html; charset=UTF-8 -Date: Mon, 09 Oct 2023 21:22:17 GMT -Location: /67d1a1d5-243a-468f-b993-2bbe2e756194 -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT +Location: /94602911-72e6-4d88-b8e7-478a874ca1b5 X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/post-element/400-response-body.json b/docs/api-endpoints/element/post-element/400-response-body.json index e55923cb..e606f2ec 100644 --- a/docs/api-endpoints/element/post-element/400-response-body.json +++ b/docs/api-endpoints/element/post-element/400-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/400/missing-property", "title": "Missing property", "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Endpoint requires that the request contains property 'type' to be set to a valid type." } \ No newline at end of file diff --git a/docs/api-endpoints/element/post-element/400-response-header.txt b/docs/api-endpoints/element/post-element/400-response-header.txt index fc37a46f..5e6b022a 100644 --- a/docs/api-endpoints/element/post-element/400-response-header.txt +++ b/docs/api-endpoints/element/post-element/400-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 245 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 21:22:17 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/post-element/401-response-body.json b/docs/api-endpoints/element/post-element/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/post-element/401-response-body.json +++ b/docs/api-endpoints/element/post-element/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/post-element/401-response-header.txt b/docs/api-endpoints/element/post-element/401-response-header.txt index 8a088f12..57fc921a 100644 --- a/docs/api-endpoints/element/post-element/401-response-header.txt +++ b/docs/api-endpoints/element/post-element/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 21:22:18 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:03:00 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/post-element/429-response-body.json b/docs/api-endpoints/element/post-element/429-response-body.json index 4555b0be..d1552ef4 100644 --- a/docs/api-endpoints/element/post-element/429-response-body.json +++ b/docs/api-endpoints/element/post-element/429-response-body.json @@ -2,5 +2,6 @@ "type": "401-unauthorized", "title": "Request does not contain valid token, or anonymous user is disabled.", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "" } \ No newline at end of file diff --git a/docs/api-endpoints/element/post-element/429-response-header.txt b/docs/api-endpoints/element/post-element/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/post-element/429-response-header.txt +++ b/docs/api-endpoints/element/post-element/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/post-index/204-response-header.txt b/docs/api-endpoints/element/post-index/204-response-header.txt index 48989d44..54cf4c49 100644 --- a/docs/api-endpoints/element/post-index/204-response-header.txt +++ b/docs/api-endpoints/element/post-index/204-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 0 Content-Type: text/html; charset=UTF-8 -Date: Mon, 09 Oct 2023 20:32:13 GMT -Location: /455a89b9-4ec7-4b02-b023-bcfbcbba9a9f -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT +Location: /5d7327d7-4a3b-45ff-bf6e-6600a1cea3be X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/post-index/400-response-body.json b/docs/api-endpoints/element/post-index/400-response-body.json index e55923cb..e606f2ec 100644 --- a/docs/api-endpoints/element/post-index/400-response-body.json +++ b/docs/api-endpoints/element/post-index/400-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/400/missing-property", "title": "Missing property", "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Endpoint requires that the request contains property 'type' to be set to a valid type." } \ No newline at end of file diff --git a/docs/api-endpoints/element/post-index/400-response-header.txt b/docs/api-endpoints/element/post-index/400-response-header.txt index b459d8ec..6c508bda 100644 --- a/docs/api-endpoints/element/post-index/400-response-header.txt +++ b/docs/api-endpoints/element/post-index/400-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 245 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 20:53:18 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/post-index/401-response-body.json b/docs/api-endpoints/element/post-index/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/post-index/401-response-body.json +++ b/docs/api-endpoints/element/post-index/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/post-index/401-response-header.txt b/docs/api-endpoints/element/post-index/401-response-header.txt index b459d8ec..9512643b 100644 --- a/docs/api-endpoints/element/post-index/401-response-header.txt +++ b/docs/api-endpoints/element/post-index/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 20:53:18 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:03:00 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/post-index/404-response-body.json b/docs/api-endpoints/element/post-index/404-response-body.json index d2abaadb..0e06dd51 100644 --- a/docs/api-endpoints/element/post-index/404-response-body.json +++ b/docs/api-endpoints/element/post-index/404-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/404/not-found", "title": "Not found", "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested element was not found." } \ No newline at end of file diff --git a/docs/api-endpoints/element/post-index/404-response-header.txt b/docs/api-endpoints/element/post-index/404-response-header.txt index 5c2d076c..7fd3402b 100644 --- a/docs/api-endpoints/element/post-index/404-response-header.txt +++ b/docs/api-endpoints/element/post-index/404-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 177 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 21:02:26 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/post-index/429-response-body.json b/docs/api-endpoints/element/post-index/429-response-body.json index 4555b0be..d1552ef4 100644 --- a/docs/api-endpoints/element/post-index/429-response-body.json +++ b/docs/api-endpoints/element/post-index/429-response-body.json @@ -2,5 +2,6 @@ "type": "401-unauthorized", "title": "Request does not contain valid token, or anonymous user is disabled.", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "" } \ No newline at end of file diff --git a/docs/api-endpoints/element/post-index/429-response-header.txt b/docs/api-endpoints/element/post-index/429-response-header.txt index 4cac8ac5..9ff1700c 100644 --- a/docs/api-endpoints/element/post-index/429-response-header.txt +++ b/docs/api-endpoints/element/post-index/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * +Access-Control-Allow-Headers: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/element/put-element/204-response-header.txt b/docs/api-endpoints/element/put-element/204-response-header.txt index 3ec9b476..8ebf9115 100644 --- a/docs/api-endpoints/element/put-element/204-response-header.txt +++ b/docs/api-endpoints/element/put-element/204-response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private -Date: Sun, 10 Mar 2024 15:24:31 GMT +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/put-element/401-response-body.json b/docs/api-endpoints/element/put-element/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/element/put-element/401-response-body.json +++ b/docs/api-endpoints/element/put-element/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/element/put-element/401-response-header.txt b/docs/api-endpoints/element/put-element/401-response-header.txt index 8a088f12..57fc921a 100644 --- a/docs/api-endpoints/element/put-element/401-response-header.txt +++ b/docs/api-endpoints/element/put-element/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 21:22:18 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:03:00 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/put-element/404-response-body.json b/docs/api-endpoints/element/put-element/404-response-body.json index d2abaadb..0e06dd51 100644 --- a/docs/api-endpoints/element/put-element/404-response-body.json +++ b/docs/api-endpoints/element/put-element/404-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/404/not-found", "title": "Not found", "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested element was not found." } \ No newline at end of file diff --git a/docs/api-endpoints/element/put-element/404-response-header.txt b/docs/api-endpoints/element/put-element/404-response-header.txt index 8a088f12..7a8b826a 100644 --- a/docs/api-endpoints/element/put-element/404-response-header.txt +++ b/docs/api-endpoints/element/put-element/404-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 177 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 09 Oct 2023 21:22:18 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/put-element/412-response-body.json b/docs/api-endpoints/element/put-element/412-response-body.json index 4c3d4ecf..216a1e4c 100644 --- a/docs/api-endpoints/element/put-element/412-response-body.json +++ b/docs/api-endpoints/element/put-element/412-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/412/precondition-failed", "title": "Precondition Failed", "status": 412, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Precondition does not match." } \ No newline at end of file diff --git a/docs/api-endpoints/element/put-element/412-response-header.txt b/docs/api-endpoints/element/put-element/412-response-header.txt index 3ce2f21e..8c3c31cb 100644 --- a/docs/api-endpoints/element/put-element/412-response-header.txt +++ b/docs/api-endpoints/element/put-element/412-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT Cache-Control: no-cache, private +Content-Length: 193 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 08 Mar 2024 21:34:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/element/put-element/429-response-body.json b/docs/api-endpoints/element/put-element/429-response-body.json index 4555b0be..d1552ef4 100644 --- a/docs/api-endpoints/element/put-element/429-response-body.json +++ b/docs/api-endpoints/element/put-element/429-response-body.json @@ -2,5 +2,6 @@ "type": "401-unauthorized", "title": "Request does not contain valid token, or anonymous user is disabled.", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "" } \ No newline at end of file diff --git a/docs/api-endpoints/element/put-element/429-response-header.txt b/docs/api-endpoints/element/put-element/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/element/put-element/429-response-header.txt +++ b/docs/api-endpoints/element/put-element/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/error/get-400-bad-content/200-response-header.txt b/docs/api-endpoints/error/get-400-bad-content/200-response-header.txt index 4f1c1c48..00a74808 100644 --- a/docs/api-endpoints/error/get-400-bad-content/200-response-header.txt +++ b/docs/api-endpoints/error/get-400-bad-content/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 680 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:06:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-400-forbidden-property/200-response-header.txt b/docs/api-endpoints/error/get-400-forbidden-property/200-response-header.txt index 102706a7..51cb58f4 100644 --- a/docs/api-endpoints/error/get-400-forbidden-property/200-response-header.txt +++ b/docs/api-endpoints/error/get-400-forbidden-property/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 723 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:12:04 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-400-incomplete-mutual-dependency/200-response-header.txt b/docs/api-endpoints/error/get-400-incomplete-mutual-dependency/200-response-header.txt index b9bb3c0e..9f4a6dae 100644 --- a/docs/api-endpoints/error/get-400-incomplete-mutual-dependency/200-response-header.txt +++ b/docs/api-endpoints/error/get-400-incomplete-mutual-dependency/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 785 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:12:05 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-400-missing-property/200-response-header.txt b/docs/api-endpoints/error/get-400-missing-property/200-response-header.txt index b9bb3c0e..fd7898a9 100644 --- a/docs/api-endpoints/error/get-400-missing-property/200-response-header.txt +++ b/docs/api-endpoints/error/get-400-missing-property/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 667 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:12:05 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:58 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-400-reserved-identifier/200-response-header.txt b/docs/api-endpoints/error/get-400-reserved-identifier/200-response-header.txt index 4f1c1c48..4e01b096 100644 --- a/docs/api-endpoints/error/get-400-reserved-identifier/200-response-header.txt +++ b/docs/api-endpoints/error/get-400-reserved-identifier/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 677 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:06:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-400-reserved-type.md b/docs/api-endpoints/error/get-400-reserved-type.md new file mode 100644 index 00000000..0c806667 --- /dev/null +++ b/docs/api-endpoints/error/get-400-reserved-type.md @@ -0,0 +1,21 @@ +# GET` /error/400/reserved-type`Get Details for Error 400 Reserved Type Endpoint + +## Request Example + +```bash +curl https://api.localhost/error/400/reserved-type +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./get-400-reserved-type/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./get-400-reserved-type/200-response-body.txt ':include :type=code') + + diff --git a/docs/api-endpoints/error/get-400-reserved-type/200-response-body.txt b/docs/api-endpoints/error/get-400-reserved-type/200-response-body.txt new file mode 100644 index 00000000..d7257413 --- /dev/null +++ b/docs/api-endpoints/error/get-400-reserved-type/200-response-body.txt @@ -0,0 +1,15 @@ + _____ _ _ _ _ ____ ___ + | ____|_ __ ___ | |__ ___ _ __ | \ | | _____ ___ _ ___ / \ | _ \_ _| + | _| | '_ ` _ \| '_ \ / _ \ '__| | \| |/ _ \ \/ / | | / __| / _ \ | |_) | | + | |___| | | | | | |_) | __/ | | |\ | __/⟩ ⟨| |_| \__ \ / ___ \| __/| | + |_____|_| |_| |_|_.__/ \___|_| |_| \_|\___/_/\_\\__,_|___/ /_/ \_\_| |___| + + + Error 400 - Reserved Type + + The exception is thrown when a type is reserved. + + Link to the documentation: https://ember-nexus.github.io/api + + Link to http.dev's explanation of the 400 error code: https://http.dev/400 + diff --git a/docs/api-endpoints/error/get-400-reserved-type/200-response-header.txt b/docs/api-endpoints/error/get-400-reserved-type/200-response-header.txt new file mode 100644 index 00000000..33fdbad3 --- /dev/null +++ b/docs/api-endpoints/error/get-400-reserved-type/200-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE +Cache-Control: no-cache, private +Content-Type: text/plain; charset=utf-8 +Date: Sat, 16 Sep 2023 14:06:53 GMT +Transfer-Encoding: chunked +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-401-unauthorized/200-response-header.txt b/docs/api-endpoints/error/get-401-unauthorized/200-response-header.txt index 4f1c1c48..1be3cb18 100644 --- a/docs/api-endpoints/error/get-401-unauthorized/200-response-header.txt +++ b/docs/api-endpoints/error/get-401-unauthorized/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 651 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:06:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-403-forbidden/200-response-header.txt b/docs/api-endpoints/error/get-403-forbidden/200-response-header.txt index 9a3a1297..9daf844c 100644 --- a/docs/api-endpoints/error/get-403-forbidden/200-response-header.txt +++ b/docs/api-endpoints/error/get-403-forbidden/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 840 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:12:06 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-404-not-found/200-response-header.txt b/docs/api-endpoints/error/get-404-not-found/200-response-header.txt index 4f1c1c48..6c723598 100644 --- a/docs/api-endpoints/error/get-404-not-found/200-response-header.txt +++ b/docs/api-endpoints/error/get-404-not-found/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 891 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:06:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-408-request-timeout.md b/docs/api-endpoints/error/get-408-request-timeout.md new file mode 100644 index 00000000..18a8594d --- /dev/null +++ b/docs/api-endpoints/error/get-408-request-timeout.md @@ -0,0 +1,21 @@ +# GET` /error/408/request-timeout`Get Details for Error 408 Request Timeout Endpoint + +## Request Example + +```bash +curl https://api.localhost/error/408/request-timeout +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./get-408-request-timeout/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./get-408-request-timeout/200-response-body.txt ':include :type=code') + + diff --git a/docs/api-endpoints/error/get-408-request-timeout/200-response-body.txt b/docs/api-endpoints/error/get-408-request-timeout/200-response-body.txt new file mode 100644 index 00000000..4e5d38fd --- /dev/null +++ b/docs/api-endpoints/error/get-408-request-timeout/200-response-body.txt @@ -0,0 +1,16 @@ + _____ _ _ _ _ ____ ___ + | ____|_ __ ___ | |__ ___ _ __ | \ | | _____ ___ _ ___ / \ | _ \_ _| + | _| | '_ ` _ \| '_ \ / _ \ '__| | \| |/ _ \ \/ / | | / __| / _ \ | |_) | | + | |___| | | | | | |_) | __/ | | |\ | __/⟩ ⟨| |_| \__ \ / ___ \| __/| | + |_____|_| |_| |_|_.__/ \___|_| |_| \_|\___/_/\_\\__,_|___/ /_/ \_\_| |___| + + + Error 408 - Request Timeout + + The HTTP 408 Request Timeout client error response status code indicates that the server did not receive the complete + request body, e.g. because the connection was interrupted or because the request body was not sent within the time + limit of the server. Retry the request, if necessary with a smaller request body, e.g. by uploading smaller chunks. + + Link to the documentation: https://ember-nexus.github.io/api + + Link to http.dev's explanation of the 408 error code: https://http.dev/408 diff --git a/docs/api-endpoints/error/get-408-request-timeout/200-response-header.txt b/docs/api-endpoints/error/get-408-request-timeout/200-response-header.txt new file mode 100644 index 00000000..9df31250 --- /dev/null +++ b/docs/api-endpoints/error/get-408-request-timeout/200-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: GET, HEAD, OPTIONS +Cache-Control: no-cache, private +Content-Length: 935 +Content-Type: text/plain; charset=utf-8 +Date: Fri, 02 Oct 2026 22:37:59 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-412-precondition-failed/200-response-header.txt b/docs/api-endpoints/error/get-412-precondition-failed/200-response-header.txt index b9bb3c0e..e6a7f7c0 100644 --- a/docs/api-endpoints/error/get-412-precondition-failed/200-response-header.txt +++ b/docs/api-endpoints/error/get-412-precondition-failed/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 618 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:12:05 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-500-internal-server-error/200-response-header.txt b/docs/api-endpoints/error/get-500-internal-server-error/200-response-header.txt index 525ecc8f..944184bb 100644 --- a/docs/api-endpoints/error/get-500-internal-server-error/200-response-header.txt +++ b/docs/api-endpoints/error/get-500-internal-server-error/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 827 Content-Type: text/plain; charset=utf-8 -Date: Fri, 08 Mar 2024 19:07:41 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-501-not-implemented/200-response-header.txt b/docs/api-endpoints/error/get-501-not-implemented/200-response-header.txt index 4f1c1c48..ce69e526 100644 --- a/docs/api-endpoints/error/get-501-not-implemented/200-response-header.txt +++ b/docs/api-endpoints/error/get-501-not-implemented/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 652 Content-Type: text/plain; charset=utf-8 -Date: Sat, 16 Sep 2023 14:06:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:37:59 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/error/get-503-service-unavailable.md b/docs/api-endpoints/error/get-503-service-unavailable.md new file mode 100644 index 00000000..370c82e2 --- /dev/null +++ b/docs/api-endpoints/error/get-503-service-unavailable.md @@ -0,0 +1,21 @@ +# GET` /error/503/service-unavailable`Get Details for Error 503 Service Unavailable Endpoint + +## Request Example + +```bash +curl https://api.localhost/error/503/service-unavailable +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./get-503-service-unavailable/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./get-503-service-unavailable/200-response-body.txt ':include :type=code') + + diff --git a/docs/api-endpoints/error/get-503-service-unavailable/200-response-body.txt b/docs/api-endpoints/error/get-503-service-unavailable/200-response-body.txt new file mode 100644 index 00000000..0b718162 --- /dev/null +++ b/docs/api-endpoints/error/get-503-service-unavailable/200-response-body.txt @@ -0,0 +1,16 @@ + _____ _ _ _ _ ____ ___ + | ____|_ __ ___ | |__ ___ _ __ | \ | | _____ ___ _ ___ / \ | _ \_ _| + | _| | '_ ` _ \| '_ \ / _ \ '__| | \| |/ _ \ \/ / | | / __| / _ \ | |_) | | + | |___| | | | | | |_) | __/ | | |\ | __/⟩ ⟨| |_| \__ \ / ___ \| __/| | + |_____|_| |_| |_|_.__/ \___|_| |_| \_|\___/_/\_\\__,_|___/ /_/ \_\_| |___| + + + Error 503 - Service Unavailable + + The HTTP 503 Service Unavailable server error response status code indicates that the server is not ready to handle + the request, e.g. because it is overloaded or because a component of the service is not reachable. Retry the request + after a short pause. + + Link to the documentation: https://ember-nexus.github.io/api + + Link to http.dev's explanation of the 503 error code: https://http.dev/503 diff --git a/docs/api-endpoints/error/get-503-service-unavailable/200-response-header.txt b/docs/api-endpoints/error/get-503-service-unavailable/200-response-header.txt new file mode 100644 index 00000000..7b39e988 --- /dev/null +++ b/docs/api-endpoints/error/get-503-service-unavailable/200-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: GET, HEAD, OPTIONS +Cache-Control: no-cache, private +Content-Length: 844 +Content-Type: text/plain; charset=utf-8 +Date: Fri, 02 Oct 2026 22:37:59 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/delete-element-file.md b/docs/api-endpoints/file/delete-element-file.md index 5553b308..acfb20da 100644 --- a/docs/api-endpoints/file/delete-element-file.md +++ b/docs/api-endpoints/file/delete-element-file.md @@ -1,4 +1,24 @@ -# 🚧 DELETE` //file`Delete Element File Endpoint +# DELETE` //file`Delete Element File Endpoint -!> **Currently not implemented.** -This feature is reserved for the version [0.2.0](https://github.com/ember-nexus/api/milestone/1). +Deletes the file associated with an element. + +## Request Example + +```bash +curl \ + -X DELETE + -H "Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc" \ + https://api.localhost/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac/file +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./delete-element-file/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./delete-element-file/200-response-body.json ':include :type=code') diff --git a/docs/api-endpoints/file/delete-element-file/204-response-header.txt b/docs/api-endpoints/file/delete-element-file/204-response-header.txt new file mode 100644 index 00000000..5f89492b --- /dev/null +++ b/docs/api-endpoints/file/delete-element-file/204-response-header.txt @@ -0,0 +1,8 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Date: Fri, 02 Oct 2026 22:37:59 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old/401-response-body.json b/docs/api-endpoints/file/delete-element-file/401-response-body.json similarity index 84% rename from docs/api-endpoints/user/post-change-password-old/401-response-body.json rename to docs/api-endpoints/file/delete-element-file/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/user/post-change-password-old/401-response-body.json +++ b/docs/api-endpoints/file/delete-element-file/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/file/delete-element-file/401-response-header.txt b/docs/api-endpoints/file/delete-element-file/401-response-header.txt new file mode 100644 index 00000000..fb2c55ad --- /dev/null +++ b/docs/api-endpoints/file/delete-element-file/401-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 373 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 23:03:01 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/delete-element-file/404-response-body.json b/docs/api-endpoints/file/delete-element-file/404-response-body.json new file mode 100644 index 00000000..0e06dd51 --- /dev/null +++ b/docs/api-endpoints/file/delete-element-file/404-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/404/not-found", + "title": "Not found", + "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested element was not found." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/delete-element-file/404-response-header.txt b/docs/api-endpoints/file/delete-element-file/404-response-header.txt new file mode 100644 index 00000000..569557f9 --- /dev/null +++ b/docs/api-endpoints/file/delete-element-file/404-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 177 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:37:59 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file.md b/docs/api-endpoints/file/get-element-file.md index cff9779d..8d8ff95b 100644 --- a/docs/api-endpoints/file/get-element-file.md +++ b/docs/api-endpoints/file/get-element-file.md @@ -1,4 +1,23 @@ -# 🚧 GET` //file`Get Element File Endpoint +# GET` //file`Get Element File Endpoint -!> **Currently not implemented.** -This feature is reserved for the version [0.2.0](https://github.com/ember-nexus/api/milestone/1). +Returns the file associated with an element. + +## Request Example + +```bash +curl \ + -H "Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc" \ + https://api.localhost/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac/file +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./get-element-file/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./get-element-file/200-response-body.json ':include :type=code') diff --git a/docs/api-endpoints/file/get-element-file/200-if-range-mismatch-response-body.txt b/docs/api-endpoints/file/get-element-file/200-if-range-mismatch-response-body.txt new file mode 100644 index 00000000..fac6cd6e --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/200-if-range-mismatch-response-body.txt @@ -0,0 +1 @@ +Hello, Ember Nexus! \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/200-if-range-mismatch-response-header.txt b/docs/api-endpoints/file/get-element-file/200-if-range-mismatch-response-header.txt new file mode 100644 index 00000000..1b4a99a8 --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/200-if-range-mismatch-response-header.txt @@ -0,0 +1,15 @@ +Accept-Ranges: bytes +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Disposition: attachment; filename=get-element-file-if-range-mismatch.txt +Content-Length: 19 +Content-Type: text/plain; charset=UTF-8 +Date: Fri, 02 Oct 2026 22:38:00 GMT +Etag: "afDkPr56f4S" +Repr-Digest: sha-256=:n6JhFCAJB2SKrVzEZIBGHLJy7OJDYDEeTHh0rdG1hD4=: +X-Content-Type-Options: nosniff +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/200-response-header.txt b/docs/api-endpoints/file/get-element-file/200-response-header.txt new file mode 100644 index 00000000..e0ecbdcc --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/200-response-header.txt @@ -0,0 +1,15 @@ +Accept-Ranges: bytes +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Disposition: attachment; filename=Rose.jpg +Content-Length: 138937 +Content-Type: image/jpeg +Date: Fri, 02 Oct 2026 22:37:59 GMT +Etag: "WtYtAaTJWIv" +Repr-Digest: sha-256=:cSS7oKhtzBDhtceO+Wi5Lh/mgcFtDy7J81sOhEjBpMA=: +X-Content-Type-Options: nosniff +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/206-if-range-match-response-body.txt b/docs/api-endpoints/file/get-element-file/206-if-range-match-response-body.txt new file mode 100644 index 00000000..d0ac5a3c --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/206-if-range-match-response-body.txt @@ -0,0 +1 @@ +Ember \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/206-if-range-match-response-header.txt b/docs/api-endpoints/file/get-element-file/206-if-range-match-response-header.txt new file mode 100644 index 00000000..6c4c9a99 --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/206-if-range-match-response-header.txt @@ -0,0 +1,16 @@ +Accept-Ranges: bytes +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Disposition: attachment; filename=get-element-file-if-range-match.txt +Content-Length: 5 +Content-Range: bytes 7-11/19 +Content-Type: text/plain; charset=UTF-8 +Date: Fri, 02 Oct 2026 22:38:00 GMT +Etag: "NrYAbY2j41Y" +Repr-Digest: sha-256=:n6JhFCAJB2SKrVzEZIBGHLJy7OJDYDEeTHh0rdG1hD4=: +X-Content-Type-Options: nosniff +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/206-response-header.txt b/docs/api-endpoints/file/get-element-file/206-response-header.txt new file mode 100644 index 00000000..15f6b28e --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/206-response-header.txt @@ -0,0 +1,16 @@ +Accept-Ranges: bytes +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Disposition: attachment; filename=Rose.jpg +Content-Length: 100 +Content-Range: bytes 0-99/138937 +Content-Type: image/jpeg +Date: Fri, 02 Oct 2026 22:37:59 GMT +Etag: "WtYtAaTJWIv" +Repr-Digest: sha-256=:cSS7oKhtzBDhtceO+Wi5Lh/mgcFtDy7J81sOhEjBpMA=: +X-Content-Type-Options: nosniff +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/400-response-body.json b/docs/api-endpoints/file/get-element-file/400-response-body.json new file mode 100644 index 00000000..beec7404 --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/400-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/400/bad-content", + "title": "Bad content", + "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Could not parse 'Range' header: 'bytes=not-a-valid-range'. Only a single range of the form 'bytes=-', 'bytes=-' or 'bytes=-' is supported." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/400-response-header.txt b/docs/api-endpoints/file/get-element-file/400-response-header.txt new file mode 100644 index 00000000..7a5bc6a9 --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/400-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 320 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:00 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token-old/401-response-body.json b/docs/api-endpoints/file/get-element-file/401-response-body.json similarity index 84% rename from docs/api-endpoints/user/post-token-old/401-response-body.json rename to docs/api-endpoints/file/get-element-file/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/user/post-token-old/401-response-body.json +++ b/docs/api-endpoints/file/get-element-file/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/401-response-header.txt b/docs/api-endpoints/file/get-element-file/401-response-header.txt new file mode 100644 index 00000000..fb2c55ad --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/401-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 373 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 23:03:01 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/404-response-body.json b/docs/api-endpoints/file/get-element-file/404-response-body.json new file mode 100644 index 00000000..0e06dd51 --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/404-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/404/not-found", + "title": "Not found", + "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested element was not found." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/404-response-header.txt b/docs/api-endpoints/file/get-element-file/404-response-header.txt new file mode 100644 index 00000000..7e333295 --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/404-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 177 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:00 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/416-response-body.json b/docs/api-endpoints/file/get-element-file/416-response-body.json new file mode 100644 index 00000000..a603f170 --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/416-response-body.json @@ -0,0 +1,9 @@ +{ + "type": "http://api/error/416/range-not-satisfiable", + "title": "Range Not Satisfiable", + "status": 416, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested range start (999999999) is beyond the end of the resource (138937 bytes long).", + "requestedStart": 999999999, + "totalLength": 138937 +} \ No newline at end of file diff --git a/docs/api-endpoints/file/get-element-file/416-response-header.txt b/docs/api-endpoints/file/get-element-file/416-response-header.txt new file mode 100644 index 00000000..586b3656 --- /dev/null +++ b/docs/api-endpoints/file/get-element-file/416-response-header.txt @@ -0,0 +1,11 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 305 +Content-Range: bytes */138937 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:00 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/patch-element-file.md b/docs/api-endpoints/file/patch-element-file.md deleted file mode 100644 index 572d65e2..00000000 --- a/docs/api-endpoints/file/patch-element-file.md +++ /dev/null @@ -1,4 +0,0 @@ -# 🚧 PATCH` //file`Update Element File Endpoint - -!> **Currently not implemented.** -This feature is reserved for the version [0.2.0](https://github.com/ember-nexus/api/milestone/1). diff --git a/docs/api-endpoints/file/post-element-file.md b/docs/api-endpoints/file/post-element-file.md index 9da7dae8..9b4588e3 100644 --- a/docs/api-endpoints/file/post-element-file.md +++ b/docs/api-endpoints/file/post-element-file.md @@ -1,4 +1,26 @@ -# 🚧 POST` //file`Create Element File Endpoint +# POST` //file`Create Element File Endpoint -!> **Currently not implemented.** -This feature is reserved for the version [0.2.0](https://github.com/ember-nexus/api/milestone/1). +Used to upload a smaller file directly to an element, or to create a resumable upload. + +This endpoint requires that the element does not yet have a file associated to it. + +## Request Example + +```bash +curl \ + -X POST + -H "Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc" \ + https://api.localhost/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac/file +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./post-element-file/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./post-element-file/200-response-body.json ':include :type=code') diff --git a/docs/api-endpoints/file/post-element-file/201-response-header.txt b/docs/api-endpoints/file/post-element-file/201-response-header.txt new file mode 100644 index 00000000..b4f0a945 --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/201-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 0 +Content-Type: text/html; charset=UTF-8 +Date: Fri, 02 Oct 2026 22:38:01 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/204-with-initial-data-response-header.txt b/docs/api-endpoints/file/post-element-file/204-with-initial-data-response-header.txt new file mode 100644 index 00000000..09803cd6 --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/204-with-initial-data-response-header.txt @@ -0,0 +1,13 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-store, private +Date: Fri, 02 Oct 2026 22:38:01 GMT +Expires: Sat, 03 Oct 2026 01:38:01 GMT +Location: /upload/90c4f77c-3755-4121-8c9f-a1cfd2c60d0f +Upload-Complete: ?0 +Upload-Limit: max-age=10800, max-size=10737418240, min-append-size=5242880, max-append-size=105906176 +Upload-Offset: 5242880 +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/204-without-initial-data-response-header.txt b/docs/api-endpoints/file/post-element-file/204-without-initial-data-response-header.txt new file mode 100644 index 00000000..5427aa62 --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/204-without-initial-data-response-header.txt @@ -0,0 +1,13 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-store, private +Date: Fri, 02 Oct 2026 22:38:01 GMT +Expires: Sat, 03 Oct 2026 01:38:01 GMT +Location: /upload/558b7515-d828-4d41-9132-bcea3a0610e1 +Upload-Complete: ?0 +Upload-Limit: max-age=10800, max-size=10737418240, min-append-size=5242880, max-append-size=105906176 +Upload-Offset: 0 +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/400-response-body.json b/docs/api-endpoints/file/post-element-file/400-response-body.json new file mode 100644 index 00000000..c310c02e --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/400-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/400/bad-content", + "title": "Bad content", + "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Could not verify upload: the digest declared in 'Repr-Digest' does not match the uploaded file's actual content." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/400-response-header.txt b/docs/api-endpoints/file/post-element-file/400-response-header.txt new file mode 100644 index 00000000..b7c43d5e --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/400-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 261 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:01 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/401-response-body.json b/docs/api-endpoints/file/post-element-file/401-response-body.json new file mode 100644 index 00000000..18c2b31a --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/401-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/401/unauthorized", + "title": "Unauthorized", + "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/401-response-header.txt b/docs/api-endpoints/file/post-element-file/401-response-header.txt new file mode 100644 index 00000000..597bcd98 --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/401-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 373 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 23:03:03 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/404-response-body.json b/docs/api-endpoints/file/post-element-file/404-response-body.json new file mode 100644 index 00000000..0e06dd51 --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/404-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/404/not-found", + "title": "Not found", + "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested element was not found." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/404-response-header.txt b/docs/api-endpoints/file/post-element-file/404-response-header.txt new file mode 100644 index 00000000..c3c3b32e --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/404-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 177 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:01 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/409-response-body.json b/docs/api-endpoints/file/post-element-file/409-response-body.json new file mode 100644 index 00000000..025eab1f --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/409-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/409/conflict", + "title": "Conflict", + "status": 409, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Element with id '6b1c2d3e-4f5a-4b6c-8d9e-0f1a2b3c4d5e' already has an associated file; can not create new file. Delete existing file first or replace it with PUT." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/post-element-file/409-response-header.txt b/docs/api-endpoints/file/post-element-file/409-response-header.txt new file mode 100644 index 00000000..a726255f --- /dev/null +++ b/docs/api-endpoints/file/post-element-file/409-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 305 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:02 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file.md b/docs/api-endpoints/file/put-element-file.md index 8017529f..88405bf2 100644 --- a/docs/api-endpoints/file/put-element-file.md +++ b/docs/api-endpoints/file/put-element-file.md @@ -1,4 +1,26 @@ -# 🚧 PUT` //file`Replace Element File Endpoint +# PUT` //file`Replace Element File Endpoint -!> **Currently not implemented.** -This feature is reserved for the version [0.2.0](https://github.com/ember-nexus/api/milestone/1). +Used to upload a smaller file directly to an element, or to create a resumable upload. + +If the element already has a file associated to it, it will get replaced by the new file. + +## Request Example + +```bash +curl \ + -X PUT + -H "Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc" \ + https://api.localhost/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac/file +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./put-element-file/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./put-element-file/200-response-body.json ':include :type=code') diff --git a/docs/api-endpoints/file/put-element-file/201-response-header.txt b/docs/api-endpoints/file/put-element-file/201-response-header.txt new file mode 100644 index 00000000..b9d8c2a0 --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/201-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 0 +Content-Type: text/html; charset=UTF-8 +Date: Fri, 02 Oct 2026 22:38:02 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file/204-with-initial-data-response-header.txt b/docs/api-endpoints/file/put-element-file/204-with-initial-data-response-header.txt new file mode 100644 index 00000000..9404443c --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/204-with-initial-data-response-header.txt @@ -0,0 +1,13 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-store, private +Date: Fri, 02 Oct 2026 22:38:02 GMT +Expires: Sat, 03 Oct 2026 01:38:02 GMT +Location: /upload/89e7a4e3-4d11-4892-9c04-02621c5f1554 +Upload-Complete: ?0 +Upload-Limit: max-age=10800, max-size=10737418240, min-append-size=5242880, max-append-size=105906176 +Upload-Offset: 5242880 +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file/204-without-initial-data-response-header.txt b/docs/api-endpoints/file/put-element-file/204-without-initial-data-response-header.txt new file mode 100644 index 00000000..7795b98c --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/204-without-initial-data-response-header.txt @@ -0,0 +1,13 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-store, private +Date: Fri, 02 Oct 2026 22:38:02 GMT +Expires: Sat, 03 Oct 2026 01:38:02 GMT +Location: /upload/8232297c-ff61-4fac-a0af-df7ac068abd4 +Upload-Complete: ?0 +Upload-Limit: max-age=10800, max-size=10737418240, min-append-size=5242880, max-append-size=105906176 +Upload-Offset: 0 +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file/400-response-body.json b/docs/api-endpoints/file/put-element-file/400-response-body.json new file mode 100644 index 00000000..c310c02e --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/400-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/400/bad-content", + "title": "Bad content", + "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Could not verify upload: the digest declared in 'Repr-Digest' does not match the uploaded file's actual content." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file/400-response-header.txt b/docs/api-endpoints/file/put-element-file/400-response-header.txt new file mode 100644 index 00000000..13dd7ffe --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/400-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 261 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:03 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file/401-response-body.json b/docs/api-endpoints/file/put-element-file/401-response-body.json new file mode 100644 index 00000000..18c2b31a --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/401-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/401/unauthorized", + "title": "Unauthorized", + "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file/401-response-header.txt b/docs/api-endpoints/file/put-element-file/401-response-header.txt new file mode 100644 index 00000000..64ad0066 --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/401-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 373 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 23:03:05 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file/404-response-body.json b/docs/api-endpoints/file/put-element-file/404-response-body.json new file mode 100644 index 00000000..0e06dd51 --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/404-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/404/not-found", + "title": "Not found", + "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested element was not found." +} \ No newline at end of file diff --git a/docs/api-endpoints/file/put-element-file/404-response-header.txt b/docs/api-endpoints/file/put-element-file/404-response-header.txt new file mode 100644 index 00000000..5961ffb9 --- /dev/null +++ b/docs/api-endpoints/file/put-element-file/404-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST, PUT +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT +Cache-Control: no-cache, private +Content-Length: 177 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:03 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/system/get-graph-structure/200-response-body.json b/docs/api-endpoints/system/get-graph-structure/200-response-body.json index 533bb720..af00ec53 100644 --- a/docs/api-endpoints/system/get-graph-structure/200-response-body.json +++ b/docs/api-endpoints/system/get-graph-structure/200-response-body.json @@ -10,6 +10,7 @@ "Tag", "Taxon", "Token", + "Upload", "User" ], "relationTypes": [ diff --git a/docs/api-endpoints/system/get-graph-structure/200-response-header.txt b/docs/api-endpoints/system/get-graph-structure/200-response-header.txt index d98fe42a..dbc50476 100644 --- a/docs/api-endpoints/system/get-graph-structure/200-response-header.txt +++ b/docs/api-endpoints/system/get-graph-structure/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 292 Content-Type: application/json; charset=utf-8 -Date: Sun, 08 Oct 2023 13:23:09 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:06 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/system/get-graph-structure/403-response-body.json b/docs/api-endpoints/system/get-graph-structure/403-response-body.json index ab91d2ac..0564eed9 100644 --- a/docs/api-endpoints/system/get-graph-structure/403-response-body.json +++ b/docs/api-endpoints/system/get-graph-structure/403-response-body.json @@ -1,6 +1,7 @@ { - "type": "http://api/error/403/forbidden", + "type": "http://api-different-configuration/error/403/forbidden", "title": "Forbidden", "status": 403, + "instance": "urn:uuid:9057aaff-b54c-413e-9b3a-8e886c4da4a9", "detail": "Requested endpoint, element or action is forbidden." } \ No newline at end of file diff --git a/docs/api-endpoints/system/get-graph-structure/403-response-header.txt b/docs/api-endpoints/system/get-graph-structure/403-response-header.txt index ff1216a1..747a3d95 100644 --- a/docs/api-endpoints/system/get-graph-structure/403-response-header.txt +++ b/docs/api-endpoints/system/get-graph-structure/403-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 220 Content-Type: application/problem+json; charset=utf-8 -Date: Sun, 08 Oct 2023 13:29:08 GMT -Transfer-Encoding: chunked +Date: Sun, 27 Sep 2026 08:41:32 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/system/get-instance-configuration/200-response-body.json b/docs/api-endpoints/system/get-instance-configuration/200-response-body.json index f71a086b..8e95790c 100644 --- a/docs/api-endpoints/system/get-instance-configuration/200-response-body.json +++ b/docs/api-endpoints/system/get-instance-configuration/200-response-body.json @@ -13,5 +13,11 @@ "expression": { "enabled": true, "maxLength": 10240 + }, + "file": { + "maxFileSizeInBytes": 10737418240, + "uploadExpiresInSecondsAfterFirstRequest": 10800, + "uploadMinChunkSizeInBytes": 5242880, + "uploadMaxChunkSizeInBytes": 105906176 } } \ No newline at end of file diff --git a/docs/api-endpoints/system/get-instance-configuration/200-response-header.txt b/docs/api-endpoints/system/get-instance-configuration/200-response-header.txt index d98fe42a..6d2a37e3 100644 --- a/docs/api-endpoints/system/get-instance-configuration/200-response-header.txt +++ b/docs/api-endpoints/system/get-instance-configuration/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 358 Content-Type: application/json; charset=utf-8 -Date: Sun, 08 Oct 2023 13:23:09 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:06 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/system/get-instance-configuration/403-response-body.json b/docs/api-endpoints/system/get-instance-configuration/403-response-body.json index ab91d2ac..08b35b58 100644 --- a/docs/api-endpoints/system/get-instance-configuration/403-response-body.json +++ b/docs/api-endpoints/system/get-instance-configuration/403-response-body.json @@ -1,6 +1,7 @@ { - "type": "http://api/error/403/forbidden", + "type": "http://api-different-configuration/error/403/forbidden", "title": "Forbidden", "status": 403, + "instance": "urn:uuid:2bac65f0-3b45-4584-9015-f19a4d1ca259", "detail": "Requested endpoint, element or action is forbidden." } \ No newline at end of file diff --git a/docs/api-endpoints/system/get-instance-configuration/403-response-header.txt b/docs/api-endpoints/system/get-instance-configuration/403-response-header.txt index ff1216a1..747a3d95 100644 --- a/docs/api-endpoints/system/get-instance-configuration/403-response-header.txt +++ b/docs/api-endpoints/system/get-instance-configuration/403-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 220 Content-Type: application/problem+json; charset=utf-8 -Date: Sun, 08 Oct 2023 13:29:08 GMT -Transfer-Encoding: chunked +Date: Sun, 27 Sep 2026 08:41:32 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/system/get-well-known-security-txt/200-response-body.txt b/docs/api-endpoints/system/get-well-known-security-txt/200-response-body.txt index 87497fc1..f6c8d747 100644 --- a/docs/api-endpoints/system/get-well-known-security-txt/200-response-body.txt +++ b/docs/api-endpoints/system/get-well-known-security-txt/200-response-body.txt @@ -1,2 +1 @@ -Contact: https://ember-nexus.dev/contact -Expires: 2026-01-01T00:00:00.000Z +hello world :D diff --git a/docs/api-endpoints/system/get-well-known-security-txt/200-response-header.txt b/docs/api-endpoints/system/get-well-known-security-txt/200-response-header.txt index 10efbed7..0f77fea3 100644 --- a/docs/api-endpoints/system/get-well-known-security-txt/200-response-header.txt +++ b/docs/api-endpoints/system/get-well-known-security-txt/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 15 Content-Type: text/plain; charset=utf-8 -Date: Fri, 22 Dec 2023 23:05:08 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:06 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/delete-upload.md b/docs/api-endpoints/upload/delete-upload.md new file mode 100644 index 00000000..43f6c2be --- /dev/null +++ b/docs/api-endpoints/upload/delete-upload.md @@ -0,0 +1,34 @@ +# DELETE` /upload/`Delete Upload Endpoint + +Deletes a resumable upload, discarding any chunks already uploaded for it. + +## Access Control + +Only the user who created the upload may delete it; for anyone else the upload responds as if it did not exist. + +Unlike `PATCH /upload/` and `HEAD /upload/`, this endpoint deliberately does **not** re-check access to +the upload's target element. Those two endpoints re-check it on every call, so an upload whose target became +inaccessible while it was in progress can no longer be inspected or continued. Deleting it is what remains +possible: an upload which can never be completed can always be cancelled by its owner, rather than being stuck +until `cron:delete-expired-uploads` eventually collects it. + +## Request Example + +```bash +curl \ + -X DELETE + -H "Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc" \ + https://api.localhost/upload/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./delete-upload/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./delete-upload/200-response-body.json ':include :type=code') diff --git a/docs/api-endpoints/upload/delete-upload/204-response-header.txt b/docs/api-endpoints/upload/delete-upload/204-response-header.txt new file mode 100644 index 00000000..508a6cc4 --- /dev/null +++ b/docs/api-endpoints/upload/delete-upload/204-response-header.txt @@ -0,0 +1,8 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Date: Fri, 02 Oct 2026 22:38:07 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/delete-upload/401-response-body.json b/docs/api-endpoints/upload/delete-upload/401-response-body.json new file mode 100644 index 00000000..18c2b31a --- /dev/null +++ b/docs/api-endpoints/upload/delete-upload/401-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/401/unauthorized", + "title": "Unauthorized", + "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." +} \ No newline at end of file diff --git a/docs/api-endpoints/upload/delete-upload/401-response-header.txt b/docs/api-endpoints/upload/delete-upload/401-response-header.txt new file mode 100644 index 00000000..05c6b449 --- /dev/null +++ b/docs/api-endpoints/upload/delete-upload/401-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Content-Length: 373 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 23:03:09 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/delete-upload/404-response-body.json b/docs/api-endpoints/upload/delete-upload/404-response-body.json new file mode 100644 index 00000000..0e06dd51 --- /dev/null +++ b/docs/api-endpoints/upload/delete-upload/404-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/404/not-found", + "title": "Not found", + "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested element was not found." +} \ No newline at end of file diff --git a/docs/api-endpoints/upload/delete-upload/404-response-header.txt b/docs/api-endpoints/upload/delete-upload/404-response-header.txt new file mode 100644 index 00000000..c9da4a5b --- /dev/null +++ b/docs/api-endpoints/upload/delete-upload/404-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Content-Length: 177 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:07 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/head-upload.md b/docs/api-endpoints/upload/head-upload.md new file mode 100644 index 00000000..58496926 --- /dev/null +++ b/docs/api-endpoints/upload/head-upload.md @@ -0,0 +1,32 @@ +# GET` /upload/`Head Upload Endpoint + +Queries the current state of the resumable upload. + +## Access Control + +Only the user who created the upload may query it. + +As with `PATCH /upload/`, access to the upload's target element is re-checked on every call, so an upload +whose target became inaccessible is reported as if it did not exist rather than appearing healthy. It can still be +cancelled with `DELETE /upload/`. + +## Request Example + +```bash +curl \ + -X HEAD + -H "Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc" \ + https://api.localhost/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac/file +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./head-upload/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./head-upload/200-response-body.json ':include :type=code') diff --git a/docs/api-endpoints/upload/head-upload/204-response-header.txt b/docs/api-endpoints/upload/head-upload/204-response-header.txt new file mode 100644 index 00000000..201ac990 --- /dev/null +++ b/docs/api-endpoints/upload/head-upload/204-response-header.txt @@ -0,0 +1,12 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-store, private +Date: Fri, 02 Oct 2026 22:38:08 GMT +Expires: Sat, 03 Oct 2026 01:38:08 GMT +Upload-Complete: ?0 +Upload-Limit: max-age=10800, max-size=10737418240, min-append-size=5242880, max-append-size=105906176 +Upload-Offset: 5242880 +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/head-upload/401-response-header.txt b/docs/api-endpoints/upload/head-upload/401-response-header.txt new file mode 100644 index 00000000..6a267483 --- /dev/null +++ b/docs/api-endpoints/upload/head-upload/401-response-header.txt @@ -0,0 +1,9 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 23:03:10 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/head-upload/404-response-header.txt b/docs/api-endpoints/upload/head-upload/404-response-header.txt new file mode 100644 index 00000000..64ddf38f --- /dev/null +++ b/docs/api-endpoints/upload/head-upload/404-response-header.txt @@ -0,0 +1,9 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:08 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload.md b/docs/api-endpoints/upload/patch-upload.md new file mode 100644 index 00000000..8926563d --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload.md @@ -0,0 +1,35 @@ +# PATCH` /upload/`Patch Upload Endpoint + +This endpoint is used to upload a new chunk to the resumable upload. + +The new chunk can be of zero length - acting similar to the `HEAD /upload/` endpoint, but also enabling the user +to complete an upload without transmitting additional chunks. + +## Access Control + +Only the user who created the upload may add chunks to it. + +Access to the upload's target element is re-checked on **every** chunk, not just when the upload is created. If +that access is revoked mid-upload, further chunks are rejected and the upload can no longer be completed; it can +still be cancelled with `DELETE /upload/`. + +## Request Example + +```bash +curl \ + -X PATCH + -H "Authorization: Bearer secret-token:PIPeJGUt7c00ENn8a5uDlc" \ + https://api.localhost/74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac/file +``` + + + +### **🟢 Success 200** + +
Response Headers
+ +[Response Body](./patch-upload/200-response-header.txt ':include :type=code') + +
Response Body
+ +[Response Body](./patch-upload/200-response-body.json ':include :type=code') diff --git a/docs/api-endpoints/upload/patch-upload/204-final-chunk-response-header.txt b/docs/api-endpoints/upload/patch-upload/204-final-chunk-response-header.txt new file mode 100644 index 00000000..9bb31efb --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/204-final-chunk-response-header.txt @@ -0,0 +1,12 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-store, private +Date: Fri, 02 Oct 2026 22:38:09 GMT +Expires: Sat, 03 Oct 2026 01:38:09 GMT +Upload-Complete: ?1 +Upload-Limit: max-age=10800, max-size=10737418240, min-append-size=5242880, max-append-size=105906176 +Upload-Offset: 10485760 +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/204-intermediate-chunk-response-header.txt b/docs/api-endpoints/upload/patch-upload/204-intermediate-chunk-response-header.txt new file mode 100644 index 00000000..b598d480 --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/204-intermediate-chunk-response-header.txt @@ -0,0 +1,12 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-store, private +Date: Fri, 02 Oct 2026 22:38:09 GMT +Expires: Sat, 03 Oct 2026 01:38:09 GMT +Upload-Complete: ?0 +Upload-Limit: max-age=10800, max-size=10737418240, min-append-size=5242880, max-append-size=105906176 +Upload-Offset: 10485760 +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/400-response-body.json b/docs/api-endpoints/upload/patch-upload/400-response-body.json new file mode 100644 index 00000000..c17c9129 --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/400-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/400/bad-content", + "title": "Bad content", + "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Could not verify upload: the declared digest does not match the uploaded file's actual content." +} \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/400-response-header.txt b/docs/api-endpoints/upload/patch-upload/400-response-header.txt new file mode 100644 index 00000000..be9808c1 --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/400-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Content-Length: 244 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:10 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/401-response-body.json b/docs/api-endpoints/upload/patch-upload/401-response-body.json new file mode 100644 index 00000000..18c2b31a --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/401-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/401/unauthorized", + "title": "Unauthorized", + "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." +} \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/401-response-header.txt b/docs/api-endpoints/upload/patch-upload/401-response-header.txt new file mode 100644 index 00000000..a6e07439 --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/401-response-header.txt @@ -0,0 +1,11 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Connection: close +Content-Length: 373 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 23:03:12 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/404-response-body.json b/docs/api-endpoints/upload/patch-upload/404-response-body.json new file mode 100644 index 00000000..0e06dd51 --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/404-response-body.json @@ -0,0 +1,7 @@ +{ + "type": "http://api/error/404/not-found", + "title": "Not found", + "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested element was not found." +} \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/404-response-header.txt b/docs/api-endpoints/upload/patch-upload/404-response-header.txt new file mode 100644 index 00000000..92ee0c29 --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/404-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Content-Length: 177 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:11 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/409-response-body.json b/docs/api-endpoints/upload/patch-upload/409-response-body.json new file mode 100644 index 00000000..e1b5d048 --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/409-response-body.json @@ -0,0 +1,9 @@ +{ + "type": "http://api/error/409/conflict", + "title": "Conflict", + "status": 409, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Offset from request does not match offset of resource.", + "expectedOffset": 5242880, + "providedOffset": 5242881 +} \ No newline at end of file diff --git a/docs/api-endpoints/upload/patch-upload/409-response-header.txt b/docs/api-endpoints/upload/patch-upload/409-response-header.txt new file mode 100644 index 00000000..76d6977a --- /dev/null +++ b/docs/api-endpoints/upload/patch-upload/409-response-header.txt @@ -0,0 +1,10 @@ +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, HEAD, OPTIONS, PATCH +Access-Control-Allow-Origin: * +Access-Control-Expose-Headers: ETag, Location +Allow: DELETE, HEAD, OPTIONS, PATCH +Cache-Control: no-cache, private +Content-Length: 247 +Content-Type: application/problem+json; charset=utf-8 +Date: Fri, 02 Oct 2026 22:38:10 GMT +X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/delete-token/204-response-header.txt b/docs/api-endpoints/user/delete-token/204-response-header.txt index 808ba93e..01a4723f 100644 --- a/docs/api-endpoints/user/delete-token/204-response-header.txt +++ b/docs/api-endpoints/user/delete-token/204-response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private -Date: Mon, 11 Dec 2023 12:05:26 GMT +Date: Fri, 02 Oct 2026 22:38:11 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/delete-token/401-response-body.json b/docs/api-endpoints/user/delete-token/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/user/delete-token/401-response-body.json +++ b/docs/api-endpoints/user/delete-token/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/user/delete-token/401-response-header.txt b/docs/api-endpoints/user/delete-token/401-response-header.txt index 4612bf2d..91c2fc0c 100644 --- a/docs/api-endpoints/user/delete-token/401-response-header.txt +++ b/docs/api-endpoints/user/delete-token/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 11 Dec 2023 12:03:46 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:03:13 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/delete-token/429-response-body.json b/docs/api-endpoints/user/delete-token/429-response-body.json index 793a1e82..70ca31f8 100644 --- a/docs/api-endpoints/user/delete-token/429-response-body.json +++ b/docs/api-endpoints/user/delete-token/429-response-body.json @@ -2,5 +2,6 @@ "type": "429-too-many-requests", "title": "Too Many Requests", "status": "429", + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "The client sent too many requests in a given timeframe; rate limiting is active." } \ No newline at end of file diff --git a/docs/api-endpoints/user/delete-token/429-response-header.txt b/docs/api-endpoints/user/delete-token/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/user/delete-token/429-response-header.txt +++ b/docs/api-endpoints/user/delete-token/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/user/get-me/200-response-header.txt b/docs/api-endpoints/user/get-me/200-response-header.txt index 7b0a7a3b..01e13561 100644 --- a/docs/api-endpoints/user/get-me/200-response-header.txt +++ b/docs/api-endpoints/user/get-me/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 312 Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 10:06:46 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:11 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/get-me/401-response-body.json b/docs/api-endpoints/user/get-me/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/user/get-me/401-response-body.json +++ b/docs/api-endpoints/user/get-me/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/user/get-me/401-response-header.txt b/docs/api-endpoints/user/get-me/401-response-header.txt index 97486c22..19798352 100644 --- a/docs/api-endpoints/user/get-me/401-response-header.txt +++ b/docs/api-endpoints/user/get-me/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, OPTIONS Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, OPTIONS Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Mon, 27 Nov 2023 17:32:45 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:03:13 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/get-me/429-response-body.json b/docs/api-endpoints/user/get-me/429-response-body.json index 12bcda51..d617c0ba 100644 --- a/docs/api-endpoints/user/get-me/429-response-body.json +++ b/docs/api-endpoints/user/get-me/429-response-body.json @@ -2,5 +2,6 @@ "type": "400-bad-request", "title": "Bad Request", "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Property 'user' must be set." } \ No newline at end of file diff --git a/docs/api-endpoints/user/get-me/429-response-header.txt b/docs/api-endpoints/user/get-me/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/user/get-me/429-response-header.txt +++ b/docs/api-endpoints/user/get-me/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/user/get-token/200-response-header.txt b/docs/api-endpoints/user/get-token/200-response-header.txt index 7b0a7a3b..dd50e28b 100644 --- a/docs/api-endpoints/user/get-token/200-response-header.txt +++ b/docs/api-endpoints/user/get-token/200-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 258 Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 10:06:46 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:11 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/get-token/401-response-body.json b/docs/api-endpoints/user/get-token/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/user/get-token/401-response-body.json +++ b/docs/api-endpoints/user/get-token/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/user/get-token/401-response-header.txt b/docs/api-endpoints/user/get-token/401-response-header.txt index 6bd2f6f1..91c2fc0c 100644 --- a/docs/api-endpoints/user/get-token/401-response-header.txt +++ b/docs/api-endpoints/user/get-token/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 17:26:23 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 23:03:13 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/get-token/403-response-body.json b/docs/api-endpoints/user/get-token/403-response-body.json index ab91d2ac..e609dd12 100644 --- a/docs/api-endpoints/user/get-token/403-response-body.json +++ b/docs/api-endpoints/user/get-token/403-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/403/forbidden", "title": "Forbidden", "status": 403, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested endpoint, element or action is forbidden." } \ No newline at end of file diff --git a/docs/api-endpoints/user/get-token/403-response-header.txt b/docs/api-endpoints/user/get-token/403-response-header.txt index 6bd2f6f1..4526fe6d 100644 --- a/docs/api-endpoints/user/get-token/403-response-header.txt +++ b/docs/api-endpoints/user/get-token/403-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 196 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 17:26:23 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:11 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old.md b/docs/api-endpoints/user/post-change-password-old.md deleted file mode 100644 index a1d1fcc3..00000000 --- a/docs/api-endpoints/user/post-change-password-old.md +++ /dev/null @@ -1,204 +0,0 @@ -# POST` /change-password`Change Password Endpoint (Old) - - - - -> [!WARNING] -> You are looking at deprecated documentation. -> The behavior described on this page will be removed in version 0.2.0. -> For the up-to-date version of the `POST /change-password` endpoint, see [POST /change-password](/api-endpoints/user/post-change-password.md). - -Endpoint allows changing the user's current password. - -This endpoint requires knowing the currently used password. - -Using auth tokens for this endpoint is optional; they are just used for rate limiting here. - -## Request Body - -The posted request must be a valid JSON document. - -The request must contain the following attributes: - -- `type`: Contains the value `ActionChangePassword`. No other types are currently allowed. -- `currentPassword`: The user's currently used password in plain text. -- `newPassword`: The user's new password in plain text. -- `data.`: By default, `data.email` must contain a new unique string. While not required, keeping the - content within 256 bytes is encouraged. Optional limits might be added at a later time. - The required identifier name is returned by the - [instance configuration endpoint](/api-endpoints/get-instance-configuration) and in error messages. - -> [!SECURITY] -> **Notice regarding passwords**: They can contain any string and will be hashed internally. Whitespace at the start or -> end of the password will **not** be removed, though it is discouraged. No password complexity checks are performed. - -```json -{ - "type": "ActionChangePassword", - "currentPassword": "1234", - "newPassword": "9876", - "data": { - "": "test@example.com" - } -} -``` - -## Request Example - -```bash -curl \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"type": "ActionChangePassword", "currentPassword": "1234", "newPassword": "9876", "data": {"email": "test@example.com"}}' \ - https://api.localhost/change-password -``` - - - -### **🟢 Success 204** - -
Response Headers
- -[Response Body](./post-change-password-old/204-response-header.txt ':include :type=code') - -Success response does not have a return body. The password is successfully changed, and creating new tokens require the -new password. - -### **🔴 Error 400** - -
Response Headers
- -[Response Body](./post-change-password-old/400-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-change-password-old/400-response-body.json ':include :type=code problem+json') - -### **🔴 Error 401** - -
Response Headers
- -[Response Body](./post-change-password-old/401-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-change-password-old/401-response-body.json ':include :type=code problem+json') - -### **🔴 Error 403** - -
Response Headers
- -[Response Body](./post-change-password-old/403-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-change-password-old/403-response-body.json ':include :type=code problem+json') - -### **🔴 Error 429** - -
Response Headers
- -[Response Body](./post-change-password-old/429-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-change-password-old/429-response-body.json ':include :type=code problem+json') - - - - - -## Internal Workflow - -Once the server receives such a request, it checks several things internally: - -
- - - - diff --git a/docs/api-endpoints/user/post-change-password-old/204-response-header.txt b/docs/api-endpoints/user/post-change-password-old/204-response-header.txt deleted file mode 100644 index 9b1af198..00000000 --- a/docs/api-endpoints/user/post-change-password-old/204-response-header.txt +++ /dev/null @@ -1,8 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Date: Fri, 29 Sep 2023 10:05:24 GMT -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old/400-response-body.json b/docs/api-endpoints/user/post-change-password-old/400-response-body.json deleted file mode 100644 index 381871a3..00000000 --- a/docs/api-endpoints/user/post-change-password-old/400-response-body.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "http://api/error/400/bad-content", - "title": "Bad content", - "status": 400, - "detail": "Endpoint expects property 'type' to be ActionChangePassword, got 'NotActionChangePassword'." -} \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old/400-response-header.txt b/docs/api-endpoints/user/post-change-password-old/400-response-header.txt deleted file mode 100644 index f447e880..00000000 --- a/docs/api-endpoints/user/post-change-password-old/400-response-header.txt +++ /dev/null @@ -1,10 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 29 Sep 2023 10:11:29 GMT -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old/401-response-header.txt b/docs/api-endpoints/user/post-change-password-old/401-response-header.txt deleted file mode 100644 index 837fda70..00000000 --- a/docs/api-endpoints/user/post-change-password-old/401-response-header.txt +++ /dev/null @@ -1,10 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 29 Sep 2023 10:14:53 GMT -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old/403-response-body.json b/docs/api-endpoints/user/post-change-password-old/403-response-body.json deleted file mode 100644 index ab91d2ac..00000000 --- a/docs/api-endpoints/user/post-change-password-old/403-response-body.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "http://api/error/403/forbidden", - "title": "Forbidden", - "status": 403, - "detail": "Requested endpoint, element or action is forbidden." -} \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old/403-response-header.txt b/docs/api-endpoints/user/post-change-password-old/403-response-header.txt deleted file mode 100644 index 835dcbcd..00000000 --- a/docs/api-endpoints/user/post-change-password-old/403-response-header.txt +++ /dev/null @@ -1,10 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 29 Sep 2023 17:33:00 GMT -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old/429-response-body.json b/docs/api-endpoints/user/post-change-password-old/429-response-body.json deleted file mode 100644 index 4555b0be..00000000 --- a/docs/api-endpoints/user/post-change-password-old/429-response-body.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "401-unauthorized", - "title": "Request does not contain valid token, or anonymous user is disabled.", - "status": 401, - "detail": "" -} \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password-old/429-response-header.txt b/docs/api-endpoints/user/post-change-password-old/429-response-header.txt deleted file mode 100644 index 4cac8ac5..00000000 --- a/docs/api-endpoints/user/post-change-password-old/429-response-header.txt +++ /dev/null @@ -1,9 +0,0 @@ -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE -Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE -Content-Type: application/json; charset=utf-8 -Cache-Control: no-cache, private -Date: Fri, 15 Sep 2023 08:03:41 GMT -Transfer-Encoding: chunked \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password.md b/docs/api-endpoints/user/post-change-password.md index c6c0a3de..484bba0b 100644 --- a/docs/api-endpoints/user/post-change-password.md +++ b/docs/api-endpoints/user/post-change-password.md @@ -3,11 +3,6 @@ -> [!NOTE] -> This endpoint's request body received a breaking change with version [0.1.6](https://github.com/ember-nexus/api/releases/tag/0.1.6). -> The previous variant is deprecated and will be removed in version 0.2.0. -> Link to the old documentation: [POST /change-password (old)](/api-endpoints/user/post-change-password-old.md). - Endpoint allows changing the user's current password. Knowledge of the currently used (old) password is required. ## Request Body diff --git a/docs/api-endpoints/user/post-change-password/204-response-header.txt b/docs/api-endpoints/user/post-change-password/204-response-header.txt index 9b1af198..e09621c3 100644 --- a/docs/api-endpoints/user/post-change-password/204-response-header.txt +++ b/docs/api-endpoints/user/post-change-password/204-response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private -Date: Fri, 29 Sep 2023 10:05:24 GMT +Date: Fri, 02 Oct 2026 22:38:11 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password/400-response-body.json b/docs/api-endpoints/user/post-change-password/400-response-body.json index d65e40af..70ef0eaf 100644 --- a/docs/api-endpoints/user/post-change-password/400-response-body.json +++ b/docs/api-endpoints/user/post-change-password/400-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/400/bad-content", "title": "Bad content", "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Endpoint expects property 'type' to be ActionChangePassword, got string 'NotActionChangePassword'." } \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password/400-response-header.txt b/docs/api-endpoints/user/post-change-password/400-response-header.txt index f447e880..4bc1a62a 100644 --- a/docs/api-endpoints/user/post-change-password/400-response-header.txt +++ b/docs/api-endpoints/user/post-change-password/400-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 247 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 29 Sep 2023 10:11:29 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:11 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password/401-response-body.json b/docs/api-endpoints/user/post-change-password/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/user/post-change-password/401-response-body.json +++ b/docs/api-endpoints/user/post-change-password/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password/401-response-header.txt b/docs/api-endpoints/user/post-change-password/401-response-header.txt index 837fda70..99169656 100644 --- a/docs/api-endpoints/user/post-change-password/401-response-header.txt +++ b/docs/api-endpoints/user/post-change-password/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 29 Sep 2023 10:14:53 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:11 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password/403-response-body.json b/docs/api-endpoints/user/post-change-password/403-response-body.json index ab91d2ac..e609dd12 100644 --- a/docs/api-endpoints/user/post-change-password/403-response-body.json +++ b/docs/api-endpoints/user/post-change-password/403-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/403/forbidden", "title": "Forbidden", "status": 403, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Requested endpoint, element or action is forbidden." } \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password/403-response-header.txt b/docs/api-endpoints/user/post-change-password/403-response-header.txt index 835dcbcd..3584598f 100644 --- a/docs/api-endpoints/user/post-change-password/403-response-header.txt +++ b/docs/api-endpoints/user/post-change-password/403-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 196 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 29 Sep 2023 17:33:00 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:12 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password/429-response-body.json b/docs/api-endpoints/user/post-change-password/429-response-body.json index 4555b0be..d1552ef4 100644 --- a/docs/api-endpoints/user/post-change-password/429-response-body.json +++ b/docs/api-endpoints/user/post-change-password/429-response-body.json @@ -2,5 +2,6 @@ "type": "401-unauthorized", "title": "Request does not contain valid token, or anonymous user is disabled.", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "" } \ No newline at end of file diff --git a/docs/api-endpoints/user/post-change-password/429-response-header.txt b/docs/api-endpoints/user/post-change-password/429-response-header.txt index 4cac8ac5..0f6ebffa 100644 --- a/docs/api-endpoints/user/post-change-password/429-response-header.txt +++ b/docs/api-endpoints/user/post-change-password/429-response-header.txt @@ -1,6 +1,6 @@ Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method +Access-Control-Allow-Headers: * Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, PATCH, DELETE Allow: GET, POST, OPTIONS, PUT, PATCH, DELETE Content-Type: application/json; charset=utf-8 diff --git a/docs/api-endpoints/user/post-register-old.md b/docs/api-endpoints/user/post-register-old.md deleted file mode 100644 index 439f1101..00000000 --- a/docs/api-endpoints/user/post-register-old.md +++ /dev/null @@ -1,169 +0,0 @@ -# POST` /register`Register New Account Endpoint (Old) - - - - -> [!WARNING] -> You are looking at deprecated documentation. -> The behavior described on this page will be removed in version 0.2.0. -> For the up-to-date version of the `POST /register` endpoint, see [POST /register](/api-endpoints/user/post-register.md). - -Endpoint for registering / creating new accounts. - -The endpoint can be disabled; see -[application configuration](/getting-started/configuration?id=application-configuration) for details. - -## Request Body - -The posted request must be a valid JSON document. - -The request must contain the following attributes: - -- `type`: Containing the content "User". No other values are currently possible. -- `password`: The plain text password of the new user. It can contain any string and will be hashed internally. - Whitespace at the start or end of the string will **not** be removed, though it is discouraged. - No password complexity check is performed. -- `data.`: By default, `data.email` must contain a new unique string. While not required, keeping the - content within 256 bytes is encouraged. Optional limits might be added at a later time. - The required identifier name is returned by the - [instance configuration endpoint](/api-endpoints/get-instance-configuration) and in error messages. - -```json -{ - "type": "User", - "password": "1234", - "data": { - "": "test@example.com" - } -} -``` - -## Request Example - -```bash -curl \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"type": "User", "password": "1234", "data": {"email": "test@example.com"}}' \ - https://api.localhost/register -``` - - - -### **🟢 Success 201** - -
Response Headers
- -[Response Body](./post-register-old/201-response-header.txt ':include :type=code') - -Success response does not have a return body. The location of the new user, containing the user's UUID, is written in -the `Location` header. - -### **🔴 Error 400** - -
Response Headers
- -[Response Body](./post-register-old/400-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-register-old/400-response-body.json ':include :type=code problem+json') - -### **🔴 Error 403** - -
Response Headers
- -[Response Body](./post-register-old/403-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-register-old/403-response-body.json ':include :type=code problem+json') - - - - - -## Internal Workflow - -Once the server receives such a request, it checks several things internally: - -
- - - - diff --git a/docs/api-endpoints/user/post-register-old/201-response-header.txt b/docs/api-endpoints/user/post-register-old/201-response-header.txt deleted file mode 100644 index 95d7bdaf..00000000 --- a/docs/api-endpoints/user/post-register-old/201-response-header.txt +++ /dev/null @@ -1,11 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: text/html; charset=UTF-8 -Date: Sat, 16 Sep 2023 12:40:24 GMT -Location: /a5f95955-1d24-43db-8832-f365e6a96dfa -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register-old/400-response-body.json b/docs/api-endpoints/user/post-register-old/400-response-body.json deleted file mode 100644 index ae00c917..00000000 --- a/docs/api-endpoints/user/post-register-old/400-response-body.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "http://api/error/400/bad-content", - "title": "Bad content", - "status": 400, - "detail": "Endpoint expects property 'type' to be User, got 'NotAUser'." -} \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register-old/400-response-header.txt b/docs/api-endpoints/user/post-register-old/400-response-header.txt deleted file mode 100644 index 95829776..00000000 --- a/docs/api-endpoints/user/post-register-old/400-response-header.txt +++ /dev/null @@ -1,10 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: application/problem+json; charset=utf-8 -Date: Sat, 16 Sep 2023 12:40:25 GMT -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register-old/403-response-body.json b/docs/api-endpoints/user/post-register-old/403-response-body.json deleted file mode 100644 index ab91d2ac..00000000 --- a/docs/api-endpoints/user/post-register-old/403-response-body.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "http://api/error/403/forbidden", - "title": "Forbidden", - "status": 403, - "detail": "Requested endpoint, element or action is forbidden." -} \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register-old/403-response-header.txt b/docs/api-endpoints/user/post-register-old/403-response-header.txt deleted file mode 100644 index eb031ae0..00000000 --- a/docs/api-endpoints/user/post-register-old/403-response-header.txt +++ /dev/null @@ -1,10 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: application/problem+json; charset=utf-8 -Date: Sat, 16 Sep 2023 12:55:27 GMT -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register.md b/docs/api-endpoints/user/post-register.md index 431deb6f..155d8ce9 100644 --- a/docs/api-endpoints/user/post-register.md +++ b/docs/api-endpoints/user/post-register.md @@ -3,11 +3,6 @@ -> [!NOTE] -> This endpoint's request body received a breaking change with version [0.1.6](https://github.com/ember-nexus/api/releases/tag/0.1.6). -> The previous variant is deprecated and will be removed in version 0.2.0. -> Link to the old documentation: [POST /register (old)](/api-endpoints/user/post-register-old.md). - Endpoint for registering / creating new accounts. The endpoint can be disabled; see diff --git a/docs/api-endpoints/user/post-register/201-response-header.txt b/docs/api-endpoints/user/post-register/201-response-header.txt index 95d7bdaf..92b48733 100644 --- a/docs/api-endpoints/user/post-register/201-response-header.txt +++ b/docs/api-endpoints/user/post-register/201-response-header.txt @@ -1,11 +1,11 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 0 Content-Type: text/html; charset=UTF-8 -Date: Sat, 16 Sep 2023 12:40:24 GMT -Location: /a5f95955-1d24-43db-8832-f365e6a96dfa -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:12 GMT +Location: /97483f8e-7db9-41d5-a0ae-ee24b1ee37d0 X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register/400-response-body.json b/docs/api-endpoints/user/post-register/400-response-body.json index f4c0a215..b1465e32 100644 --- a/docs/api-endpoints/user/post-register/400-response-body.json +++ b/docs/api-endpoints/user/post-register/400-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/400/bad-content", "title": "Bad content", "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Endpoint expects property 'type' to be User, got string 'NotAUser'." } \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register/400-response-header.txt b/docs/api-endpoints/user/post-register/400-response-header.txt index 95829776..cf4363b4 100644 --- a/docs/api-endpoints/user/post-register/400-response-header.txt +++ b/docs/api-endpoints/user/post-register/400-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 216 Content-Type: application/problem+json; charset=utf-8 -Date: Sat, 16 Sep 2023 12:40:25 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:12 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register/403-response-body.json b/docs/api-endpoints/user/post-register/403-response-body.json index ab91d2ac..c4b86c6e 100644 --- a/docs/api-endpoints/user/post-register/403-response-body.json +++ b/docs/api-endpoints/user/post-register/403-response-body.json @@ -1,6 +1,7 @@ { - "type": "http://api/error/403/forbidden", + "type": "http://api-different-configuration/error/403/forbidden", "title": "Forbidden", "status": 403, + "instance": "urn:uuid:7ade7fdf-f7f7-47a0-bd83-2ab01d68f36c", "detail": "Requested endpoint, element or action is forbidden." } \ No newline at end of file diff --git a/docs/api-endpoints/user/post-register/403-response-header.txt b/docs/api-endpoints/user/post-register/403-response-header.txt index eb031ae0..23e7338d 100644 --- a/docs/api-endpoints/user/post-register/403-response-header.txt +++ b/docs/api-endpoints/user/post-register/403-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 220 Content-Type: application/problem+json; charset=utf-8 -Date: Sat, 16 Sep 2023 12:55:27 GMT -Transfer-Encoding: chunked +Date: Sun, 27 Sep 2026 08:41:32 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token-old.md b/docs/api-endpoints/user/post-token-old.md deleted file mode 100644 index 6ddc755d..00000000 --- a/docs/api-endpoints/user/post-token-old.md +++ /dev/null @@ -1,164 +0,0 @@ -# POST` /token`Create Token Endpoint (Old) - - - - -> [!WARNING] -> You are looking at deprecated documentation. -> The behavior described on this page will be removed in version 0.2.0. -> For the up-to-date version of the `POST /token` endpoint, see [POST /token](/api-endpoints/user/post-token.md). - -Endpoint for creating new tokens. - -The endpoint can be configured; see -[application configuration](/getting-started/configuration?id=application-configuration) for details. - -## Request Body - -The posted request must be a valid JSON document. - -The request must contain the following attributes: - -- `type`: Containing the content "Token". No other values are currently possible. -- `user`: The value for the user's identifying property, by default the user's email address. -- `password`: The plain text password of the user. -- `data`: Object of properties, optional. - -```json -{ - "type": "Token", - "user": "test@localhost.dev", - "password": "1234", - "data": { - "key": "value" - } -} -``` - -## Request Example - -```bash -curl \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"type": "Token", "user": "test@localhost.dev", "password": "1234"}' \ - https://api.localhost/token -``` - - - -### **🟢 Success 201** - -
Response Headers
- -[Response Body](./post-token-old/201-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-token-old/201-response-body.json ':include :type=code') - -### **🔴 Error 400** - -
Response Headers
- -[Response Body](./post-token-old/400-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-token-old/400-response-body.json ':include :type=code problem+json') - -### **🔴 Error 401** - -
Response Headers
- -[Response Body](./post-token-old/401-response-header.txt ':include :type=code') - -
Response Body
- -[Response Body](./post-token-old/401-response-body.json ':include :type=code problem+json') - - - - - -## Internal Workflow - -Once the server receives such a request, it checks several things internally: - -
- - - - diff --git a/docs/api-endpoints/user/post-token-old/201-response-body.json b/docs/api-endpoints/user/post-token-old/201-response-body.json deleted file mode 100644 index 5745054e..00000000 --- a/docs/api-endpoints/user/post-token-old/201-response-body.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "_TokenResponse", - "token": "secret-token:ERgAAnWl0CY8bQs0m11nZ3" -} \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token-old/201-response-header.txt b/docs/api-endpoints/user/post-token-old/201-response-header.txt deleted file mode 100644 index 09a900a8..00000000 --- a/docs/api-endpoints/user/post-token-old/201-response-header.txt +++ /dev/null @@ -1,10 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 16:26:13 GMT -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token-old/400-response-body.json b/docs/api-endpoints/user/post-token-old/400-response-body.json deleted file mode 100644 index a59d70e2..00000000 --- a/docs/api-endpoints/user/post-token-old/400-response-body.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "type": "http://api/error/400/missing-property", - "title": "Missing property", - "status": 400, - "detail": "Endpoint requires that the request contains property 'password' to be set to string." -} \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token-old/400-response-header.txt b/docs/api-endpoints/user/post-token-old/400-response-header.txt deleted file mode 100644 index 119ec076..00000000 --- a/docs/api-endpoints/user/post-token-old/400-response-header.txt +++ /dev/null @@ -1,10 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 16:29:29 GMT -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token-old/401-response-header.txt b/docs/api-endpoints/user/post-token-old/401-response-header.txt deleted file mode 100644 index 6813e858..00000000 --- a/docs/api-endpoints/user/post-token-old/401-response-header.txt +++ /dev/null @@ -1,10 +0,0 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Access-Control-Allow-Origin: * -Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK -Cache-Control: no-cache, private -Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 16:32:25 GMT -Transfer-Encoding: chunked -X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token.md b/docs/api-endpoints/user/post-token.md index b1333702..bb143811 100644 --- a/docs/api-endpoints/user/post-token.md +++ b/docs/api-endpoints/user/post-token.md @@ -3,11 +3,6 @@ -> [!NOTE] -> This endpoint's request body received a breaking change with version [0.1.6](https://github.com/ember-nexus/api/releases/tag/0.1.6). -> The previous variant is deprecated and will be removed in version 0.2.0. -> Link to the old documentation: [POST /token (old)](/api-endpoints/user/post-token-old.md). - Endpoint for creating new tokens. The endpoint can be configured; see diff --git a/docs/api-endpoints/user/post-token/201-response-header.txt b/docs/api-endpoints/user/post-token/201-response-header.txt index 09a900a8..627a9236 100644 --- a/docs/api-endpoints/user/post-token/201-response-header.txt +++ b/docs/api-endpoints/user/post-token/201-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 71 Content-Type: application/json; charset=utf-8 -Date: Fri, 06 Oct 2023 16:26:13 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:12 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token/400-response-body.json b/docs/api-endpoints/user/post-token/400-response-body.json index a59d70e2..f03bfe63 100644 --- a/docs/api-endpoints/user/post-token/400-response-body.json +++ b/docs/api-endpoints/user/post-token/400-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/400/missing-property", "title": "Missing property", "status": 400, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Endpoint requires that the request contains property 'password' to be set to string." } \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token/400-response-header.txt b/docs/api-endpoints/user/post-token/400-response-header.txt index 119ec076..cb8eadd7 100644 --- a/docs/api-endpoints/user/post-token/400-response-header.txt +++ b/docs/api-endpoints/user/post-token/400-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 243 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 16:29:29 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:12 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token/401-response-body.json b/docs/api-endpoints/user/post-token/401-response-body.json index f91c5190..18c2b31a 100644 --- a/docs/api-endpoints/user/post-token/401-response-body.json +++ b/docs/api-endpoints/user/post-token/401-response-body.json @@ -2,5 +2,6 @@ "type": "http://api/error/401/unauthorized", "title": "Unauthorized", "status": 401, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", "detail": "Authorization for the request failed due to possible problems with the token (incorrect or expired), password (incorrect or changed), the user's unique identifier, or the user's status (e.g., missing, blocked, or deleted)." } \ No newline at end of file diff --git a/docs/api-endpoints/user/post-token/401-response-header.txt b/docs/api-endpoints/user/post-token/401-response-header.txt index 6813e858..4e699388 100644 --- a/docs/api-endpoints/user/post-token/401-response-header.txt +++ b/docs/api-endpoints/user/post-token/401-response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: DELETE, GET, HEAD, OPTIONS, POST Cache-Control: no-cache, private +Content-Length: 373 Content-Type: application/problem+json; charset=utf-8 -Date: Fri, 06 Oct 2023 16:32:25 GMT -Transfer-Encoding: chunked +Date: Fri, 02 Oct 2026 22:38:12 GMT X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/api-endpoints/webdav/copy-element.md b/docs/api-endpoints/webdav/copy-element.md deleted file mode 100644 index f5ef0978..00000000 --- a/docs/api-endpoints/webdav/copy-element.md +++ /dev/null @@ -1,4 +0,0 @@ -# 🚧 COPY` /`Copy Element Endpoint - -!> **Currently not implemented.** -This feature is reserved for the version [0.3.0](https://github.com/ember-nexus/api/milestone/5). diff --git a/docs/api-endpoints/webdav/lock-element.md b/docs/api-endpoints/webdav/lock-element.md deleted file mode 100644 index 6b9001f5..00000000 --- a/docs/api-endpoints/webdav/lock-element.md +++ /dev/null @@ -1,4 +0,0 @@ -# 🚧 LOCK` /`Lock Element Endpoint - -!> **Currently not implemented.** -This feature is reserved for the version [0.3.0](https://github.com/ember-nexus/api/milestone/5). diff --git a/docs/api-endpoints/webdav/mkcol-folder.md b/docs/api-endpoints/webdav/mkcol-folder.md deleted file mode 100644 index bb792200..00000000 --- a/docs/api-endpoints/webdav/mkcol-folder.md +++ /dev/null @@ -1,4 +0,0 @@ -# 🚧 MKCOL` /`Create Folder Endpoint - -!> **Currently not implemented.** -This feature is reserved for the version [0.3.0](https://github.com/ember-nexus/api/milestone/5). diff --git a/docs/api-endpoints/webdav/move-element.md b/docs/api-endpoints/webdav/move-element.md deleted file mode 100644 index a24488c3..00000000 --- a/docs/api-endpoints/webdav/move-element.md +++ /dev/null @@ -1,4 +0,0 @@ -# 🚧 MOVE` /`Move Element Endpoint - -!> **Currently not implemented.** -This feature is reserved for the version [0.3.0](https://github.com/ember-nexus/api/milestone/5). diff --git a/docs/api-endpoints/webdav/propfind-element.md b/docs/api-endpoints/webdav/propfind-element.md deleted file mode 100644 index 6e14a0d2..00000000 --- a/docs/api-endpoints/webdav/propfind-element.md +++ /dev/null @@ -1,4 +0,0 @@ -# 🚧 PROPFIND` /`Find Element Property Endpoint - -!> **Currently not implemented.** -This feature is reserved for the version [0.3.0](https://github.com/ember-nexus/api/milestone/5). diff --git a/docs/api-endpoints/webdav/proppatch-element.md b/docs/api-endpoints/webdav/proppatch-element.md deleted file mode 100644 index 557df1ae..00000000 --- a/docs/api-endpoints/webdav/proppatch-element.md +++ /dev/null @@ -1,4 +0,0 @@ -# 🚧 PROPPATCH` /`Change Element Property Endpoint - -!> **Currently not implemented.** -This feature is reserved for the version [0.3.0](https://github.com/ember-nexus/api/milestone/5). diff --git a/docs/api-endpoints/webdav/unlock-element.md b/docs/api-endpoints/webdav/unlock-element.md deleted file mode 100644 index b7ba22b6..00000000 --- a/docs/api-endpoints/webdav/unlock-element.md +++ /dev/null @@ -1,4 +0,0 @@ -# 🚧 UNLOCK` /`Unlock Element Endpoint - -!> **Currently not implemented.** -This feature is reserved for the version [0.3.0](https://github.com/ember-nexus/api/milestone/5). diff --git a/docs/assets/custom.css b/docs/assets/custom.css index 160225d5..50f81491 100755 --- a/docs/assets/custom.css +++ b/docs/assets/custom.css @@ -178,7 +178,8 @@ table th { font-family: 'Fira Code', 'Roboto Mono', Monaco, courier, monospace !important; } -.method-get { +.method-get, +.method-head { color: var(--ember-nexus-text-blue) !important; } diff --git a/docs/commands/assets/backup-create-help.html b/docs/commands/assets/backup-create-help.html index 803884b8..1ffcdb97 100644 --- a/docs/commands/assets/backup-create-help.html +++ b/docs/commands/assets/backup-create-help.html @@ -45,21 +45,21 @@ backup:create [options] [--] [<name>] Arguments: - name Name of the backup, defaults to the current timestamp. [default: "20260214132745"] + name Name of the backup, defaults to the current timestamp. [default: "20260923234945"] Options: - -p, --pretty|--no-pretty Activates pretty print of JSON. - --ndjson|--no-ndjson Saves multiple JSON documents in a few .ndjson files. - -h, --help Display help for the given command. When no command is given display help for the list command - --silent Do not output any message - -q, --quiet Only errors are displayed. All other output is suppressed - -V, --version Display this application version - --ansi|--no-ansi Force (or disable --no-ansi) ANSI output - -n, --no-interaction Do not ask any interactive question - -e, --env=ENV The Environment name. [default: "prod"] - --no-debug Switch off debug mode. - --profile Enables profiling (requires debug). - -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + -p, --pretty|--no-pretty Activates pretty print of JSON. + --no-files|--no-no-files Disable file export. + -h, --help Display help for the given command. When no command is given display help for the list command + --silent Do not output any message + -q, --quiet Only errors are displayed. All other output is suppressed + -V, --version Display this application version + --ansi|--no-ansi Force (or disable --no-ansi) ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The Environment name. [default: "prod"] + --no-debug Switch off debug mode. + --profile Enables profiling (requires debug). + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug \ No newline at end of file diff --git a/docs/commands/assets/backup-create.html b/docs/commands/assets/backup-create.html index 2cb504b4..ae238268 100644 --- a/docs/commands/assets/backup-create.html +++ b/docs/commands/assets/backup-create.html @@ -45,6 +45,8 @@ Backup Create +Creating backup test in folder ./var/backup + ┌ Step 1 of 3: Backing up Nodes ──────────────────────────────────────────────── │ Found 0 nodes. └ Successfully backed up 0 nodes. @@ -54,8 +56,8 @@ └ Successfully backed up 0 relations. ┌ Step 3 of 3: Backing up Files ──────────────────────────────────────────────── -│ Currently not implemented. -└ Successfully backed up 0 files. +│ Found 0 files. +└ File backup skipped. ▶ Backup finished successfully. diff --git a/docs/commands/assets/backup-fetch.html b/docs/commands/assets/backup-fetch.html index f27fcd71..b2b09c5e 100644 --- a/docs/commands/assets/backup-fetch.html +++ b/docs/commands/assets/backup-fetch.html @@ -46,9 +46,9 @@ Backup Fetch ┌ Downloading and inspecting archive ─────────────────────────────────────────── -│ Loaded archive is 313.67 KB big. -│ SHA1 sum of file is f232952d9fc8a742d7f8441e97d3ceeafb14622a. -│ Found backup inside ZIP in folder reference-dataset-0.0.19. +│ Loaded archive is 7.39 MB big. +│ SHA1 sum of file is a3829eb9c3286c0b77106293136505a84242ba8e. +│ Found backup inside ZIP in folder reference-dataset-0.0.33. │ Required folders exist. └ Download complete. diff --git a/docs/commands/assets/backup-list.html b/docs/commands/assets/backup-list.html index 291c19ef..cf892917 100644 --- a/docs/commands/assets/backup-list.html +++ b/docs/commands/assets/backup-list.html @@ -46,8 +46,8 @@ Backup List Name Hostname Version Date Nodes Edges Files - test 6a7e89a85f66 0.1.31 2026-02-14 0 0 0 - reference-dataset ember-nexus dev 2023-05-06 282 338 0 + test 8304be5e95d9 0.1.31 2026-09-26 0 0 0 + reference-dataset ember-nexus dev 2023-05-06 790 1614 69 ▶ Command finished successfully. diff --git a/docs/commands/assets/backup-load-help.html b/docs/commands/assets/backup-load-help.html index c0383933..8b3ef388 100644 --- a/docs/commands/assets/backup-load-help.html +++ b/docs/commands/assets/backup-load-help.html @@ -42,12 +42,13 @@ Loads a local backup into the empty database. Usage: - backup:load <name> + backup:load [options] [--] <name> Arguments: name Name of the backup Options: + --skip-verify Skip verifying file contents against their stored 'file.hash' values -h, --help Display help for the given command. When no command is given display help for the list command --silent Do not output any message -q, --quiet Only errors are displayed. All other output is suppressed diff --git a/docs/commands/assets/backup-load.html b/docs/commands/assets/backup-load.html index 104ed65c..bf1894a8 100644 --- a/docs/commands/assets/backup-load.html +++ b/docs/commands/assets/backup-load.html @@ -46,14 +46,13 @@ Backup Load ┌ Step 1 of 4: Loading Nodes ─────────────────────────────────────────────────── -└ Loaded 306 nodes. +└ Loaded 790 nodes. ┌ Step 2 of 4: Loading Relations ─────────────────────────────────────────────── -└ Loaded 356 relations. +└ Loaded 1614 relations. ┌ Step 3 of 4: Loading Files ─────────────────────────────────────────────────── -│ Currently not implemented. -└ Loaded 0 files. +└ Loaded 69 files. ┌ Step 4 of 4: After Backup Tasks ────────────────────────────────────────────── └ Finished all after backup tasks. diff --git a/docs/commands/assets/cron-delete-expired-uploads-help.html b/docs/commands/assets/cron-delete-expired-uploads-help.html new file mode 100644 index 00000000..7a55877f --- /dev/null +++ b/docs/commands/assets/cron-delete-expired-uploads-help.html @@ -0,0 +1,60 @@ + + + + + + +stdin + + + + +
+Description:
+  Deletes uploads which were not completed during their lifetime.
+
+Usage:
+  cron:delete-expired-uploads
+
+Options:
+  -h, --help            Display help for the given command. When no command is given display help for the list command
+      --silent          Do not output any message
+  -q, --quiet           Only errors are displayed. All other output is suppressed
+  -V, --version         Display this application version
+      --ansi|--no-ansi  Force (or disable --no-ansi) ANSI output
+  -n, --no-interaction  Do not ask any interactive question
+  -e, --env=ENV         The Environment name. [default: "prod"]
+      --no-debug        Switch off debug mode.
+      --profile         Enables profiling (requires debug).
+  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+ + \ No newline at end of file diff --git a/docs/commands/assets/cron-delete-expired-uploads.html b/docs/commands/assets/cron-delete-expired-uploads.html new file mode 100644 index 00000000..63992b25 --- /dev/null +++ b/docs/commands/assets/cron-delete-expired-uploads.html @@ -0,0 +1,54 @@ + + + + + + +stdin + + + + +
+
+    ▄
+  ▄▀ ▀▄  Ember Nexus API
+   ▀█▀   v0.1.31, production mode
+
+  Cron
+
+  No expired uploads found.
+
+▶ Finished.
+
+
+ + \ No newline at end of file diff --git a/docs/commands/assets/cron-reindex-files-help.html b/docs/commands/assets/cron-reindex-files-help.html new file mode 100644 index 00000000..4975b244 --- /dev/null +++ b/docs/commands/assets/cron-reindex-files-help.html @@ -0,0 +1,60 @@ + + + + + + +stdin + + + + +
+Description:
+  Updates element files within Elasticsearch. Restricted to files marked as updated.
+
+Usage:
+  cron:reindex-files
+
+Options:
+  -h, --help            Display help for the given command. When no command is given display help for the list command
+      --silent          Do not output any message
+  -q, --quiet           Only errors are displayed. All other output is suppressed
+  -V, --version         Display this application version
+      --ansi|--no-ansi  Force (or disable --no-ansi) ANSI output
+  -n, --no-interaction  Do not ask any interactive question
+  -e, --env=ENV         The Environment name. [default: "prod"]
+      --no-debug        Switch off debug mode.
+      --profile         Enables profiling (requires debug).
+  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
+
+ + \ No newline at end of file diff --git a/docs/commands/assets/cron-reindex-files.html b/docs/commands/assets/cron-reindex-files.html new file mode 100644 index 00000000..f6583fcf --- /dev/null +++ b/docs/commands/assets/cron-reindex-files.html @@ -0,0 +1,54 @@ + + + + + + +stdin + + + + +
+
+    ▄
+  ▄▀ ▀▄  Ember Nexus API
+   ▀█▀   v0.1.31, production mode
+
+  Cron
+
+  Reindexing files marked as updated...
+
+▶ Reindexed 0 element file(s).
+
+
+ + \ No newline at end of file diff --git a/docs/commands/assets/database-drop-help.html b/docs/commands/assets/database-drop-help.html index 56f7c38c..a305f9cd 100644 --- a/docs/commands/assets/database-drop-help.html +++ b/docs/commands/assets/database-drop-help.html @@ -45,17 +45,18 @@ database:drop [options] Options: - -f, --force|--no-force If enabled, command will not ask for manual confirmation. - -h, --help Display help for the given command. When no command is given display help for the list command - --silent Do not output any message - -q, --quiet Only errors are displayed. All other output is suppressed - -V, --version Display this application version - --ansi|--no-ansi Force (or disable --no-ansi) ANSI output - -n, --no-interaction Do not ask any interactive question - -e, --env=ENV The Environment name. [default: "prod"] - --no-debug Switch off debug mode. - --profile Enables profiling (requires debug). - -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + -f, --force|--no-force If enabled, command will not ask for manual confirmation. + --no-files|--no-no-files Disable deletion of object storage (S3) data, i.e. keep the storage and upload buckets untouched. + -h, --help Display help for the given command. When no command is given display help for the list command + --silent Do not output any message + -q, --quiet Only errors are displayed. All other output is suppressed + -V, --version Display this application version + --ansi|--no-ansi Force (or disable --no-ansi) ANSI output + -n, --no-interaction Do not ask any interactive question + -e, --env=ENV The Environment name. [default: "prod"] + --no-debug Switch off debug mode. + --profile Enables profiling (requires debug). + -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug \ No newline at end of file diff --git a/docs/commands/assets/database-drop.html b/docs/commands/assets/database-drop.html index 28fe34d2..c44fe0e4 100644 --- a/docs/commands/assets/database-drop.html +++ b/docs/commands/assets/database-drop.html @@ -54,8 +54,8 @@ └ Successfully deleted Mongo data. ┌ Task 3 of 6: Object Storage ────────────────────────────────────────────────── -│ Deleting object storage data... -└ Object storage is currently not implemented, nothing to delete. +│ Deleting Object data... +└ Successfully deleted object storage. ┌ Task 4 of 6: Elastic Search ────────────────────────────────────────────────── │ Deleting Elastic data... diff --git a/docs/commands/assets/system-healthcheck.html b/docs/commands/assets/system-healthcheck.html index 91c26f27..71fd88eb 100644 --- a/docs/commands/assets/system-healthcheck.html +++ b/docs/commands/assets/system-healthcheck.html @@ -47,17 +47,18 @@ ┌ Check if databases are online ──────────────────────────────────────────────── │ Neo4j version: 5.25.1 (community) -│ MongoDB version: 8.0.9 +│ MongoDB version: 8.0.20 │ Elasticsearch version: 8.16.1 │ Redis version: 7.9.225 │ RabbitMQ version: 3.13.7 +│ S3 buckets: online └ All databases are online. ┌ Check internal services ────────────────────────────────────────────────────── │ Alpine version: 3.23.3 -│ Caddy version: 2.10.2 -│ FrankenPHP version: 1.11.2 -│ PHP version: 8.5.2 +│ Caddy version: 2.11.2 +│ FrankenPHP version: 1.12.1 +│ PHP version: 8.5.4 └ Internal services are ok. ┌ Check API ──────────────────────────────────────────────────────────────────── diff --git a/docs/commands/assets/token-create.html b/docs/commands/assets/token-create.html index 85dbbcb5..3e7f2b2d 100644 --- a/docs/commands/assets/token-create.html +++ b/docs/commands/assets/token-create.html @@ -45,9 +45,9 @@ Token Create - Found user with identifier 'token-create-test@localhost.dev', user's UUID is f87aab53-9266-4826-a55a-3febfc1abb07. + Found user with identifier 'token-create-test@localhost.dev', user's UUID is 5d26f447-a875-4b98-9dc6-a069f222caca. -▶ Successfully created new token: secret-token:JfE0sJM1HORirCumQgl4KP . +▶ Successfully created new token: secret-token:Q869bcS10ofGIT8E9gHKDm . diff --git a/docs/commands/assets/token-revoke.html b/docs/commands/assets/token-revoke.html index 1353bb93..b34c4670 100644 --- a/docs/commands/assets/token-revoke.html +++ b/docs/commands/assets/token-revoke.html @@ -45,19 +45,19 @@ Token Revocation - 51 tokens are affected by revocation. First 10 are shown: + 91 tokens are affected by revocation. First 10 are shown: - Token UUID User UUID User identifier Created Expires on - e3b81351-fe0c-4f8f-ad22-78b6157edde8 7e86b9ec-b1dc-4aed-a627-eb77b265e12c user@frontend.localhost.dev 2026-02-14 13:29:32 - - fdc9fc1f-1436-437b-a46d-358dbbb086d1 e5d6c437-e13c-4fe8-85be-fc12e164eb17 user@ownership-model.general.localhost.dev 2026-02-14 13:29:32 - - b23e672c-a901-4ea4-8dda-74029c46f7d2 df8e3dfd-37e9-45fc-ac23-b2f60be4152c user@pagination.general.localhost.dev 2026-02-14 13:29:32 - - 840fee16-996e-4b1a-af2a-77d77c4aeda7 a70e49dc-ec45-414a-beb2-43e6fa56eb41 user@relation.deleteElement.endpoint.localhost.dev 2026-02-14 13:29:32 - - 374fa7ea-4df7-475c-a6a6-b35ff7b9bae1 1a0fd886-9f62-497f-8d20-bd61a40b49b7 user@node.deleteElement.endpoint.localhost.dev 2026-02-14 13:29:32 - - ca9fa4fe-1fbd-4e8a-a6bf-701d97a7ec12 7935a9d2-e453-4dec-bc4a-243e3ced678a user@node.putElement.endpoint.localhost.dev 2026-02-14 13:29:32 - - 84e32a4f-840b-435a-a064-2e72f19d8b20 53ae199c-6b71-44c1-b10c-fca306b32cbf user@relation.putElement.endpoint.localhost.dev 2026-02-14 13:29:32 - - 5f450171-c535-4365-ac70-a283955d4ff5 4250a83d-707b-4f7a-b7dc-225af430f093 user@node.patchElement.endpoint.localhost.dev 2026-02-14 13:29:32 - - 9543e70d-6552-4409-ab6a-dfaf003382a2 8d70608f-ebca-4077-98d2-12733b7fd08e user@relation.patchElement.endpoint.localhost.dev 2026-02-14 13:29:32 - - 571b30e2-40eb-43f5-a888-a6b7ec6c15fc fdf0509d-812c-4435-a863-a4fd6f17e9c4 user@relation.postIndex.endpoint.localhost.dev 2026-02-14 13:29:32 - + Token UUID User UUID User identifier Created Expires on + 0110cadf-07a6-4c8b-8f8c-ad4ffb47dedb 332b9edb-c015-4fdf-bfb3-b02302618f7b user@delete-owns-relation.etag.general.localhost.dev 2020-01-01 00:00:00 - + 281957bc-6764-43bb-a56f-6f9af99fd7c8 3977e2e8-2756-4cd9-a34d-6189b5d920e8 user@update-node.etag.general.localhost.dev 2020-01-01 00:00:00 - + 409eacbc-0f5e-43ff-9604-cafed272b63f 42c7c48b-8d0b-4b1f-aabf-8d12ec12851f user@issuedBefore.revoke.token.command.localhost.dev 2020-01-01 00:00:00 - + 53e802e6-7e7e-4707-ad61-641d8d6a59bc 03c72577-080e-480e-b02d-d86c81fec11e user@maximum.etag.general.localhost.dev 2020-01-01 00:00:00 - + 59eacea8-7a11-4563-a3b0-bb190cc2b6a7 752ab248-05b5-4307-984b-d2591d102c31 user@update-owns-relation.etag.general.localhost.dev 2020-01-01 00:00:00 - + 5d1263c9-e7d8-420a-9356-cea900d141de ec30da95-7eef-43f9-86f4-cc76765f4523 user@create-node.etag.general.localhost.dev 2020-01-01 00:00:00 - + 6451df27-9a2d-489b-9371-0aba1f0afbf2 e31c671c-e736-4122-b9a9-d087286a48a2 user@if-match.general.localhost.dev 2020-01-01 00:00:00 - + 9af6704e-3b1e-4144-a944-48e0ee4d40c1 77454c09-eb46-4df8-aa41-cbd3e190d043 user@if-none-match.general.localhost.dev 2020-01-01 00:00:00 - + 9b008ec6-fbd7-49e3-8578-336755f94dbe f55aa4a1-5352-4881-ab56-203e5fce0497 user@create-owns-relation.etag.general.localhost.dev 2020-01-01 00:00:00 - + 9e140160-608d-4533-9c2a-93b87ea873a8 f6eb8924-ea5e-4c29-a59e-02e8e21f41e9 user@create-normal-relation.etag.general.localhost.dev 2020-01-01 00:00:00 - Revoking tokens... diff --git a/docs/commands/assets/user-create.html b/docs/commands/assets/user-create.html index 1abea1b4..5560c388 100644 --- a/docs/commands/assets/user-create.html +++ b/docs/commands/assets/user-create.html @@ -45,7 +45,7 @@ User Create -▶ Created user with email 'command-test@localhost.dev' successfully, UUID is 83801c33-ddd0-4fb7-b937-b0bfa5433e56. +▶ Created user with email 'command-test@localhost.dev' successfully, UUID is fb214f0f-f1b1-433b-b9f1-a569e0f9fe9d. diff --git a/docs/concepts/caching.md b/docs/concepts/caching.md index 80618b8f..ea08c720 100644 --- a/docs/concepts/caching.md +++ b/docs/concepts/caching.md @@ -19,6 +19,10 @@ Ember Nexus API supports the headers to determine whether cached content is stil - `If-Match`, see [MDN's documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/If-Match). - `If-None-Match`, see [MDN's documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/If-None-Match). +Note that `If-Match` is checked before the write, but is not atomic with it: a concurrent write between the check and +the actual write is possible and is not detected. `If-Match` therefore reduces, but does not eliminate, the chance of +overwriting a concurrent change. + The value of the `Etag` header is calculated as the XXH3 hash from the identifiers and `updatedAt` timestamps of all involved elements. As the `updatedAt` timestamp uses microsecond precision, the resulting `Etag` will be different as long as updates diff --git a/docs/concepts/caching/initial-request-response-header.txt b/docs/concepts/caching/initial-request-response-header.txt index 377c3a3b..01f20990 100644 --- a/docs/concepts/caching/initial-request-response-header.txt +++ b/docs/concepts/caching/initial-request-response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 Date: Wed, 10 Sep 2025 11:53:42 GMT diff --git a/docs/concepts/caching/invalid-etag-response-header.txt b/docs/concepts/caching/invalid-etag-response-header.txt index 4aff4231..990b8a44 100644 --- a/docs/concepts/caching/invalid-etag-response-header.txt +++ b/docs/concepts/caching/invalid-etag-response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 Date: Wed, 10 Sep 2025 12:07:01 GMT diff --git a/docs/concepts/caching/not-modified-response-header.txt b/docs/concepts/caching/not-modified-response-header.txt index d0abf546..6ff26d7b 100644 --- a/docs/concepts/caching/not-modified-response-header.txt +++ b/docs/concepts/caching/not-modified-response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 Date: Wed, 10 Sep 2025 12:02:10 GMT diff --git a/docs/development/best-practices.md b/docs/development/best-practices.md deleted file mode 100644 index df77f43e..00000000 --- a/docs/development/best-practices.md +++ /dev/null @@ -1,66 +0,0 @@ -# Best Practices - -As Ember Nexus internally uses Symfony, it also uses -[Symfony's best practices](https://symfony.com/doc/current/best_practices.html). - -## Language - -The source code of Ember Nexus and responses generated by Ember Nexus API should be only written in **English**. - -There are two reasons for it: - -- Search engines more easily find exceptions returned in a single language, helping with debugging and general - usability. -- As English is the Lingua Franca of the IT industry, it should be the primary language used in this project. - -Documentations and general user guides should always be available in English, and additional translations or regional -adaptations can be created. -It should be noted that Ember Nexus strives towards long-term stability; i.e., it is better not to support language X -than to shortly abandon language X after trial usage. - -When deciding between using the active vs. passive voice, asking the following question helps: - -> Is it an advantage for the reader to know the performer of the action? - -If the answer is Yes, use active voice. If the answer is No, use passive voice. - -See [Technical Writing: Active vs. Passive voice](https://medium.com/@DaphneWatson/technical-writing-active-vs-passive-voice-485dfaa4e498) -for details. - -## Coding Style - -Ember Nexus API tries to implement object-orientated code with patterns where it makes sense. Duplicate code should be -reduced if the code's complexity is similar. -Using easily readable code is better than using the least amount of lines -or highly optimized code. - -Refactoring parts of the source code is always possible as long as code changes are covered by unit tests and existing -feature tests are passed. - -Try to keep the line length below 120 chars. - -## Logging and Exceptions - -Both log messages and exceptions should adhere to a few key principles: - -- Messages should provide context why they are created. -- Messages should provide one specific reason, ideally a unique property or identifier. -- Messages should not contain sensitive data like passwords, hashes, and tokens. -- Messages are sentences, they end with a dot. - -Log messages should be created in the following scenarios: - -- Important events in the lifetime of the API should be documented. This includes startup, shutdown, and backups. -- Security events like creating or updating users and tokens should always be logged. If possible, use the - user's unique identifier for context. -- Administrative actions should be fully logged: - - Interactions with the command line. - - Interactions with the API through users with administrative access. - -Exceptions should be created in the following instances: - -- If input validation returns an error. -- If an action is forbidden, likely due to missing security privileges. -- If the requested data does not exist. -- If there is a logic conflict. -- In other problematic instances. diff --git a/docs/development/long-term-plans.md b/docs/development/long-term-plans.md deleted file mode 100644 index fe098ae6..00000000 --- a/docs/development/long-term-plans.md +++ /dev/null @@ -1,24 +0,0 @@ -# Long-Term Plans - -The Ember Nexus API is not intended to be modified or extended by third parties directly - we do not guarantee that -internal code is not refactored or creates breaking changes in minor version updates. - -If you need to handle custom business logic or general automation, then it is recommended to create a separate -web app, which communicates with Ember Nexus over its API, which is stable and will not have breaking changes in minor -version updates. - -## Version 2 of Ember Nexus API - -While no guarantees can be given, we want to experiment if rewriting Ember Nexus API in Rust provides significant -performance benefits. -This experiment starts after the release of version 1.0.0 and will be covered in separate blog -posts. - -The API endpoints of version 2.0, regardless if the API uses Rust or not, will likely be highly similar. - -## Native Support for HTTP 2 / HTTP 3 - -Neither HTTP 2 nor HTTP 3 will be supported during version 1.x. It is recommended to use a reverse proxy like -[Traefik](https://traefik.io/traefik/). - -Support for version 2.x is likely. diff --git a/docs/example/default-parameters.yaml b/docs/example/default-parameters.yaml index b0e510e2..76ae6f06 100644 --- a/docs/example/default-parameters.yaml +++ b/docs/example/default-parameters.yaml @@ -70,8 +70,41 @@ ember_nexus: # Maximum number of items in a collection for which to generate Etags. Bigger collection do not contain Etags due to performance problems. etagUpperLimitInCollectionEndpoints: 100 - # Configures feature flags. - featureFlag: + # Configures behavior related to files. + file: - # If true, the original behavior of some user endpoints in versions before 0.1.6 will no longer be supported. Old behavior will be dropped with version 0.2.0. See GitHub issue #280. - 280_OldUniqueUserIdentifierDisabled: false + # Maximum supported file size in bytes. Note: Upstream services like S3 have limits of their own (5TB). + maxFileSizeInBytes: 10737418240 + + # Number of seconds after which unfinished uploads are expired. + uploadExpiresInSecondsAfterFirstRequest: 10800 + + # Number of digits for the upload chunk counter. Number of max chunks can be limited by upstream services, e.g. AWS can only support up to 10.000 chunks, i.e. a chunk digits length of 4. + uploadChunkDigitsLength: 4 + + # Minimum size in bytes of uploaded chunks. Limited by the S3 provider, e.g. AWS requires that chunks are at least 5 MiB big. + uploadMinChunkSizeInBytes: 5242880 + + # Maximum size in bytes of uploaded chunks. Limited by the S3 provider, Caddy and the PHP configuration. + uploadMaxChunkSizeInBytes: 105906176 + + # Grace period after an upload expires during which the cron:delete-expired-uploads command will not yet delete it. Gives clients a bit of leeway past the expiration date before their partial upload and its S3 chunks are removed. + expiredUploadCanBeDeletedAfterExpirationInSeconds: 3600 + + # Name of the S3 bucket used for storage of files. + S3StorageBucket: api-storage + + # Name of the S3 bucket used for temporary storage of uploads. + S3UploadBucket: api-upload + + # Number of levels (folders) used within the S3 storage bucket. + S3StorageBucketLevels: 3 + + # Number of characters used for each level (folder) in the S3 storage bucket. + S3StorageBucketLevelLength: 2 + + # Number of levels (folders) used within the S3 upload bucket. + S3UploadBucketLevels: 2 + + # Number of characters used for each level (folder) in the S3 upload bucket. + S3UploadBucketLevelLength: 2 diff --git a/docs/open-api/examples/NotFoundProblemExample.json b/docs/open-api/examples/NotFoundProblemExample.json new file mode 100644 index 00000000..001ea62a --- /dev/null +++ b/docs/open-api/examples/NotFoundProblemExample.json @@ -0,0 +1,10 @@ +{ + "summary": "Not found", + "value": { + "type": "http://api/error/404/not-found", + "title": "Not Found", + "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested element was not found." + } +} diff --git a/docs/open-api/parameters/If-Match.json b/docs/open-api/parameters/If-Match.json new file mode 100644 index 00000000..69dd8442 --- /dev/null +++ b/docs/open-api/parameters/If-Match.json @@ -0,0 +1,10 @@ +{ + "name": "If-Match", + "in": "header", + "required": false, + "example": "\"blub\"", + "description": "Makes the GET request conditional. See caching for details.", + "schema": { + "type": "string" + } +} diff --git a/docs/open-api/parameters/If-None-Match.json b/docs/open-api/parameters/If-None-Match.json new file mode 100644 index 00000000..327bebee --- /dev/null +++ b/docs/open-api/parameters/If-None-Match.json @@ -0,0 +1,10 @@ +{ + "name": "If-None-Match", + "in": "header", + "required": false, + "x-scalar-ignore": true, + "description": "Makes the GET request conditional. Returns 304 if ETag matches.", + "schema": { + "type": "string" + } +} \ No newline at end of file diff --git a/docs/open-api/paths/Element/GetElement.json b/docs/open-api/paths/Element/GetElement.json new file mode 100644 index 00000000..cce90b9d --- /dev/null +++ b/docs/open-api/paths/Element/GetElement.json @@ -0,0 +1,142 @@ +{ + "path": "/{uuid}", + "method": "get", + "content": { + "summary": "Get Element", + "description": "Retrieves a single element (node or relationship) by UUID.", + "operationId": "getElement", + "parameters": [ + { + "name": "uuid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/If-Match" + }, + { + "$ref": "#/components/parameters/If-None-Match" + } + ], + "responses": { + "200": { + "description": "Element found. Returns either a node or a relationship.", + "headers": { + "ETag": { + "description": "Entity tag for caching purposes.", + "schema": { + "type": "string", + "example": "\"YgbFC4u5EgC\"" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "X-Powered-By": { + "schema": { + "type": "string", + "example": "Ember Nexus API" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Element" + }, + "examples": { + "node": { + "summary": "Node response", + "value": { + "type": "Comment", + "id": "74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac", + "data": { + "created": "2025-09-27T10:39:51+00:00", + "updated": "2025-09-27T10:39:51+00:00", + "name": "Blue", + "content": "Blue is one of the three primary colours in the RYB colour model...\n" + } + } + }, + "relationship": { + "summary": "Relationship response", + "value": { + "type": "OWNS", + "id": "eb5d2879-c5e6-43a6-b8ce-2a1188ca7073", + "start": "56fda20c-b238-4034-b555-1df47c47e17a", + "end": "ce8abdea-2e6c-41d4-b779-87b803f77836", + "data": { + "created": "2025-09-27T10:39:58+00:00", + "updated": "2025-09-27T10:39:58+00:00" + } + } + } + } + } + } + }, + "304": { + "description": "Not modified. Returned when If-None-Match header matches current ETag.", + "headers": { + "ETag": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized. Invalid or expired token.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + }, + "404": { + "description": "Element not found, or user lacks access.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "notFound": { + "$ref": "#/components/examples/NotFoundProblemExample" + } + } + } + } + }, + "412": { + "description": "Precondition failed. If-Match or If-None-Match condition not met.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + }, + "429": { + "description": "Too many requests. Rate limit exceeded.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + } + } + } +} diff --git a/docs/open-api/schemas/Element.json b/docs/open-api/schemas/Element.json new file mode 100644 index 00000000..f9362458 --- /dev/null +++ b/docs/open-api/schemas/Element.json @@ -0,0 +1,44 @@ +{ + "type": "object", + "required": [ + "type", + "id", + "data" + ], + "properties": { + "type": { + "type": "string", + "example": "Data" + }, + "id": { + "$ref": "#/components/schemas/ElementId" + }, + "data": { + "type": "object", + "additionalProperties": true, + "example": { + "created": "2025-09-27T10:39:51+00:00", + "updated": "2025-09-27T10:39:51+00:00", + "name": "some name" + } + }, + "file": { + "type": "object", + "additionalProperties": true, + "readOnly": true, + "example": { + "contentLength": 63933, + "extension": "jpg", + "mimeType": "image/jpeg" + } + }, + "start": { + "$ref": "#/components/schemas/ElementId", + "description": "UUID of the start node. Required if end is present." + }, + "end": { + "$ref": "#/components/schemas/ElementId", + "description": "UUID of the end node. Required if start is present." + } + } +} diff --git a/docs/open-api/schemas/ElementId.json b/docs/open-api/schemas/ElementId.json new file mode 100644 index 00000000..d5be0530 --- /dev/null +++ b/docs/open-api/schemas/ElementId.json @@ -0,0 +1,6 @@ +{ + "type": "string", + "format": "uuid", + "example": "00000000-0000-0000-0000-000000000000", + "description": "Global unique identifier for any element" +} diff --git a/docs/open-api/schemas/Problem.json b/docs/open-api/schemas/Problem.json new file mode 100644 index 00000000..03e61c19 --- /dev/null +++ b/docs/open-api/schemas/Problem.json @@ -0,0 +1,47 @@ +{ + "$schema": "https://spec.openapis.org/oas/3.0/schema/2021-09-28#/definitions/Schema", + "type": "object", + "description": "RFC 9457 Problem Details object. Some problems carry additional camelCase members, e.g. `expectedOffset` and `providedOffset` (409 on a resumable upload) or `totalLength`, `requestedStart` and `requestedEnd` (416 on a file range request).", + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "format": "uri" + }, + "title": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "detail": { + "type": "string" + }, + "instance": { + "type": "string", + "format": "uri", + "description": "Identifies this occurrence of the problem. The id is the request id of the application log (`requestId`) and of the web server access log (`request_id`).", + "example": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f" + }, + "expectedOffset": { + "type": "integer", + "description": "409 on a resumable upload: the offset the upload is currently at." + }, + "providedOffset": { + "type": "integer", + "description": "409 on a resumable upload: the offset which was sent with the request." + }, + "totalLength": { + "type": "integer", + "description": "416 on a file range request: the length of the file in bytes." + }, + "requestedStart": { + "type": "integer", + "description": "416 on a file range request: the requested first byte." + }, + "requestedEnd": { + "type": "integer", + "description": "416 on a file range request: the requested last byte." + } + } +} diff --git a/docs/open-api/swagger.json b/docs/open-api/swagger.json new file mode 100644 index 00000000..716f372f --- /dev/null +++ b/docs/open-api/swagger.json @@ -0,0 +1,287 @@ +{ + "openapi": "3.1.1", + "info": { + "title": "Ember Nexus API", + "version": "0.1.31" + }, + "components": { + "schemas": { + "ElementId": { + "type": "string", + "format": "uuid", + "example": "00000000-0000-0000-0000-000000000000", + "description": "Global unique identifier for any element" + }, + "Element": { + "type": "object", + "required": [ + "type", + "id", + "data" + ], + "properties": { + "type": { + "type": "string", + "example": "Data" + }, + "id": { + "$ref": "#/components/schemas/ElementId" + }, + "data": { + "type": "object", + "additionalProperties": true, + "example": { + "created": "2025-09-27T10:39:51+00:00", + "updated": "2025-09-27T10:39:51+00:00", + "name": "some name" + } + }, + "file": { + "type": "object", + "additionalProperties": true, + "readOnly": true, + "example": { + "contentLength": 63933, + "extension": "jpg", + "mimeType": "image/jpeg" + } + }, + "start": { + "$ref": "#/components/schemas/ElementId", + "description": "UUID of the start node. Required if end is present." + }, + "end": { + "$ref": "#/components/schemas/ElementId", + "description": "UUID of the end node. Required if start is present." + } + } + }, + "Problem": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2021-09-28#/definitions/Schema", + "type": "object", + "description": "RFC 9457 Problem Details object. Some problems carry additional camelCase members, e.g. `expectedOffset` and `providedOffset` (409 on a resumable upload) or `totalLength`, `requestedStart` and `requestedEnd` (416 on a file range request).", + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "format": "uri" + }, + "title": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "detail": { + "type": "string" + }, + "instance": { + "type": "string", + "format": "uri", + "description": "Identifies this occurrence of the problem. The id is the request id of the application log (`requestId`) and of the web server access log (`request_id`).", + "example": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f" + }, + "expectedOffset": { + "type": "integer", + "description": "409 on a resumable upload: the offset the upload is currently at." + }, + "providedOffset": { + "type": "integer", + "description": "409 on a resumable upload: the offset which was sent with the request." + }, + "totalLength": { + "type": "integer", + "description": "416 on a file range request: the length of the file in bytes." + }, + "requestedStart": { + "type": "integer", + "description": "416 on a file range request: the requested first byte." + }, + "requestedEnd": { + "type": "integer", + "description": "416 on a file range request: the requested last byte." + } + } + } + }, + "examples": { + "NotFoundProblemExample": { + "summary": "Not found", + "value": { + "type": "http://api/error/404/not-found", + "title": "Not Found", + "status": 404, + "instance": "urn:uuid:3f2a9c1e-8b4d-4c2a-9e1f-6a7b8c9d0e1f", + "detail": "Requested element was not found." + } + } + }, + "parameters": { + "If-Match": { + "name": "If-Match", + "in": "header", + "required": false, + "example": "\"blub\"", + "description": "Makes the GET request conditional. See caching for details.", + "schema": { + "type": "string" + } + }, + "If-None-Match": { + "name": "If-None-Match", + "in": "header", + "required": false, + "x-scalar-ignore": true, + "description": "Makes the GET request conditional. Returns 304 if ETag matches.", + "schema": { + "type": "string" + } + } + } + }, + "paths": { + "/{uuid}": { + "get": { + "summary": "Get Element", + "description": "Retrieves a single element (node or relationship) by UUID.", + "operationId": "getElement", + "parameters": [ + { + "name": "uuid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "$ref": "#/components/parameters/If-Match" + }, + { + "$ref": "#/components/parameters/If-None-Match" + } + ], + "responses": { + "200": { + "description": "Element found. Returns either a node or a relationship.", + "headers": { + "ETag": { + "description": "Entity tag for caching purposes.", + "schema": { + "type": "string", + "example": "\"YgbFC4u5EgC\"" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "X-Powered-By": { + "schema": { + "type": "string", + "example": "Ember Nexus API" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Element" + }, + "examples": { + "node": { + "summary": "Node response", + "value": { + "type": "Comment", + "id": "74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac", + "data": { + "created": "2025-09-27T10:39:51+00:00", + "updated": "2025-09-27T10:39:51+00:00", + "name": "Blue", + "content": "Blue is one of the three primary colours in the RYB colour model...\n" + } + } + }, + "relationship": { + "summary": "Relationship response", + "value": { + "type": "OWNS", + "id": "eb5d2879-c5e6-43a6-b8ce-2a1188ca7073", + "start": "56fda20c-b238-4034-b555-1df47c47e17a", + "end": "ce8abdea-2e6c-41d4-b779-87b803f77836", + "data": { + "created": "2025-09-27T10:39:58+00:00", + "updated": "2025-09-27T10:39:58+00:00" + } + } + } + } + } + } + }, + "304": { + "description": "Not modified. Returned when If-None-Match header matches current ETag.", + "headers": { + "ETag": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized. Invalid or expired token.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + }, + "404": { + "description": "Element not found, or user lacks access.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "notFound": { + "$ref": "#/components/examples/NotFoundProblemExample" + } + } + } + } + }, + "412": { + "description": "Precondition failed. If-Match or If-None-Match condition not met.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + }, + "429": { + "description": "Too many requests. Rate limit exceeded.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + } + }, + "tags": [ + "Element" + ] + } + } + } +} diff --git a/docs/open-api/swagger_old.json b/docs/open-api/swagger_old.json new file mode 100644 index 00000000..eb882beb --- /dev/null +++ b/docs/open-api/swagger_old.json @@ -0,0 +1,261 @@ +{ + "openapi": "3.1.1", + "info": { + "title": "Ember Nexus API", + "version": "0.1.31" + }, + "security": [ + { + "bearerAuth": [] + } + ], + "paths": { + "/{uuid}": { + "get": { + "summary": "Get Element", + "description": "Retrieves a single element (node or relationship) by UUID.", + "operationId": "getElement", + "tags": [ + "Element" + ], + "parameters": [ + { + "name": "uuid", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + }, + { + "name": "If-Match", + "in": "header", + "required": false, + "example": "\"blub\"", + "description": "Makes the GET request conditional. See caching for details.", + "schema": { + "type": "string" + } + }, + { + "name": "If-None-Match", + "in": "header", + "required": false, + "x-scalar-ignore": true, + "description": "Makes the GET request conditional. Returns 304 if ETag matches.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Element found. Returns either a node or a relationship.", + "headers": { + "ETag": { + "description": "Entity tag for caching purposes.", + "schema": { + "type": "string", + "example": "\"YgbFC4u5EgC\"" + } + }, + "Cache-Control": { + "schema": { + "type": "string", + "example": "no-cache, private" + } + }, + "X-Powered-By": { + "schema": { + "type": "string", + "example": "Ember Nexus API" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Element" + }, + "examples": { + "node": { + "summary": "Node response", + "value": { + "type": "Comment", + "id": "74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac", + "data": { + "created": "2025-09-27T10:39:51+00:00", + "updated": "2025-09-27T10:39:51+00:00", + "name": "Blue", + "content": "Blue is one of the three primary colours in the RYB colour model...\n" + } + } + }, + "relationship": { + "summary": "Relationship response", + "value": { + "type": "OWNS", + "id": "eb5d2879-c5e6-43a6-b8ce-2a1188ca7073", + "start": "56fda20c-b238-4034-b555-1df47c47e17a", + "end": "ce8abdea-2e6c-41d4-b779-87b803f77836", + "data": { + "created": "2025-09-27T10:39:58+00:00", + "updated": "2025-09-27T10:39:58+00:00" + } + } + } + } + } + } + }, + "304": { + "description": "Not modified. Returned when If-None-Match header matches current ETag.", + "headers": { + "ETag": { + "schema": { + "type": "string" + } + } + } + }, + "401": { + "description": "Unauthorized. Invalid or expired token.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + }, + "404": { + "description": "Element not found, or user lacks access.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + }, + "examples": { + "notFound": { + "$ref": "#/components/examples/NotFoundProblemExample" + } + } + } + } + }, + "412": { + "description": "Precondition failed. If-Match or If-None-Match condition not met.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + }, + "429": { + "description": "Too many requests. Rate limit exceeded.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem" + } + } + } + } + } + } + } + }, + "components": { + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "ElementId": { + "type": "string", + "format": "uuid", + "example": "00000000-0000-0000-0000-000000000000", + "description": "Global unique identifier for any element" + }, + "Element": { + "type": "object", + "required": [ + "type", + "id", + "data" + ], + "properties": { + "type": { + "type": "string", + "example": "Data" + }, + "id": { + "$ref": "#/components/schemas/ElementId" + }, + "data": { + "type": "object", + "additionalProperties": true, + "example": { + "created": "2025-09-27T10:39:51+00:00", + "updated": "2025-09-27T10:39:51+00:00", + "name": "some name" + } + }, + "file": { + "type": "object", + "additionalProperties": true, + "readOnly": true, + "example": { + "contentLength": 63933, + "extension": "jpg", + "mimeType": "image/jpeg" + } + }, + "start": { + "$ref": "#/components/schemas/ElementId", + "description": "UUID of the start node. Required if end is present." + }, + "end": { + "$ref": "#/components/schemas/ElementId", + "description": "UUID of the end node. Required if start is present." + } + } + }, + "Problem": { + "type": "object", + "description": "RFC 7807 Problem Details object.", + "properties": { + "type": { + "type": "string", + "format": "uri" + }, + "title": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "detail": { + "type": "string" + } + } + } + }, + "examples": { + "NotFoundProblemExample": { + "summary": "Not found", + "value": { + "type": "http://api/error/404/not-found", + "title": "Not Found", + "status": 404, + "detail": "Requested element was not found." + } + } + } + } +} \ No newline at end of file diff --git a/docs/open-api/swagger_old.yml b/docs/open-api/swagger_old.yml new file mode 100644 index 00000000..cb992cf0 --- /dev/null +++ b/docs/open-api/swagger_old.yml @@ -0,0 +1,192 @@ +openapi: 3.1.1 +info: + title: Ember Nexus API + version: 0.1.31 + +security: + - bearerAuth: [] + +paths: + /{uuid}: + get: + summary: Get Element + description: Retrieves a single element (node or relationship) by UUID. + operationId: getElement + tags: + - Element + parameters: + - name: uuid + in: path + required: true + schema: + type: string + format: uuid + - name: If-Match + in: header + required: false + example: '"blub"' + description: Makes the GET request conditional. See caching for details. + schema: + type: string + - name: If-None-Match + in: header + required: false + x-scalar-ignore: true + description: Makes the GET request conditional. Returns 304 if ETag matches. + schema: + type: string + + responses: + '200': + description: Element found. Returns either a node or a relationship. + headers: + ETag: + description: Entity tag for caching purposes. + schema: + type: string + example: '"YgbFC4u5EgC"' + Cache-Control: + schema: + type: string + example: no-cache, private + X-Powered-By: + schema: + type: string + example: Ember Nexus API + content: + application/json: + schema: + $ref: '#/components/schemas/Element' + examples: + node: + summary: Node response + value: + type: Comment + id: 74a8fcd9-6cb0-4b0d-8d42-0b6c3c54d1ac + data: + created: '2025-09-27T10:39:51+00:00' + updated: '2025-09-27T10:39:51+00:00' + name: Blue + content: > + Blue is one of the three primary colours in the RYB colour model... + relationship: + summary: Relationship response + value: + type: OWNS + id: eb5d2879-c5e6-43a6-b8ce-2a1188ca7073 + start: 56fda20c-b238-4034-b555-1df47c47e17a + end: ce8abdea-2e6c-41d4-b779-87b803f77836 + data: + created: '2025-09-27T10:39:58+00:00' + updated: '2025-09-27T10:39:58+00:00' + + '304': + description: Not modified. Returned when If-None-Match header matches current ETag. + headers: + ETag: + schema: + type: string + + '401': + description: Unauthorized. Invalid or expired token. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Problem' + + '404': + description: Element not found, or user lacks access. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Problem' + examples: + notFound: + $ref: '#/components/examples/NotFoundProblemExample' + + '412': + description: Precondition failed. If-Match or If-None-Match condition not met. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Problem' + + '429': + description: Too many requests. Rate limit exceeded. + content: + application/problem+json: + schema: + $ref: '#/components/schemas/Problem' + +components: + + securitySchemes: + bearerAuth: + type: http + scheme: bearer + + schemas: + + ElementId: + type: string + format: uuid + example: "00000000-0000-0000-0000-000000000000" + description: "Global unique identifier for any element" + + Element: + type: object + required: + - type + - id + - data + properties: + type: + type: string + example: Data + id: + $ref: '#/components/schemas/ElementId' + data: + type: object + additionalProperties: true + example: + created: "2025-09-27T10:39:51+00:00" + updated: "2025-09-27T10:39:51+00:00" + name: "some name" + file: + type: object + additionalProperties: true + readOnly: true + example: + contentLength: 63933 + extension: 'jpg' + mimeType: 'image/jpeg' + start: + $ref: '#/components/schemas/ElementId' + description: UUID of the start node. Required if end is present. + end: + $ref: '#/components/schemas/ElementId' + description: UUID of the end node. Required if start is present. + + Problem: + type: object + description: RFC 7807 Problem Details object. + properties: + type: + type: string + format: uri + title: + type: string + status: + type: integer + detail: + type: string + + examples: + + NotFoundProblemExample: + summary: Not found + value: + type: http://api/error/404/not-found + title: Not Found + status: 404 + detail: Requested element was not found. diff --git a/docs/open-api/swagger_template.json b/docs/open-api/swagger_template.json new file mode 100644 index 00000000..604a2d4b --- /dev/null +++ b/docs/open-api/swagger_template.json @@ -0,0 +1,10 @@ +{ + "openapi": "3.1.1", + "info": { + "title": "Ember Nexus API", + "version": "0.1.31" + }, + "components": { + "schemas": null + } +} \ No newline at end of file diff --git a/docs/search/example/cypher-path-subset/find-nested-elements/response-body.json b/docs/search/example/cypher-path-subset/find-nested-elements/response-body.json index 5b427658..4e6cdec7 100644 --- a/docs/search/example/cypher-path-subset/find-nested-elements/response-body.json +++ b/docs/search/example/cypher-path-subset/find-nested-elements/response-body.json @@ -7,8 +7,8 @@ "start": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "end": "b7cda919-deea-49f9-9151-49132f83cbff", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } }, @@ -18,8 +18,8 @@ "start": "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "end": "30cb4ff2-591f-4fba-aa47-ca6ada630b9a", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:17+00:00", + "updated": "2026-09-24T19:04:17+00:00", "scenario": "general.botanicExample" } }, @@ -27,9 +27,9 @@ "type": "Taxon", "id": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "data": { - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Gloriosa", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Colchicaceae/Gloriosa", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_(plant)", @@ -40,10 +40,10 @@ "type": "Taxon", "id": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { + "created": "2026-09-24T19:04:01+00:00", "description": "Liliales is an order of monocotyledonous flowering plants in the Angiosperm Phylogeny Group and Angiosperm Phylogeny Web system, within the lilioid monocots. This order of necessity includes the family Liliaceae. The APG III system (2009) places this order in the monocot clade. In APG III, the family Luzuriagaceae is combined with the family Alstroemeriaceae and the family Petermanniaceae is recognized. Both the order Lililiales and the family Liliaceae have had a widely disputed history, with the circumscription varying greatly from one taxonomist to another. Previous members of this order, which at one stage included most monocots with conspicuous tepals and lacking starch in the endosperm are now distributed over three orders, Liliales, Dioscoreales and Asparagales, using predominantly molecular phylogenetics. The newly delimited Liliales is monophyletic, with ten families. Well known plants from the order include Lilium (lily), tulip, the North American wildflower Trillium, and greenbrier.\n\nThus circumscribed, this order consists mostly of herbaceous plants, but lianas and shrubs also occur. They are mostly perennial plants, with food storage organs such as corms or rhizomes. The family Corsiaceae is notable for being heterotrophic.\n\nThe order has worldwide distribution. The larger families (with more than 100 species) are roughly confined to the Northern Hemisphere, or are distributed worldwide, centering on the north. On the other hand, the smaller families (with up to 10 species) are confined to the Southern Hemisphere, or sometimes just to Australia or South America. The total number of species in the order is now about 1768.\n\nAs with any herbaceous group, the fossil record of the Liliales is rather scarce. There are several species from the Eocene, such as Petermanniopsis anglesaensis or Smilax, but their identification is not definite. Another known fossil is Ripogonum scandens from the Miocene. Due to the scarcity of data, it seems impossible to determine precisely the age and the initial distribution of the order. It is assumed that the Liliales originate from the Lower Cretaceous, over 100 million years ago. Fossil aquatic plants from the Cretaceous of northeastern Brazil and a new terrestrial species placed in the new genus Cratosmilax suggest that the first species have appeared around 120 million years ago when the continents formed Pangea, before dispersing as Asia, Africa and America. The initial diversification to the current families took place between 82 and 48 million years ago. The order consists of 10 families, 67 genera and about 1,768 species.", - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", "name": "Liliales", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliales" @@ -53,9 +53,9 @@ "type": "Taxon", "id": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Lilieae", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilieae", @@ -66,6 +66,7 @@ "type": "Plant", "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Lilium candidum, Israel", @@ -80,19 +81,28 @@ "link": "https://en.wikipedia.org/wiki/File:Lilium_candidum_1.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "L. candidum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium_candidum", - "description": "Lilium candidum, the Madonna lily[2][3] or white lily,[4] is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions.[1][5] It has been cultivated since antiquity, for at least 3,000 years,[6] and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + "description": "Lilium candidum, the Madonna lily or white lily, is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions. It has been cultivated since antiquity, for at least 3,000 years, and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + }, + "file": { + "contentLength": 115168, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ee066b93ae72c719f863a428f03c86ecd28e52818528eacf4d4e32acb4b4b37c" + } } }, { "type": "Plant", "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "", @@ -107,22 +117,30 @@ "link": "https://en.wikipedia.org/wiki/File:Gloriosa_superba_1.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Flame Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "G. superba", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_superba", - "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily,[3] gloriosa lily, tiger claw,[4] and fire lily.[5]" + "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily, gloriosa lily, tiger claw, and fire lily." + }, + "file": { + "contentLength": 90681, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "72e3e3770db795b2f04f0b5bb0be43e74df70de4faa0bf83a706bbde29e4ea0b" + } } }, { "type": "Taxon", "id": "30cb4ff2-591f-4fba-aa47-ca6ada630b9a", "data": { - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Melanthiaceae", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Melanthiaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Melanthiaceae", @@ -133,10 +151,10 @@ "type": "Taxon", "id": "425235d6-75ab-4ccb-8208-783ced0decc6", "data": { + "created": "2026-09-24T19:04:01+00:00", "description": "The lily family, Liliaceae, consists of about 15 genera and 610 species of flowering plants within the order Liliales. They are monocotyledonous, perennial, herbaceous, often bulbous geophytes. Plants in this family have evolved with a fair amount of morphological diversity despite genetic similarity. Common characteristics include large flowers with parts arranged in threes: with six colored or patterned petaloid tepals (undifferentiated petals and sepals) arranged in two whorls, six stamens and a superior ovary. The leaves are linear in shape, with their veins usually arranged parallel to the edges, single and arranged alternating on the stem, or in a rosette at the base. Most species are grown from bulbs, although some have rhizomes. First described in 1789, the lily family became a paraphyletic \"catch-all\" (wastebasket) group of lilioid monocots that did not fit into other families and included a great number of genera now included in other families and in some cases in other orders. Consequently, many sources and descriptions labelled \"Liliaceae\" deal with the broader sense of the family.\n\nThe family evolved approximately 68 million years ago during the Late Cretaceous to Early Paleogene epochs. Liliaceae are widely distributed, mainly in temperate regions of the Northern Hemisphere and the flowers are insect pollinated. Many Liliaceae are important ornamental plants, widely grown for their attractive flowers and involved in a major floriculture of cut flowers and dry bulbs. Some species are poisonous if eaten and can have adverse health effects in humans and household pets.\n\nA number of Liliaceae genera are popular cultivated plants in private and public spaces. Lilies and tulips in particular have had considerable symbolic and decorative value, and appear frequently in paintings and the decorative arts. They are also an economically important product. Most of their genera, Lilium in particular, face considerable herbivory pressure from deer in some areas, both wild and domestic.", - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", "name": "Liliaceae", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliaceae" @@ -148,8 +166,8 @@ "start": "b7cda919-deea-49f9-9151-49132f83cbff", "end": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } }, @@ -157,6 +175,7 @@ "type": "Plant", "id": "70965ab5-bc3e-4bbe-aacf-1b7e12b76110", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "White trillium (Trillium grandiflorum) blooming in Backus Woods.", @@ -177,13 +196,21 @@ "link": "https://en.wikipedia.org/wiki/File:White_Trillium_Trillium_grandiflorum_Flower_2613px.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Trillium", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "T. grandiflorum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Trillium_grandiflorum", - "description": "Trillium grandiflorum, the white trillium,[3] large-flowered trillium, great white trillium,[4] white wake-robin or French: trille blanc, is a species of flowering plant in the family Melanthiaceae. A monocotyledonous, herbaceous perennial, the plant is native to eastern North America, from northern Quebec to the southern parts of the United States through the Appalachian Mountains into northernmost Georgia and west to Minnesota. There are also several isolated populations in Nova Scotia, Maine, southern Illinois, and Iowa.[5]" + "description": "Trillium grandiflorum, the white trillium, large-flowered trillium, great white trillium, white wake-robin or French: trille blanc, is a species of flowering plant in the family Melanthiaceae. A monocotyledonous, herbaceous perennial, the plant is native to eastern North America, from northern Quebec to the southern parts of the United States through the Appalachian Mountains into northernmost Georgia and west to Minnesota. There are also several isolated populations in Nova Scotia, Maine, southern Illinois, and Iowa." + }, + "file": { + "contentLength": 52082, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a235debeb572b5ab0cd3a84dfcf869dd558042dead656097fa5d414f2fee2b31" + } } }, { @@ -192,8 +219,8 @@ "start": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "end": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } }, @@ -201,9 +228,9 @@ "type": "Taxon", "id": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "data": { - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Lilium", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae/Lilium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium", @@ -216,8 +243,8 @@ "start": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "end": "8288a39a-4b41-4ed5-8d0f-0b795048163c", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } }, @@ -225,9 +252,9 @@ "type": "Taxon", "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", "data": { - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Lilioideae", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilioideae", @@ -238,6 +265,7 @@ "type": "Plant", "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "in Seoul Forest, South Korea", @@ -258,22 +286,30 @@ "link": "https://en.wikipedia.org/wiki/File:Tulipa_orphanidea_060506.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Tulip", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "Tulipa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Tulip", - "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae,[2] along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae, along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + }, + "file": { + "contentLength": 105488, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c4c242897c43a74e9e4a8b5bf89e6b2cb1cbd99f8d621f33eea175cbf6dfab97" + } } }, { "type": "Taxon", "id": "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "data": { - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Trillium", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Melanthiaceae/Trillium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Trillium", @@ -286,8 +322,8 @@ "start": "425235d6-75ab-4ccb-8208-783ced0decc6", "end": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } }, @@ -297,8 +333,8 @@ "start": "8288a39a-4b41-4ed5-8d0f-0b795048163c", "end": "425235d6-75ab-4ccb-8208-783ced0decc6", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } }, @@ -306,9 +342,9 @@ "type": "Taxon", "id": "b7cda919-deea-49f9-9151-49132f83cbff", "data": { - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Colchicaceae", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Colchicaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Colchicaceae", @@ -321,8 +357,8 @@ "start": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "end": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } }, @@ -332,8 +368,8 @@ "start": "23508e6c-632a-496d-9bd6-8c62a03216af", "end": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } }, @@ -343,8 +379,8 @@ "start": "70965ab5-bc3e-4bbe-aacf-1b7e12b76110", "end": "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:17+00:00", + "updated": "2026-09-24T19:04:17+00:00", "scenario": "general.botanicExample" } }, @@ -354,8 +390,8 @@ "start": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "end": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:17+00:00", + "updated": "2026-09-24T19:04:17+00:00", "scenario": "general.botanicExample" } }, @@ -365,8 +401,8 @@ "start": "30cb4ff2-591f-4fba-aa47-ca6ada630b9a", "end": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { - "created": "2025-09-25T18:43:22+00:00", - "updated": "2025-09-25T18:43:22+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } } @@ -381,9 +417,9 @@ } }, "step-handler": "cypher-path-subset (App\\EventSystem\\SearchStep\\EventListener\\CypherPathSearchStepEventListener)", - "start": 1758825856.933289, - "end": 1758825857.210775, - "duration": 0.27748584747314453 + "start": 1790276704.482475, + "end": 1790276704.941544, + "duration": 0.45906901359558105 }, { "input": { @@ -395,31 +431,27 @@ "paths": [ { "nodeIds": [ - "8940d70b-5b6f-43b7-bee4-41d073396ff8", - "1feedd9f-0c12-490c-8461-b12ff7447ac8", - "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "425235d6-75ab-4ccb-8208-783ced0decc6", + "258c0dfe-b1d8-4839-beed-d00d1b544a96", + "16884ac8-ba7a-4c91-8449-4fdd803644b6", + "b7cda919-deea-49f9-9151-49132f83cbff", "1852bdff-a4dd-4f91-9243-0e802775f757" ], "relationIds": [ - "ee29e267-63c8-45fb-a9a5-47835f46a839", - "81b19288-a74b-4496-84a9-0d07386b8e26", - "b60561b3-46d1-4632-9320-b0e02afa4198", - "9bea8667-ab81-48ff-871a-00334afc1a07" + "b9fee9e3-f0c5-451c-b9a6-f5a3578e023c", + "024e049b-219a-477c-9b8c-be1244c16dab", + "49d9a28c-b712-4be6-9cf1-11d2062ffa89" ] }, { "nodeIds": [ - "23508e6c-632a-496d-9bd6-8c62a03216af", - "7dd3a650-d60e-40c9-89d0-bccaf395369f", + "8940d70b-5b6f-43b7-bee4-41d073396ff8", "1feedd9f-0c12-490c-8461-b12ff7447ac8", "8288a39a-4b41-4ed5-8d0f-0b795048163c", "425235d6-75ab-4ccb-8208-783ced0decc6", "1852bdff-a4dd-4f91-9243-0e802775f757" ], "relationIds": [ - "e73faa5c-2c41-4d04-8a09-f160c4accea8", - "78228dfa-196a-48ef-9a46-e8fa5dc2628f", + "ee29e267-63c8-45fb-a9a5-47835f46a839", "81b19288-a74b-4496-84a9-0d07386b8e26", "b60561b3-46d1-4632-9320-b0e02afa4198", "9bea8667-ab81-48ff-871a-00334afc1a07" @@ -440,15 +472,19 @@ }, { "nodeIds": [ - "258c0dfe-b1d8-4839-beed-d00d1b544a96", - "16884ac8-ba7a-4c91-8449-4fdd803644b6", - "b7cda919-deea-49f9-9151-49132f83cbff", + "23508e6c-632a-496d-9bd6-8c62a03216af", + "7dd3a650-d60e-40c9-89d0-bccaf395369f", + "1feedd9f-0c12-490c-8461-b12ff7447ac8", + "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "425235d6-75ab-4ccb-8208-783ced0decc6", "1852bdff-a4dd-4f91-9243-0e802775f757" ], "relationIds": [ - "b9fee9e3-f0c5-451c-b9a6-f5a3578e023c", - "024e049b-219a-477c-9b8c-be1244c16dab", - "49d9a28c-b712-4be6-9cf1-11d2062ffa89" + "e73faa5c-2c41-4d04-8a09-f160c4accea8", + "78228dfa-196a-48ef-9a46-e8fa5dc2628f", + "81b19288-a74b-4496-84a9-0d07386b8e26", + "b60561b3-46d1-4632-9320-b0e02afa4198", + "9bea8667-ab81-48ff-871a-00334afc1a07" ] } ] @@ -457,7 +493,7 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825857.210962, + "start": 1790276704.941809, "element-hydration:redundantElementIds": { "message": "Removed 9 redundant elementIds.", "removedElementIds": [ @@ -497,8 +533,8 @@ "ee29e267-63c8-45fb-a9a5-47835f46a839", "ee933330-c413-4680-be79-03f51b18aa7b" ], - "end": 1758825857.318839, - "duration": 0.107877 + "end": 1790276705.080997, + "duration": 0.139188 } ] } \ No newline at end of file diff --git a/docs/search/example/cypher-path-subset/find-nested-elements/response-header.txt b/docs/search/example/cypher-path-subset/find-nested-elements/response-header.txt index 34499e40..64680a5c 100644 --- a/docs/search/example/cypher-path-subset/find-nested-elements/response-header.txt +++ b/docs/search/example/cypher-path-subset/find-nested-elements/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:03 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/cypher-path-subset/find-tagged-elements/response-body.json b/docs/search/example/cypher-path-subset/find-tagged-elements/response-body.json index d708ad9f..4f17cabe 100644 --- a/docs/search/example/cypher-path-subset/find-tagged-elements/response-body.json +++ b/docs/search/example/cypher-path-subset/find-tagged-elements/response-body.json @@ -5,6 +5,7 @@ "type": "Plant", "id": "78dd0a4d-2b94-4997-b4a4-353de854047c", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "Strelitzia reginae or Bird of Paradise", @@ -19,23 +20,31 @@ "link": "https://en.wikipedia.org/wiki/File:2010-03-05_13_16_21_Portugal-Jardim_Bot%C3%A2nico_da_Madeira.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Bird of Paradise", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "S. reginae", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Strelitzia_reginae", - "description": "Strelitzia reginae, commonly known as the crane flower, bird of paradise, or isigude in Nguni,[3] is a species of flowering plant native to the Cape Provinces and KwaZulu-Natal in South Africa. An evergreen perennial, it is widely cultivated for its dramatic flowers. In temperate areas it is a popular houseplant." + "description": "Strelitzia reginae, commonly known as the crane flower, bird of paradise, or isigude in Nguni, is a species of flowering plant native to the Cape Provinces and KwaZulu-Natal in South Africa. An evergreen perennial, it is widely cultivated for its dramatic flowers. In temperate areas it is a popular houseplant." + }, + "file": { + "contentLength": 63663, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "b2a4e02335603478ee1c5e9d551708e3d2f41cfc1e27059bf891409ca4e771df" + } } }, { "type": "Tag", "id": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "description": "Blue is one of the three primary colours in the RGB (additive) colour model, as well as in the RYB colour model (traditional colour theory).[2] It lies between violet and cyan on the spectrum of visible light. The term blue generally describes colours perceived by humans observing light with a dominant wavelength that's between approximately 450 and 495 nanometres. The clear daytime sky and the deep sea appear blue because of an optical effect known as Rayleigh scattering. An optical effect called the Tyndall effect explains blue eyes. Distant objects appear more blue because of another optical effect called aerial perspective.\n\nBlue has been an important colour in art and decoration since ancient times. The semi-precious stone lapis lazuli was used in ancient Egypt for jewellery and ornament and later, in the Renaissance, to make the pigment ultramarine, the most expensive of all pigments.[3] In the eighth century Chinese artists used cobalt blue to colour fine blue and white porcelain. In the Middle Ages, European artists used it in the windows of cathedrals. Europeans wore clothing coloured with the vegetable dye woad until it was replaced by the finer indigo from America. In the 19th century, synthetic blue dyes and pigments gradually replaced organic dyes and mineral pigments. Dark blue became a common colour for military uniforms and later, in the late 20th century, for business suits. Because blue has commonly been associated with harmony, it was chosen as the colour of the flags of the United Nations and the European Union.[4]\n\nIn the United States and Europe, blue is the colour that both men and women are most likely to choose as their favourite, with at least one recent survey showing the same across several other countries, including China, Malaysia, and Indonesia.[5][6] Past surveys in the US and Europe have found that blue is the colour most commonly associated with harmony, confidence, masculinity, knowledge, intelligence, calmness, distance, infinity, the imagination, cold, and sadness.[7]", - "created": "2025-09-25T18:43:12+00:00", - "updated": "2025-09-25T18:43:12+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Blue is one of the three primary colours in the RGB (additive) colour model, as well as in the RYB colour model (traditional colour theory). It lies between violet and cyan on the spectrum of visible light. The term blue generally describes colours perceived by humans observing light with a dominant wavelength that's between approximately 450 and 495 nanometres. The clear daytime sky and the deep sea appear blue because of an optical effect known as Rayleigh scattering. An optical effect called the Tyndall effect explains blue eyes. Distant objects appear more blue because of another optical effect called aerial perspective.\n\nBlue has been an important colour in art and decoration since ancient times. The semi-precious stone lapis lazuli was used in ancient Egypt for jewellery and ornament and later, in the Renaissance, to make the pigment ultramarine, the most expensive of all pigments. In the eighth century Chinese artists used cobalt blue to colour fine blue and white porcelain. In the Middle Ages, European artists used it in the windows of cathedrals. Europeans wore clothing coloured with the vegetable dye woad until it was replaced by the finer indigo from America. In the 19th century, synthetic blue dyes and pigments gradually replaced organic dyes and mineral pigments. Dark blue became a common colour for military uniforms and later, in the late 20th century, for business suits. Because blue has commonly been associated with harmony, it was chosen as the colour of the flags of the United Nations and the European Union.\n\nIn the United States and Europe, blue is the colour that both men and women are most likely to choose as their favourite, with at least one recent survey showing the same across several other countries, including China, Malaysia, and Indonesia. Past surveys in the US and Europe have found that blue is the colour most commonly associated with harmony, confidence, masculinity, knowledge, intelligence, calmness, distance, infinity, the imagination, cold, and sadness.", "name": "blue", + "updated": "2026-09-24T19:04:01+00:00", "color": "#4363d8", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Blue" @@ -45,6 +54,7 @@ "type": "Plant", "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Mertensia virginica Virginia Bluebell seen in Brooklyn Botanic Garden", @@ -59,19 +69,28 @@ "link": "https://en.wikipedia.org/wiki/File:Virginia_Bluebells_at_Rocky_River.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Bluebell", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "M. virginica", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Mertensia_virginica", - "description": "Mertensia virginica (common names Virginia bluebells,[1] Virginia cowslip,[2] lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + "description": "Mertensia virginica (common names Virginia bluebells, Virginia cowslip, lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + }, + "file": { + "contentLength": 82651, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "527fa0ca5006ae3c888c06c3e208db64aa0214b31ce9f26a1ccd5fa7cdf91c3b" + } } }, { "type": "Plant", "id": "884dd581-bcdd-43f1-9dab-11524578d9e2", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "Centaurea cyanus (introduced species) near Peshastin, Chelan County Washington", @@ -86,13 +105,21 @@ "link": "https://en.wikipedia.org/wiki/File:Bachelor%27s_button,_Basket_flower,_Boutonniere_flower,_Cornflower_-_3.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Cornflower", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "C. cyanus", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Centaurea_cyanus", - "description": "Centaurea cyanus, commonly known as cornflower or bachelor's button (among other names[note 1]), is an annual flowering plant in the family Asteraceae native to Europe. In the past, it often grew as a weed in cornfields (in the broad sense of \"corn\", referring to grains, such as wheat, barley, rye, or oats), hence its name. It is now endangered in its native habitat by agricultural intensification, particularly by over-use of herbicides. However, Centaurea cyanus is now also naturalised in many other parts of the world, including North America and parts of Australia through introduction as an ornamental plant in gardens and as a seed contaminant in crop seeds.[3]" + "description": "Centaurea cyanus, commonly known as cornflower or bachelor's button (among other names[note 1]), is an annual flowering plant in the family Asteraceae native to Europe. In the past, it often grew as a weed in cornfields (in the broad sense of \"corn\", referring to grains, such as wheat, barley, rye, or oats), hence its name. It is now endangered in its native habitat by agricultural intensification, particularly by over-use of herbicides. However, Centaurea cyanus is now also naturalised in many other parts of the world, including North America and parts of Australia through introduction as an ornamental plant in gardens and as a seed contaminant in crop seeds." + }, + "file": { + "contentLength": 88765, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c8ff4f7ef5afa6903c09b84e1824a1e296cfeae09f21a154536e562e9b7950c9" + } } }, { @@ -101,8 +128,8 @@ "start": "78dd0a4d-2b94-4997-b4a4-353de854047c", "end": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:12+00:00", + "updated": "2026-09-24T19:04:12+00:00", "scenario": "general.botanicExample" } }, @@ -110,6 +137,7 @@ "type": "Plant", "id": "ad80a619-2b53-4f27-a4bd-56a316c15251", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Jacarandas in New Farm Park October 2006", @@ -130,13 +158,21 @@ "link": "https://en.wikipedia.org/wiki/File:Jacaranda_mimosifolia_5334.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Jacaranda", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "J. mimosifolia", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Jacaranda_mimosifolia", - "description": "Jacaranda mimosifolia is a sub-tropical tree native to south-central South America that has been widely planted elsewhere because of its attractive and long-lasting violet-colored flowers. It is also known as the jacaranda, blue jacaranda, black poui, Nupur or fern tree. Older sources call it J. acutifolia, but modern authorities usually classify it as J. mimosifolia. In scientific usage, the name \"jacaranda\" refers to the genus Jacaranda, which has many other members, but in horticultural and everyday usage, it nearly always means the blue jacaranda.\n\nIn its native range in the wild, J. mimosifolia is listed as Vulnerable by the IUCN.[1]" + "description": "Jacaranda mimosifolia is a sub-tropical tree native to south-central South America that has been widely planted elsewhere because of its attractive and long-lasting violet-colored flowers. It is also known as the jacaranda, blue jacaranda, black poui, Nupur or fern tree. Older sources call it J. acutifolia, but modern authorities usually classify it as J. mimosifolia. In scientific usage, the name \"jacaranda\" refers to the genus Jacaranda, which has many other members, but in horticultural and everyday usage, it nearly always means the blue jacaranda.\n\nIn its native range in the wild, J. mimosifolia is listed as Vulnerable by the IUCN." + }, + "file": { + "contentLength": 174162, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "dc87ed191952b8a4bfec69ff9af4103c93d52f81e43c343bc8be1a2ddb61aa20" + } } }, { @@ -145,8 +181,8 @@ "start": "d747bfe6-0d52-4119-87c6-1fc37ed9395b", "end": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:12+00:00", + "updated": "2026-09-24T19:04:12+00:00", "scenario": "general.botanicExample" } }, @@ -154,6 +190,7 @@ "type": "Plant", "id": "d747bfe6-0d52-4119-87c6-1fc37ed9395b", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "Anchusa capensis in the San Francisco Botanical Garden", @@ -162,19 +199,28 @@ "link": "https://en.wikipedia.org/wiki/File:Anchusa_capensis_kz1.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "Cape Forget-me-not", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "A. capensis", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Anchusa_capensis", - "description": "Anchusa capensis, is a species of flowering plant in the family Boraginaceae, native to Namibia, South Africa and Lesotho.[1][2] The genus Anchusa is from the Greek word anchousa, which makes reference to its use as a dye base for cosmetic paint obtained from the roots of another plant in the genus Anchusa tinctoria. The species capensis translates to \\u2018from the Cape\\u2019 referring to South Africa[3]\n\nA. capensis typically reaches about 60 cm (24 in) tall, and grows best in full sun.[4] In summer, red buds open to reveal small, bright cobalt blue flowers with five petals and five white scales protecting the stigma and anthers.[5]\n\nIn the US, it grows well in zones 8\\u201311.[6] Cultivars include 'Dawn', with white, pink, mauve and blue flowers, 'Blue Angel', with dark blue flowers, and 'Blue Bird', taller and with indigo blue flowers.[7]" + "description": "Anchusa capensis, is a species of flowering plant in the family Boraginaceae, native to Namibia, South Africa and Lesotho. The genus Anchusa is from the Greek word anchousa, which makes reference to its use as a dye base for cosmetic paint obtained from the roots of another plant in the genus Anchusa tinctoria. The species capensis translates to \\u2018from the Cape\\u2019 referring to South Africa\n\nA. capensis typically reaches about 60 cm (24 in) tall, and grows best in full sun. In summer, red buds open to reveal small, bright cobalt blue flowers with five petals and five white scales protecting the stigma and anthers.\n\nIn the US, it grows well in zones 8\\u201311. Cultivars include 'Dawn', with white, pink, mauve and blue flowers, 'Blue Angel', with dark blue flowers, and 'Blue Bird', taller and with indigo blue flowers." + }, + "file": { + "contentLength": 75801, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "853580a14affe615f6fecbd2c16e8f6805ba53867669b3a220209a7b8d002cf1" + } } }, { "type": "Plant", "id": "ef54daa7-f62c-47ea-8762-fae02bd44485", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "My wonderful Saintpaulia", @@ -189,13 +235,21 @@ "link": "https://en.wikipedia.org/wiki/File:2007-04-20Saintpaulia_ionantha03.jpg" } ], - "created": "2025-09-25T18:43:14+00:00", - "updated": "2025-09-25T18:43:14+00:00", + "hasFile": true, "name": "African Violet", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "S. sect. Saintpaulia", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Streptocarpus_sect._Saintpaulia", - "description": "Streptocarpus sect. Saintpaulia is a section within Streptocarpus subgenus Streptocarpella[1] consisting of about ten species of herbaceous perennial flowering plants in the family Gesneriaceae, native to Tanzania and adjacent southeastern Kenya in eastern tropical Africa. The section was previously treated as a separate genus, Saintpaulia, but molecular phylogenetic studies showed that it was nested within the genus Streptocarpus.\n\nSpecies and cultivars are commonly called African violets (although they are not closely related to true violets) or saintpaulias. They are commonly sold as house plants." + "description": "Streptocarpus sect. Saintpaulia is a section within Streptocarpus subgenus Streptocarpella consisting of about ten species of herbaceous perennial flowering plants in the family Gesneriaceae, native to Tanzania and adjacent southeastern Kenya in eastern tropical Africa. The section was previously treated as a separate genus, Saintpaulia, but molecular phylogenetic studies showed that it was nested within the genus Streptocarpus.\n\nSpecies and cultivars are commonly called African violets (although they are not closely related to true violets) or saintpaulias. They are commonly sold as house plants." + }, + "file": { + "contentLength": 128977, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "d3e05a199cc6bba407eb6f91604c5a1cc1945a82fdf07f42a3f24d3834902406" + } } }, { @@ -204,8 +258,8 @@ "start": "ad80a619-2b53-4f27-a4bd-56a316c15251", "end": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:12+00:00", + "updated": "2026-09-24T19:04:12+00:00", "scenario": "general.botanicExample" } }, @@ -215,8 +269,8 @@ "start": "ef54daa7-f62c-47ea-8762-fae02bd44485", "end": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:12+00:00", + "updated": "2026-09-24T19:04:12+00:00", "scenario": "general.botanicExample" } }, @@ -226,8 +280,8 @@ "start": "884dd581-bcdd-43f1-9dab-11524578d9e2", "end": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:12+00:00", + "updated": "2026-09-24T19:04:12+00:00", "scenario": "general.botanicExample" } }, @@ -237,8 +291,8 @@ "start": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "end": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "created": "2025-09-25T18:43:24+00:00", - "updated": "2025-09-25T18:43:24+00:00", + "created": "2026-09-24T19:04:14+00:00", + "updated": "2026-09-24T19:04:14+00:00", "scenario": "general.botanicExample" } } @@ -253,9 +307,9 @@ } }, "step-handler": "cypher-path-subset (App\\EventSystem\\SearchStep\\EventListener\\CypherPathSearchStepEventListener)", - "start": 1758825857.489016, - "end": 1758825857.750409, - "duration": 0.26139283180236816 + "start": 1790276705.139105, + "end": 1790276705.562573, + "duration": 0.42346787452697754 }, { "input": { @@ -267,11 +321,11 @@ "paths": [ { "nodeIds": [ - "ad80a619-2b53-4f27-a4bd-56a316c15251", + "83b35321-4a91-4e9f-a49b-66d718c32ba7", "79ca27e5-93bb-43e6-a76b-096ea45e2e8e" ], "relationIds": [ - "f096b595-d67b-4600-9b88-a0255d55db32" + "f8d6e90d-455c-46d8-b02d-430ad02217ee" ] }, { @@ -285,20 +339,20 @@ }, { "nodeIds": [ - "884dd581-bcdd-43f1-9dab-11524578d9e2", + "d747bfe6-0d52-4119-87c6-1fc37ed9395b", "79ca27e5-93bb-43e6-a76b-096ea45e2e8e" ], "relationIds": [ - "f63ef383-ad99-48c6-9699-9d71c7c9cd16" + "cae5b040-b013-4cb3-9ecd-62fd6e30e46e" ] }, { "nodeIds": [ - "d747bfe6-0d52-4119-87c6-1fc37ed9395b", + "ad80a619-2b53-4f27-a4bd-56a316c15251", "79ca27e5-93bb-43e6-a76b-096ea45e2e8e" ], "relationIds": [ - "cae5b040-b013-4cb3-9ecd-62fd6e30e46e" + "f096b595-d67b-4600-9b88-a0255d55db32" ] }, { @@ -312,11 +366,11 @@ }, { "nodeIds": [ - "83b35321-4a91-4e9f-a49b-66d718c32ba7", + "884dd581-bcdd-43f1-9dab-11524578d9e2", "79ca27e5-93bb-43e6-a76b-096ea45e2e8e" ], "relationIds": [ - "f8d6e90d-455c-46d8-b02d-430ad02217ee" + "f63ef383-ad99-48c6-9699-9d71c7c9cd16" ] } ] @@ -325,7 +379,7 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825857.75059, + "start": 1790276705.562889, "element-hydration:redundantElementIds": { "message": "Removed 5 redundant elementIds.", "removedElementIds": [ @@ -347,8 +401,8 @@ "f63ef383-ad99-48c6-9699-9d71c7c9cd16", "f8d6e90d-455c-46d8-b02d-430ad02217ee" ], - "end": 1758825857.812404, - "duration": 0.061814 + "end": 1790276705.636983, + "duration": 0.074094 } ] } \ No newline at end of file diff --git a/docs/search/example/cypher-path-subset/find-tagged-elements/response-header.txt b/docs/search/example/cypher-path-subset/find-tagged-elements/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/cypher-path-subset/find-tagged-elements/response-header.txt +++ b/docs/search/example/cypher-path-subset/find-tagged-elements/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/cypher-path-subset/parameterized-cypher-search/response-header.txt b/docs/search/example/cypher-path-subset/parameterized-cypher-search/response-header.txt index 34499e40..32875628 100644 --- a/docs/search/example/cypher-path-subset/parameterized-cypher-search/response-header.txt +++ b/docs/search/example/cypher-path-subset/parameterized-cypher-search/response-header.txt @@ -1,8 +1,8 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 Date: Sat, 06 Sep 2025 14:57:35 GMT diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search/response-body.json b/docs/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search/response-body.json index 6ccbf08a..86dbb66b 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search/response-body.json +++ b/docs/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search/response-body.json @@ -5,10 +5,10 @@ "type": "Tag", "id": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "description": "Blue is one of the three primary colours in the RGB (additive) colour model, as well as in the RYB colour model (traditional colour theory).[2] It lies between violet and cyan on the spectrum of visible light. The term blue generally describes colours perceived by humans observing light with a dominant wavelength that's between approximately 450 and 495 nanometres. The clear daytime sky and the deep sea appear blue because of an optical effect known as Rayleigh scattering. An optical effect called the Tyndall effect explains blue eyes. Distant objects appear more blue because of another optical effect called aerial perspective.\n\nBlue has been an important colour in art and decoration since ancient times. The semi-precious stone lapis lazuli was used in ancient Egypt for jewellery and ornament and later, in the Renaissance, to make the pigment ultramarine, the most expensive of all pigments.[3] In the eighth century Chinese artists used cobalt blue to colour fine blue and white porcelain. In the Middle Ages, European artists used it in the windows of cathedrals. Europeans wore clothing coloured with the vegetable dye woad until it was replaced by the finer indigo from America. In the 19th century, synthetic blue dyes and pigments gradually replaced organic dyes and mineral pigments. Dark blue became a common colour for military uniforms and later, in the late 20th century, for business suits. Because blue has commonly been associated with harmony, it was chosen as the colour of the flags of the United Nations and the European Union.[4]\n\nIn the United States and Europe, blue is the colour that both men and women are most likely to choose as their favourite, with at least one recent survey showing the same across several other countries, including China, Malaysia, and Indonesia.[5][6] Past surveys in the US and Europe have found that blue is the colour most commonly associated with harmony, confidence, masculinity, knowledge, intelligence, calmness, distance, infinity, the imagination, cold, and sadness.[7]", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Blue is one of the three primary colours in the RGB (additive) colour model, as well as in the RYB colour model (traditional colour theory). It lies between violet and cyan on the spectrum of visible light. The term blue generally describes colours perceived by humans observing light with a dominant wavelength that's between approximately 450 and 495 nanometres. The clear daytime sky and the deep sea appear blue because of an optical effect known as Rayleigh scattering. An optical effect called the Tyndall effect explains blue eyes. Distant objects appear more blue because of another optical effect called aerial perspective.\n\nBlue has been an important colour in art and decoration since ancient times. The semi-precious stone lapis lazuli was used in ancient Egypt for jewellery and ornament and later, in the Renaissance, to make the pigment ultramarine, the most expensive of all pigments. In the eighth century Chinese artists used cobalt blue to colour fine blue and white porcelain. In the Middle Ages, European artists used it in the windows of cathedrals. Europeans wore clothing coloured with the vegetable dye woad until it was replaced by the finer indigo from America. In the 19th century, synthetic blue dyes and pigments gradually replaced organic dyes and mineral pigments. Dark blue became a common colour for military uniforms and later, in the late 20th century, for business suits. Because blue has commonly been associated with harmony, it was chosen as the colour of the flags of the United Nations and the European Union.\n\nIn the United States and Europe, blue is the colour that both men and women are most likely to choose as their favourite, with at least one recent survey showing the same across several other countries, including China, Malaysia, and Indonesia. Past surveys in the US and Europe have found that blue is the colour most commonly associated with harmony, confidence, masculinity, knowledge, intelligence, calmness, distance, infinity, the imagination, cold, and sadness.", "name": "blue", + "updated": "2026-09-24T19:04:01+00:00", "color": "#4363d8", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Blue" @@ -18,6 +18,7 @@ "type": "Plant", "id": "d747bfe6-0d52-4119-87c6-1fc37ed9395b", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "Anchusa capensis in the San Francisco Botanical Garden", @@ -26,23 +27,31 @@ "link": "https://en.wikipedia.org/wiki/File:Anchusa_capensis_kz1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Cape Forget-me-not", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "A. capensis", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Anchusa_capensis", - "description": "Anchusa capensis, is a species of flowering plant in the family Boraginaceae, native to Namibia, South Africa and Lesotho.[1][2] The genus Anchusa is from the Greek word anchousa, which makes reference to its use as a dye base for cosmetic paint obtained from the roots of another plant in the genus Anchusa tinctoria. The species capensis translates to \\u2018from the Cape\\u2019 referring to South Africa[3]\n\nA. capensis typically reaches about 60 cm (24 in) tall, and grows best in full sun.[4] In summer, red buds open to reveal small, bright cobalt blue flowers with five petals and five white scales protecting the stigma and anthers.[5]\n\nIn the US, it grows well in zones 8\\u201311.[6] Cultivars include 'Dawn', with white, pink, mauve and blue flowers, 'Blue Angel', with dark blue flowers, and 'Blue Bird', taller and with indigo blue flowers.[7]" + "description": "Anchusa capensis, is a species of flowering plant in the family Boraginaceae, native to Namibia, South Africa and Lesotho. The genus Anchusa is from the Greek word anchousa, which makes reference to its use as a dye base for cosmetic paint obtained from the roots of another plant in the genus Anchusa tinctoria. The species capensis translates to \\u2018from the Cape\\u2019 referring to South Africa\n\nA. capensis typically reaches about 60 cm (24 in) tall, and grows best in full sun. In summer, red buds open to reveal small, bright cobalt blue flowers with five petals and five white scales protecting the stigma and anthers.\n\nIn the US, it grows well in zones 8\\u201311. Cultivars include 'Dawn', with white, pink, mauve and blue flowers, 'Blue Angel', with dark blue flowers, and 'Blue Bird', taller and with indigo blue flowers." + }, + "file": { + "contentLength": 75801, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "853580a14affe615f6fecbd2c16e8f6805ba53867669b3a220209a7b8d002cf1" + } } }, { "type": "Taxon", "id": "97157162-56eb-4374-8200-41b9b6004ca2", "data": { + "created": "2026-09-24T19:04:01+00:00", "description": "Boraginaceae, the borage or forget-me-not family, includes about 2,000 species of shrubs, trees, and herbs in 146 to 154 genera with a worldwide distribution.\n\nThe APG IV system from 2016 classifies the Boraginaceae as single family of the order Boraginales within the asterids. Under the older Cronquist system, it was included in the Lamiales, but clearly is no more similar to the other families in this order than it is to families in several other asterid orders. A revision of the Boraginales, also from 2016, split the Boraginaceae into 11 distinct families: Boraginaceae sensu stricto, Codonaceae, Coldeniaceae, Cordiaceae, Ehretiaceae, Heliotropiaceae, Hoplestigmataceae, Hydrophyllaceae, Lennoaceae, Namaceae, and Wellstediaceae.\n\nThese plants have alternately arranged leaves, or a combination of alternate and opposite leaves. The leaf blades usually have a narrow shape; many are linear or lance-shaped. They are smooth-edged or toothed, and some have petioles. Most species have bisexual flowers, but some taxa are dioecious. Most pollination is by hymenopterans, such as bees. Most species have inflorescences that have a coiling shape, at least when new, called scorpioid cymes. The flower has a usually five-lobed calyx. The corolla varies in shape from rotate to bell-shaped to tubular, but it generally has five lobes. It can be green, white, yellow, orange, pink, purple, or blue. There are five stamens and one style with one or two stigmas. The fruit is a drupe, sometimes fleshy.\n\nMost members of this family have hairy leaves. The coarse character of the hairs is due to cystoliths of silicon dioxide and calcium carbonate. These hairs can induce an adverse skin reaction, including itching and rash in some individuals, particularly among people who handle the plants regularly, such as gardeners. In some species, anthocyanins cause the flowers to change color from red to blue with age. This may be a signal to pollinators that a flower is old and depleted of pollen and nectar.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Boraginaceae", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Boraginales/Boraginaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Boraginaceae" @@ -52,9 +61,9 @@ "type": "Taxon", "id": "36e02d35-f6b4-4ccc-ae2f-b035ef02e0d6", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Dahlia", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Asterales/Asteraceae/Dahlia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Dahlia", @@ -65,6 +74,7 @@ "type": "Plant", "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Mertensia virginica Virginia Bluebell seen in Brooklyn Botanic Garden", @@ -79,19 +89,28 @@ "link": "https://en.wikipedia.org/wiki/File:Virginia_Bluebells_at_Rocky_River.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Bluebell", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "M. virginica", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Mertensia_virginica", - "description": "Mertensia virginica (common names Virginia bluebells,[1] Virginia cowslip,[2] lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + "description": "Mertensia virginica (common names Virginia bluebells, Virginia cowslip, lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + }, + "file": { + "contentLength": 82651, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "527fa0ca5006ae3c888c06c3e208db64aa0214b31ce9f26a1ccd5fa7cdf91c3b" + } } }, { "type": "Plant", "id": "ad80a619-2b53-4f27-a4bd-56a316c15251", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Jacarandas in New Farm Park October 2006", @@ -112,19 +131,28 @@ "link": "https://en.wikipedia.org/wiki/File:Jacaranda_mimosifolia_5334.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Jacaranda", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "J. mimosifolia", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Jacaranda_mimosifolia", - "description": "Jacaranda mimosifolia is a sub-tropical tree native to south-central South America that has been widely planted elsewhere because of its attractive and long-lasting violet-colored flowers. It is also known as the jacaranda, blue jacaranda, black poui, Nupur or fern tree. Older sources call it J. acutifolia, but modern authorities usually classify it as J. mimosifolia. In scientific usage, the name \"jacaranda\" refers to the genus Jacaranda, which has many other members, but in horticultural and everyday usage, it nearly always means the blue jacaranda.\n\nIn its native range in the wild, J. mimosifolia is listed as Vulnerable by the IUCN.[1]" + "description": "Jacaranda mimosifolia is a sub-tropical tree native to south-central South America that has been widely planted elsewhere because of its attractive and long-lasting violet-colored flowers. It is also known as the jacaranda, blue jacaranda, black poui, Nupur or fern tree. Older sources call it J. acutifolia, but modern authorities usually classify it as J. mimosifolia. In scientific usage, the name \"jacaranda\" refers to the genus Jacaranda, which has many other members, but in horticultural and everyday usage, it nearly always means the blue jacaranda.\n\nIn its native range in the wild, J. mimosifolia is listed as Vulnerable by the IUCN." + }, + "file": { + "contentLength": 174162, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "dc87ed191952b8a4bfec69ff9af4103c93d52f81e43c343bc8be1a2ddb61aa20" + } } }, { "type": "Plant", "id": "26dfaa98-5f15-4170-9fdc-94661c1a26c5", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "", @@ -133,23 +161,31 @@ "link": "https://en.wikipedia.org/wiki/File:Eustoma_grandiflorum_purple_02.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Prairie Gentian", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "E. russellianum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Eustoma_russellianum", - "description": "Eustoma russellianum is a species of flowering plant in the gentian family. One of its previous binomial names was Eustoma grandiflorum.[1] Common names include showy prairie gentian, prairie gentian, Texas bluebells, Texas bluebell, bluebell,[2] and Lisianthus.\n\nThere is a cultivar, 'Bolero Deep Blue'.[3]" + "description": "Eustoma russellianum is a species of flowering plant in the gentian family. One of its previous binomial names was Eustoma grandiflorum. Common names include showy prairie gentian, prairie gentian, Texas bluebells, Texas bluebell, bluebell, and Lisianthus.\n\nThere is a cultivar, 'Bolero Deep Blue'." + }, + "file": { + "contentLength": 104134, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "9bbf4efc14d13cb8c268901d0d6395a8745664312a7961d673695072bdb709fb" + } } }, { "type": "Taxon", "id": "30b0e9bc-8c9f-42e2-91c5-62f04b7da3be", "data": { + "created": "2026-09-24T19:04:01+00:00", "description": "The genus Anchusa belongs to the borage family (Boraginaceae). It includes about 35 species found growing in Europe, North Africa, South Africa and Western Asia. They are introduced in the United States.\n\nThey consist of annual plants, biennial plants and perennial plants with the general characteristics of the borage family. They are commonly herbaceous. The leaves are simple or undulate, covered with stiff hairs.\n\nThe small radially symmetrical flowers are sapphire blue and retain their colour a long time. The plants show numerous flowers with five sepals, united at their bases, and five petals forming a narrow tube facing upwards. The flowers grow in several axillary cymes, simple or branched, or are clustered at the end. The flowers are much frequented by bees.\n\nThe genus Anchusa is commonly used in trough or rock gardens.\n\nThe roots of Anchusa (just like those of Alkanna and Lithospermum) contain anchusin (or alkanet-red), a red-brown resinoid colouring matter. It is insoluble in water, but soluble in alcohol, chloroform and ether.\n\nAnchusa species are used as food plants by the larvae of some Lepidoptera species including Coleophora pennella.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Anchusa", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Boraginales/Boraginaceae/Anchusa", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Anchusa" @@ -159,10 +195,10 @@ "type": "Taxon", "id": "7359834e-c79c-4773-89ac-46befceb5f72", "data": { + "created": "2026-09-24T19:04:01+00:00", "description": "Actinotus is a genus of flowering plants in the family Apiaceae, subfamily Mackinlayoideae, with about 18 species. It is native to Australasia. Its best known member is the flannel flower, a common sight in Sydney bushland in the spring. The generic name, meaning \"furnished with rays\" is derived from the Greek stem aktin-/ακτιν- \"ray\" or \"sunbeam\".\n\nMost species are endemic to Australia with one from New Zealand. Other notable species are A. schwarzii from the Macdonnell Ranges in Central Australia, which closely resembles A. helianthi in appearance, and the rare pink-flowering A. forsythii from the Blue Mountains.\n\nThe genus was established by the French botanist Jacques Labillardière with his description of A. helianthi on page 67 of the first volume of his Novae Hollandiae Plantarum Specimen. However the habitat statement is anomalous and according to historian Edward Duyker Labillardière could not have collected the type specimen personally and might have received it from Jean-Baptiste Leschenault de La Tour botanist on the expedition of Nicolas Baudin or another early French visitor to New South Wales.\n\nIts closest relative is Apiopetalum from New Caledonia.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Actinotus", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Apiales/Apiaceae/Actinotus", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Actinotus" @@ -172,10 +208,10 @@ "type": "Taxon", "id": "3a123b1c-8bdc-482c-9d12-c3e9e22ec4fd", "data": { + "created": "2026-09-24T19:04:01+00:00", "description": "Mertensia is a genus of flowering plants in the borage family Boraginaceae. They are perennial herbaceous plants with blue or sometimes white flowers that open from pink-tinged buds. Such a change in flower color is common in Boraginaceae and is caused by changes in soil pH. Mertensia is one of several plants that are commonly called \"bluebell\". In spite of their common name, the flowers are usually salverform (trumpet-shaped) rather than campanulate (bell-shaped).\n\nMertensia is native to most of North America and to a large part of Asia from western China to northeastern Russia. Its center of diversity is in the Rocky Mountains. Mertensia is mostly restricted to alpine, subalpine, and montane habitats. Notable exceptions are Mertensia maritima, a maritime plant of Arctic and subarctic coastlines, and Mertensia virginica, which is found from the Appalachian Mountains west to Minnesota, Iowa, and Missouri. Most of the species are endemic to very small areas of the Rocky Mountains.\n\nMertensia virginica has the largest flowers in the genus and is commonly cultivated. It is sparingly naturalized in Europe. About 12 other species are known in cultivation. The Inuit ate the rhizomes of Mertensia maritima.\n\nMany of the species of Mertensia are hard to distinguish and some are possibly cryptic. Around 150 species names have been published in Mertensia. Most authors have recognized about 45 species, but in 2014, the authors of a molecular phylogenetic study recommended the acceptance of at least 62.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Mertensia", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Boraginales/Boraginaceae/Mertensia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Mertensia" @@ -185,6 +221,7 @@ "type": "Plant", "id": "152d527e-4e33-4ad4-b13b-1de643740cce", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Mimosa, Silver Wattle", @@ -193,22 +230,30 @@ "link": "https://en.wikipedia.org/wiki/File:Acacia_dealbata-1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Acacia", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "A. dealbata", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Acacia_dealbata", - "description": "Acacia dealbata, commonly known as silver wattle, blue wattle or mimosa,[2] is a species of flowering plant in the legume family, Fabaceae and is endemic to south-eastern mainland Australia. It is a bushy shrub or spreading tree with smooth bark, bluish grey or silvery and glaucous bipinnate leaves, spherical heads of yellow to bright yellow flowers, and straight to slightly curved pods. The Wiradjuri people of New South Wales use the name giigandul for the species.[3]" + "description": "Acacia dealbata, commonly known as silver wattle, blue wattle or mimosa, is a species of flowering plant in the legume family, Fabaceae and is endemic to south-eastern mainland Australia. It is a bushy shrub or spreading tree with smooth bark, bluish grey or silvery and glaucous bipinnate leaves, spherical heads of yellow to bright yellow flowers, and straight to slightly curved pods. The Wiradjuri people of New South Wales use the name giigandul for the species." + }, + "file": { + "contentLength": 133952, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c33c0c115ef2182e02533fd8fc4868f58ffaaf5ba212e4dcf9ec7c71020f2aba" + } } }, { "type": "Tag", "id": "3e5b01a7-5856-461e-bde5-d8388b6d909c", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "navy", + "updated": "2026-09-24T19:04:01+00:00", "color": "#000075", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Navy_blue", @@ -219,23 +264,23 @@ "type": "Tag", "id": "25d0c9a8-8864-42bd-9ea1-6157fb688998", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "cyan", + "updated": "2026-09-24T19:04:01+00:00", "color": "#42d4f4", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Cyan", - "description": "Cyan (/\\u02c8sa\\u026a.\\u0259n, -\\u00e6n/)[2][3][4] is the color between blue and green on the visible spectrum of light.[5][6] It is evoked by light with a predominant wavelength between 500 and 520 nm, between the wavelengths of green and blue.[7]\n\nIn the subtractive color system, or CMYK color model, which can be overlaid to produce all colors in paint and color printing, cyan is one of the primary colors, along with magenta and yellow. In the additive color system, or RGB color model, used to create all the colors on a computer or television display, cyan is made by mixing equal amounts of green and blue light. Cyan is the complement of red; it can be made by the removal of red from white. Mixing red light and cyan light at the right intensity will make white light. It is commonly seen on a bright, sunny day in the sky." + "description": "Cyan (/\\u02c8sa\\u026a.\\u0259n, -\\u00e6n/) is the color between blue and green on the visible spectrum of light. It is evoked by light with a predominant wavelength between 500 and 520 nm, between the wavelengths of green and blue.\n\nIn the subtractive color system, or CMYK color model, which can be overlaid to produce all colors in paint and color printing, cyan is one of the primary colors, along with magenta and yellow. In the additive color system, or RGB color model, used to create all the colors on a computer or television display, cyan is made by mixing equal amounts of green and blue light. Cyan is the complement of red; it can be made by the removal of red from white. Mixing red light and cyan light at the right intensity will make white light. It is commonly seen on a bright, sunny day in the sky." } }, { "type": "Tag", "id": "bbc7529f-72da-4df2-aff5-e139a5618ccb", "data": { - "description": "Brown is a color. It can be thought as a darker, and usually desaturated, shade of orange. In the CMYK color model used in printing and painting, brown is usually made by combining yellow, magenta, and black inks (these two last in a lesser amount).[4][5][6]\n\nIn the RGB color model used to project colors onto television screens and computer monitors, brown is the result of combining red light at low intensity, and green light at an even lower intensity, with blue light also being present in most shades of the color. The color brown is seen widely in nature, wood, soil, human hair color, eye color and skin pigmentation. Brown is the color of dark wood or rich soil.[7]\n\nIn the RYB color model, brown is made by mixing the three primary colors, red, yellow, and blue.\n\nAccording to public opinion surveys in Europe and the United States, brown is the least favorite color of the public; it is often associated with fecal matter, plainness, the rustic, although it does also have positive associations, including baking, warmth, wildlife, the autumn and music.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Brown is a color. It can be thought as a darker, and usually desaturated, shade of orange. In the CMYK color model used in printing and painting, brown is usually made by combining yellow, magenta, and black inks (these two last in a lesser amount).\n\nIn the RGB color model used to project colors onto television screens and computer monitors, brown is the result of combining red light at low intensity, and green light at an even lower intensity, with blue light also being present in most shades of the color. The color brown is seen widely in nature, wood, soil, human hair color, eye color and skin pigmentation. Brown is the color of dark wood or rich soil.\n\nIn the RYB color model, brown is made by mixing the three primary colors, red, yellow, and blue.\n\nAccording to public opinion surveys in Europe and the United States, brown is the least favorite color of the public; it is often associated with fecal matter, plainness, the rustic, although it does also have positive associations, including baking, warmth, wildlife, the autumn and music.", "name": "brown", + "updated": "2026-09-24T19:04:01+00:00", "color": "#9a6324", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Brown" @@ -245,10 +290,10 @@ "type": "Tag", "id": "b8674d32-af5f-4ef1-a5d8-fc5cbb56b795", "data": { - "description": "Purple is a color similar in appearance to violet light. In the RYB color model historically used in the arts, purple is a secondary color created by combining red and blue pigments. In the CMYK color model used in modern printing, purple is made by combining magenta pigment with either cyan pigment, black pigment, or both. In the RGB color model used in computer and television screens, purple is created by mixing red and blue light in order to create colors that appear similar to violet light. According to color theory, purple is considered a cool color.[1]\n\nPurple has long been associated with royalty, originally because Tyrian purple dye\\u2014made from the secretions of sea snails\\u2014was extremely expensive in antiquity.[2] Purple was the color worn by Roman magistrates; it became the imperial color worn by the rulers of the Byzantine Empire and the Holy Roman Empire, and later by Roman Catholic bishops. Similarly in Japan, the color is traditionally associated with the emperor and aristocracy.[3]\n\nAccording to contemporary surveys in Europe and the United States, purple is the color most often associated with rarity, royalty, luxury, ambition, magic, mystery, piety and spirituality.[4][5] When combined with pink, it is associated with eroticism, femininity, and seduction.[6]\nEtymology and definitions\n\nThe modern English word purple comes from the Old English purpul, which derives from Latin purpura, which, in turn, derives from the Greek \\u03c0\\u03bf\\u03c1\\u03c6\\u03cd\\u03c1\\u03b1 (porphura),[7] the name of the Tyrian purple dye manufactured in classical antiquity from a mucus secreted by the spiny dye-murex snail.[8][9] The first recorded use of the word purple dates to the late 900s AD.[8]", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Purple is a color similar in appearance to violet light. In the RYB color model historically used in the arts, purple is a secondary color created by combining red and blue pigments. In the CMYK color model used in modern printing, purple is made by combining magenta pigment with either cyan pigment, black pigment, or both. In the RGB color model used in computer and television screens, purple is created by mixing red and blue light in order to create colors that appear similar to violet light. According to color theory, purple is considered a cool color.\n\nPurple has long been associated with royalty, originally because Tyrian purple dye\\u2014made from the secretions of sea snails\\u2014was extremely expensive in antiquity. Purple was the color worn by Roman magistrates; it became the imperial color worn by the rulers of the Byzantine Empire and the Holy Roman Empire, and later by Roman Catholic bishops. Similarly in Japan, the color is traditionally associated with the emperor and aristocracy.\n\nAccording to contemporary surveys in Europe and the United States, purple is the color most often associated with rarity, royalty, luxury, ambition, magic, mystery, piety and spirituality. When combined with pink, it is associated with eroticism, femininity, and seduction.\nEtymology and definitions\n\nThe modern English word purple comes from the Old English purpul, which derives from Latin purpura, which, in turn, derives from the Greek \\u03c0\\u03bf\\u03c1\\u03c6\\u03cd\\u03c1\\u03b1 (porphura), the name of the Tyrian purple dye manufactured in classical antiquity from a mucus secreted by the spiny dye-murex snail. The first recorded use of the word purple dates to the late 900s AD.", "name": "purple", + "updated": "2026-09-24T19:04:01+00:00", "color": "#911eb4", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Purple" @@ -258,23 +303,23 @@ "type": "Tag", "id": "b7121a49-8f17-4858-b988-4bd837a5f1fe", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "lavender", + "updated": "2026-09-24T19:04:01+00:00", "color": "#dcbeff", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lavender_(color)", - "description": "Lavender is a light shade of purple or violet. It applies particularly to the color of the flower of the same name. The web color called lavender is displayed adjacent\\u2014it matches the color of the palest part of the flower; however, the more saturated color shown as floral lavender more closely matches the average color of the lavender flower as shown in the picture and is the tone of lavender historically and traditionally considered lavender by average people as opposed to website designers.[3] The color lavender might be described as a medium purple, a pale bluish purple,[4] or a light pinkish-purple. The term lavender may be used in general to apply to a wide range of pale, light, or grayish-purples, but only on the blue side; lilac is pale purple on the pink side. In paints, the color lavender is made by mixing purple and white paint." + "description": "Lavender is a light shade of purple or violet. It applies particularly to the color of the flower of the same name. The web color called lavender is displayed adjacent\\u2014it matches the color of the palest part of the flower; however, the more saturated color shown as floral lavender more closely matches the average color of the lavender flower as shown in the picture and is the tone of lavender historically and traditionally considered lavender by average people as opposed to website designers. The color lavender might be described as a medium purple, a pale bluish purple, or a light pinkish-purple. The term lavender may be used in general to apply to a wide range of pale, light, or grayish-purples, but only on the blue side; lilac is pale purple on the pink side. In paints, the color lavender is made by mixing purple and white paint." } }, { "type": "Tag", "id": "12de56ab-8e89-4281-ab44-403c7c7ecb00", "data": { - "description": "Magenta (/m\\u0259\\u02c8d\\u0292\\u025bnt\\u0259/) is a purple-red color.[2][3] On color wheels of the RGB (additive) and CMY (subtractive) color models, it is located precisely midway between blue and red. It is one of the four colors of ink used in color printing by most color printers, along with yellow, cyan, and black to make all the other colors. The tone of magenta used in printing, printer's magenta, is redder than the magenta of the RGB (additive) model, the former being closer to rose.\n\nMagenta took its name from an aniline dye made and patented in 1859 by the French chemist Fran\\u00e7ois-Emmanuel Verguin, who originally called it fuchsine. It was renamed to celebrate the French-Sardinian victory under French Emperor Napoleon III at the Battle of Magenta against the larger army of the Austrian Empire on 4 June 1859 near the Italian town of Magenta, at the time in Austria. This battle was decisive in liberating Italy from Austrian domination.[4][5]\n\nA virtually identical color, called roseine, was created in 1860 by two British chemists, Edward Chambers Nicholson, and George Maule.\n\nThe web color magenta is also called fuchsia.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Magenta (/m\\u0259\\u02c8d\\u0292\\u025bnt\\u0259/) is a purple-red color. On color wheels of the RGB (additive) and CMY (subtractive) color models, it is located precisely midway between blue and red. It is one of the four colors of ink used in color printing by most color printers, along with yellow, cyan, and black to make all the other colors. The tone of magenta used in printing, printer's magenta, is redder than the magenta of the RGB (additive) model, the former being closer to rose.\n\nMagenta took its name from an aniline dye made and patented in 1859 by the French chemist Fran\\u00e7ois-Emmanuel Verguin, who originally called it fuchsine. It was renamed to celebrate the French-Sardinian victory under French Emperor Napoleon III at the Battle of Magenta against the larger army of the Austrian Empire on 4 June 1859 near the Italian town of Magenta, at the time in Austria. This battle was decisive in liberating Italy from Austrian domination.\n\nA virtually identical color, called roseine, was created in 1860 by two British chemists, Edward Chambers Nicholson, and George Maule.\n\nThe web color magenta is also called fuchsia.", "name": "magenta", + "updated": "2026-09-24T19:04:01+00:00", "color": "#f032e6", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magenta" @@ -284,10 +329,10 @@ "type": "Tag", "id": "90819566-3121-42af-bdb5-19cbef67cd31", "data": { - "description": "White is the lightest color[2] and is achromatic (having no chroma). It is the color of objects such as snow, chalk, and milk, and is the opposite of black. White objects fully (or almost fully) reflect and scatter all the visible wavelengths of light. White on television and computer screens is created by a mixture of red, blue, and green light. The color white can be given with white pigments, especially titanium dioxide.[3]\n\nIn ancient Egypt and ancient Rome, priestesses wore white as a symbol of purity, and Romans wore white togas as symbols of citizenship. In the Middle Ages and Renaissance a white unicorn symbolized chastity, and a white lamb sacrifice and purity. It was the royal color of the kings of France as well as the flag of monarchist France from 1815 to 1830, and of the monarchist movement that opposed the Bolsheviks during the Russian Civil War (1917\\u20131922). Greek temples and Roman temples were faced with white marble, and beginning in the 18th century, with the advent of neoclassical architecture, white became the most common color of new churches, capitols, and other government buildings, especially in the United States. It was also widely used in 20th century modern architecture as a symbol of modernity and simplicity.\n\nAccording to surveys in Europe and the United States, white is the color most often associated with perfection, the good, honesty, cleanliness, the beginning, the new, neutrality, and exactitude.[4] White is an important color for almost all world religions. The pope, the head of the Roman Catholic Church, has worn white since 1566, as a symbol of purity and sacrifice. In Islam, and in the Shinto religion of Japan, it is worn by pilgrims. In Western cultures and in Japan, white is the most common color for wedding dresses, symbolizing purity and virginity. In many Asian cultures, white is also the color of mourning.[5]", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "White is the lightest color and is achromatic (having no chroma). It is the color of objects such as snow, chalk, and milk, and is the opposite of black. White objects fully (or almost fully) reflect and scatter all the visible wavelengths of light. White on television and computer screens is created by a mixture of red, blue, and green light. The color white can be given with white pigments, especially titanium dioxide.\n\nIn ancient Egypt and ancient Rome, priestesses wore white as a symbol of purity, and Romans wore white togas as symbols of citizenship. In the Middle Ages and Renaissance a white unicorn symbolized chastity, and a white lamb sacrifice and purity. It was the royal color of the kings of France as well as the flag of monarchist France from 1815 to 1830, and of the monarchist movement that opposed the Bolsheviks during the Russian Civil War (1917\\u20131922). Greek temples and Roman temples were faced with white marble, and beginning in the 18th century, with the advent of neoclassical architecture, white became the most common color of new churches, capitols, and other government buildings, especially in the United States. It was also widely used in 20th century modern architecture as a symbol of modernity and simplicity.\n\nAccording to surveys in Europe and the United States, white is the color most often associated with perfection, the good, honesty, cleanliness, the beginning, the new, neutrality, and exactitude. White is an important color for almost all world religions. The pope, the head of the Roman Catholic Church, has worn white since 1566, as a symbol of purity and sacrifice. In Islam, and in the Shinto religion of Japan, it is worn by pilgrims. In Western cultures and in Japan, white is the most common color for wedding dresses, symbolizing purity and virginity. In many Asian cultures, white is also the color of mourning.", "name": "white", + "updated": "2026-09-24T19:04:01+00:00", "color": "#ffffff", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/White" @@ -297,10 +342,10 @@ "type": "Tag", "id": "be14916b-0068-4b49-b8d0-f9e528f3d10e", "data": { - "description": "Yellow is the color between green and orange on the spectrum of light. It is evoked by light with a dominant wavelength of roughly 575\\u2013585 nm. It is a primary color in subtractive color systems, used in painting or color printing. In the RGB color model, used to create colors on television and computer screens, yellow is a secondary color made by combining red and green at equal intensity. Carotenoids give the characteristic yellow color to autumn leaves, corn, canaries, daffodils, and lemons, as well as egg yolks, buttercups, and bananas. They absorb light energy and protect plants from photo damage in some cases.[3] Sunlight has a slight yellowish hue when the Sun is near the horizon, due to atmospheric scattering of shorter wavelengths (green, blue, and violet).\n\nBecause it was widely available, yellow ochre pigment was one of the first colors used in art; the Lascaux cave in France has a painting of a yellow horse 17,000 years old. Ochre and orpiment pigments were used to represent gold and skin color in Egyptian tombs, then in the murals in Roman villas.[4] In the early Christian church, yellow was the color associated with the Pope and the golden keys of the Kingdom, but it was also associated with Judas Iscariot and used to mark heretics. In the 20th century, Jews in Nazi-occupied Europe were forced to wear a yellow star. In China, bright yellow was the color of the Middle Kingdom, and could be worn only by the emperor and his household; special guests were welcomed on a yellow carpet.[5]\n\nAccording to surveys in Europe, Canada, the United States and elsewhere, yellow is the color people most often associate with amusement, gentleness, humor, happiness, and spontaneity; however it can also be associated with duplicity, envy, jealousy, greed, justice, and, in the U.S., cowardice.[6] In Iran it has connotations of pallor/sickness,[7] but also wisdom and connection.[8] In China and many Asian countries, it is seen as the color of royalty, nobility, respect, happiness, glory, harmony and wisdom.[9]", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Yellow is the color between green and orange on the spectrum of light. It is evoked by light with a dominant wavelength of roughly 575\\u2013585 nm. It is a primary color in subtractive color systems, used in painting or color printing. In the RGB color model, used to create colors on television and computer screens, yellow is a secondary color made by combining red and green at equal intensity. Carotenoids give the characteristic yellow color to autumn leaves, corn, canaries, daffodils, and lemons, as well as egg yolks, buttercups, and bananas. They absorb light energy and protect plants from photo damage in some cases. Sunlight has a slight yellowish hue when the Sun is near the horizon, due to atmospheric scattering of shorter wavelengths (green, blue, and violet).\n\nBecause it was widely available, yellow ochre pigment was one of the first colors used in art; the Lascaux cave in France has a painting of a yellow horse 17,000 years old. Ochre and orpiment pigments were used to represent gold and skin color in Egyptian tombs, then in the murals in Roman villas. In the early Christian church, yellow was the color associated with the Pope and the golden keys of the Kingdom, but it was also associated with Judas Iscariot and used to mark heretics. In the 20th century, Jews in Nazi-occupied Europe were forced to wear a yellow star. In China, bright yellow was the color of the Middle Kingdom, and could be worn only by the emperor and his household; special guests were welcomed on a yellow carpet.\n\nAccording to surveys in Europe, Canada, the United States and elsewhere, yellow is the color people most often associate with amusement, gentleness, humor, happiness, and spontaneity; however it can also be associated with duplicity, envy, jealousy, greed, justice, and, in the U.S., cowardice. In Iran it has connotations of pallor/sickness, but also wisdom and connection. In China and many Asian countries, it is seen as the color of royalty, nobility, respect, happiness, glory, harmony and wisdom.", "name": "yellow", + "updated": "2026-09-24T19:04:01+00:00", "color": "#ffe119", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Yellow" @@ -310,10 +355,10 @@ "type": "Tag", "id": "f99ba115-8278-4dba-a549-ab138fc20be0", "data": { - "description": "Green is the color between cyan and yellow on the visible spectrum. It is evoked by light which has a dominant wavelength of roughly 495\\u2013570 nm. In subtractive color systems, used in painting and color printing, it is created by a combination of yellow and cyan; in the RGB color model, used on television and computer screens, it is one of the additive primary colors, along with red and blue, which are mixed in different combinations to create all other colors. By far the largest contributor to green in nature is chlorophyll, the chemical by which plants photosynthesize and convert sunlight into chemical energy. Many creatures have adapted to their green environments by taking on a green hue themselves as camouflage. Several minerals have a green color, including the emerald, which is colored green by its chromium content.\n\nDuring post-classical and early modern Europe, green was the color commonly associated with wealth, merchants, bankers, and the gentry, while red was reserved for the nobility. For this reason, the costume of the Mona Lisa by Leonardo da Vinci and the benches in the British House of Commons are green while those in the House of Lords are red.[1] It also has a long historical tradition as the color of Ireland and of Gaelic culture. It is the historic color of Islam, representing the lush vegetation of Paradise. It was the color of the banner of Muhammad, and is found in the flags of nearly all Islamic countries.[2]\n\nIn surveys made in American, European, and Islamic countries, green is the color most commonly associated with nature, life, health, youth, spring, hope, and envy.[3] In the European Union and the United States, green is also sometimes associated with toxicity and poor health,[4] but in China and most of Asia, its associations are very positive, as the symbol of fertility and happiness.[3] Because of its association with nature, it is the color of the environmental movement. Political groups advocating environmental protection and social justice describe themselves as part of the Green movement, some naming themselves Green parties. This has led to similar campaigns in advertising, as companies have sold green, or environmentally friendly, products. Green is also the traditional color of safety and permission; a green light means go ahead, a green card permits permanent residence in the United States.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Green is the color between cyan and yellow on the visible spectrum. It is evoked by light which has a dominant wavelength of roughly 495\\u2013570 nm. In subtractive color systems, used in painting and color printing, it is created by a combination of yellow and cyan; in the RGB color model, used on television and computer screens, it is one of the additive primary colors, along with red and blue, which are mixed in different combinations to create all other colors. By far the largest contributor to green in nature is chlorophyll, the chemical by which plants photosynthesize and convert sunlight into chemical energy. Many creatures have adapted to their green environments by taking on a green hue themselves as camouflage. Several minerals have a green color, including the emerald, which is colored green by its chromium content.\n\nDuring post-classical and early modern Europe, green was the color commonly associated with wealth, merchants, bankers, and the gentry, while red was reserved for the nobility. For this reason, the costume of the Mona Lisa by Leonardo da Vinci and the benches in the British House of Commons are green while those in the House of Lords are red. It also has a long historical tradition as the color of Ireland and of Gaelic culture. It is the historic color of Islam, representing the lush vegetation of Paradise. It was the color of the banner of Muhammad, and is found in the flags of nearly all Islamic countries.\n\nIn surveys made in American, European, and Islamic countries, green is the color most commonly associated with nature, life, health, youth, spring, hope, and envy. In the European Union and the United States, green is also sometimes associated with toxicity and poor health, but in China and most of Asia, its associations are very positive, as the symbol of fertility and happiness. Because of its association with nature, it is the color of the environmental movement. Political groups advocating environmental protection and social justice describe themselves as part of the Green movement, some naming themselves Green parties. This has led to similar campaigns in advertising, as companies have sold green, or environmentally friendly, products. Green is also the traditional color of safety and permission; a green light means go ahead, a green card permits permanent residence in the United States.", "name": "green", + "updated": "2026-09-24T19:04:01+00:00", "color": "#3cb44b", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Green" @@ -352,7 +397,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825390.227822, + "start": 1790276705.689941, "indices": "*", "combinedQuery": { "_source": [ @@ -409,8 +454,8 @@ } } }, - "end": 1758825390.287255, - "duration": 0.059433 + "end": 1790276705.737569, + "duration": 0.047628 }, { "input": { @@ -424,14 +469,14 @@ "id": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "type": "Tag", "metadata": { - "score": 26.933556 + "score": 26.929846 } }, { "id": "d747bfe6-0d52-4119-87c6-1fc37ed9395b", "type": "Plant", "metadata": { - "score": 4.160383 + "score": 4.1834593 } }, { @@ -452,21 +497,21 @@ "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "type": "Plant", "metadata": { - "score": 3.2498505 + "score": 3.2715626 } }, { "id": "ad80a619-2b53-4f27-a4bd-56a316c15251", "type": "Plant", "metadata": { - "score": 3.1922612 + "score": 3.1628277 } }, { "id": "26dfaa98-5f15-4170-9fdc-94661c1a26c5", "type": "Plant", "metadata": { - "score": 3.038499 + "score": 3.0894513 } }, { @@ -494,81 +539,81 @@ "id": "152d527e-4e33-4ad4-b13b-1de643740cce", "type": "Plant", "metadata": { - "score": 2.5810764 + "score": 2.5530436 } }, { "id": "3e5b01a7-5856-461e-bde5-d8388b6d909c", "type": "Tag", "metadata": { - "score": 1.5008786 + "score": 1.4979569 } }, { "id": "25d0c9a8-8864-42bd-9ea1-6157fb688998", "type": "Tag", "metadata": { - "score": 1.3131481 + "score": 1.3199856 } }, { "id": "bbc7529f-72da-4df2-aff5-e139a5618ccb", "type": "Tag", "metadata": { - "score": 1.113173 + "score": 1.1328773 } }, { "id": "b8674d32-af5f-4ef1-a5d8-fc5cbb56b795", "type": "Tag", "metadata": { - "score": 0.9764628 + "score": 0.98849475 } }, { "id": "b7121a49-8f17-4858-b988-4bd837a5f1fe", "type": "Tag", "metadata": { - "score": 0.87871504 + "score": 0.88779384 } }, { "id": "12de56ab-8e89-4281-ab44-403c7c7ecb00", "type": "Tag", "metadata": { - "score": 0.818965 + "score": 0.8112192 } }, { "id": "90819566-3121-42af-bdb5-19cbef67cd31", "type": "Tag", "metadata": { - "score": 0.6451281 + "score": 0.6371239 } }, { "id": "be14916b-0068-4b49-b8d0-f9e528f3d10e", "type": "Tag", "metadata": { - "score": 0.6129052 + "score": 0.6371239 } }, { "id": "f99ba115-8278-4dba-a549-ab138fc20be0", "type": "Tag", "metadata": { - "score": 0.5838508 + "score": 0.57601744 } } ], "totalHits": 20, - "maxScore": 26.933556 + "maxScore": 26.929846 } ] } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825390.287426, + "start": 1790276705.737894, "accessibleElementIds": [ "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "d747bfe6-0d52-4119-87c6-1fc37ed9395b", @@ -591,8 +636,8 @@ "be14916b-0068-4b49-b8d0-f9e528f3d10e", "f99ba115-8278-4dba-a549-ab138fc20be0" ], - "end": 1758825390.359465, - "duration": 0.072039 + "end": 1790276705.823951, + "duration": 0.086057 } ] } \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search/response-header.txt b/docs/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search/response-header.txt index 80c0aff2..5da47216 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search/response-header.txt +++ b/docs/search/example/elasticsearch-query-dsl-mixin/advanced-full-text-search/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Thu, 11 Sep 2025 20:23:41 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/keyword-search/response-body.json b/docs/search/example/elasticsearch-query-dsl-mixin/keyword-search/response-body.json index 0caf892e..fded38c5 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/keyword-search/response-body.json +++ b/docs/search/example/elasticsearch-query-dsl-mixin/keyword-search/response-body.json @@ -5,6 +5,7 @@ "type": "Plant", "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Mertensia virginica Virginia Bluebell seen in Brooklyn Botanic Garden", @@ -19,13 +20,21 @@ "link": "https://en.wikipedia.org/wiki/File:Virginia_Bluebells_at_Rocky_River.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Bluebell", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "M. virginica", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Mertensia_virginica", - "description": "Mertensia virginica (common names Virginia bluebells,[1] Virginia cowslip,[2] lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + "description": "Mertensia virginica (common names Virginia bluebells, Virginia cowslip, lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + }, + "file": { + "contentLength": 82651, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "527fa0ca5006ae3c888c06c3e208db64aa0214b31ce9f26a1ccd5fa7cdf91c3b" + } } } ], @@ -45,7 +54,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825390.524884, + "start": 1790276705.894463, "indices": "*", "combinedQuery": { "_source": [ @@ -86,8 +95,8 @@ } } }, - "end": 1758825390.554652, - "duration": 0.029768 + "end": 1790276705.906694, + "duration": 0.012231 }, { "input": { @@ -112,12 +121,12 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825390.554819, + "start": 1790276705.906997, "accessibleElementIds": [ "83b35321-4a91-4e9f-a49b-66d718c32ba7" ], - "end": 1758825390.569048, - "duration": 0.014229 + "end": 1790276705.9172, + "duration": 0.010203 } ] } \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/keyword-search/response-header.txt b/docs/search/example/elasticsearch-query-dsl-mixin/keyword-search/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/keyword-search/response-header.txt +++ b/docs/search/example/elasticsearch-query-dsl-mixin/keyword-search/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search/response-body.json b/docs/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search/response-body.json index 086aee19..fa835585 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search/response-body.json +++ b/docs/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search/response-body.json @@ -5,6 +5,7 @@ "type": "Plant", "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Lilium candidum, Israel", @@ -19,19 +20,28 @@ "link": "https://en.wikipedia.org/wiki/File:Lilium_candidum_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "L. candidum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium_candidum", - "description": "Lilium candidum, the Madonna lily[2][3] or white lily,[4] is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions.[1][5] It has been cultivated since antiquity, for at least 3,000 years,[6] and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + "description": "Lilium candidum, the Madonna lily or white lily, is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions. It has been cultivated since antiquity, for at least 3,000 years, and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + }, + "file": { + "contentLength": 115168, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ee066b93ae72c719f863a428f03c86ecd28e52818528eacf4d4e32acb4b4b37c" + } } }, { "type": "Plant", "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "", @@ -46,19 +56,28 @@ "link": "https://en.wikipedia.org/wiki/File:Gloriosa_superba_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Flame Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "G. superba", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_superba", - "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily,[3] gloriosa lily, tiger claw,[4] and fire lily.[5]" + "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily, gloriosa lily, tiger claw, and fire lily." + }, + "file": { + "contentLength": 90681, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "72e3e3770db795b2f04f0b5bb0be43e74df70de4faa0bf83a706bbde29e4ea0b" + } } }, { "type": "Plant", "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "in Seoul Forest, South Korea", @@ -79,13 +98,21 @@ "link": "https://en.wikipedia.org/wiki/File:Tulipa_orphanidea_060506.jpg" } ], - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "hasFile": true, "name": "Tulip", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "Tulipa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Tulip", - "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae,[2] along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae, along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + }, + "file": { + "contentLength": 105488, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c4c242897c43a74e9e4a8b5bf89e6b2cb1cbd99f8d621f33eea175cbf6dfab97" + } } } ], @@ -108,7 +135,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825390.715234, + "start": 1790276705.958542, "indices": "*", "combinedQuery": { "_source": [ @@ -151,8 +178,8 @@ } } }, - "end": 1758825390.823238, - "duration": 0.108004 + "end": 1790276706.049568, + "duration": 0.091026 }, { "input": { @@ -191,14 +218,14 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825390.823414, + "start": 1790276706.049865, "accessibleElementIds": [ "23508e6c-632a-496d-9bd6-8c62a03216af", "258c0dfe-b1d8-4839-beed-d00d1b544a96", "8940d70b-5b6f-43b7-bee4-41d073396ff8" ], - "end": 1758825390.844799, - "duration": 0.021385 + "end": 1790276706.069127, + "duration": 0.019262 } ] } \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search/response-header.txt b/docs/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search/response-header.txt +++ b/docs/search/example/elasticsearch-query-dsl-mixin/parameterized-elasticsearch-query-dsl-mixin-search/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/query-string-search/response-body.json b/docs/search/example/elasticsearch-query-dsl-mixin/query-string-search/response-body.json index 20209a68..75396c88 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/query-string-search/response-body.json +++ b/docs/search/example/elasticsearch-query-dsl-mixin/query-string-search/response-body.json @@ -5,9 +5,9 @@ "type": "Taxon", "id": "36e02d35-f6b4-4ccc-ae2f-b035ef02e0d6", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "Dahlia", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Asterales/Asteraceae/Dahlia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Dahlia", @@ -18,6 +18,7 @@ "type": "Plant", "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Mertensia virginica Virginia Bluebell seen in Brooklyn Botanic Garden", @@ -32,19 +33,28 @@ "link": "https://en.wikipedia.org/wiki/File:Virginia_Bluebells_at_Rocky_River.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Bluebell", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "M. virginica", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Mertensia_virginica", - "description": "Mertensia virginica (common names Virginia bluebells,[1] Virginia cowslip,[2] lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + "description": "Mertensia virginica (common names Virginia bluebells, Virginia cowslip, lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + }, + "file": { + "contentLength": 82651, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "527fa0ca5006ae3c888c06c3e208db64aa0214b31ce9f26a1ccd5fa7cdf91c3b" + } } }, { "type": "Plant", "id": "ad80a619-2b53-4f27-a4bd-56a316c15251", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Jacarandas in New Farm Park October 2006", @@ -65,19 +75,28 @@ "link": "https://en.wikipedia.org/wiki/File:Jacaranda_mimosifolia_5334.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Jacaranda", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "J. mimosifolia", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Jacaranda_mimosifolia", - "description": "Jacaranda mimosifolia is a sub-tropical tree native to south-central South America that has been widely planted elsewhere because of its attractive and long-lasting violet-colored flowers. It is also known as the jacaranda, blue jacaranda, black poui, Nupur or fern tree. Older sources call it J. acutifolia, but modern authorities usually classify it as J. mimosifolia. In scientific usage, the name \"jacaranda\" refers to the genus Jacaranda, which has many other members, but in horticultural and everyday usage, it nearly always means the blue jacaranda.\n\nIn its native range in the wild, J. mimosifolia is listed as Vulnerable by the IUCN.[1]" + "description": "Jacaranda mimosifolia is a sub-tropical tree native to south-central South America that has been widely planted elsewhere because of its attractive and long-lasting violet-colored flowers. It is also known as the jacaranda, blue jacaranda, black poui, Nupur or fern tree. Older sources call it J. acutifolia, but modern authorities usually classify it as J. mimosifolia. In scientific usage, the name \"jacaranda\" refers to the genus Jacaranda, which has many other members, but in horticultural and everyday usage, it nearly always means the blue jacaranda.\n\nIn its native range in the wild, J. mimosifolia is listed as Vulnerable by the IUCN." + }, + "file": { + "contentLength": 174162, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "dc87ed191952b8a4bfec69ff9af4103c93d52f81e43c343bc8be1a2ddb61aa20" + } } }, { "type": "Plant", "id": "26dfaa98-5f15-4170-9fdc-94661c1a26c5", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "", @@ -86,23 +105,31 @@ "link": "https://en.wikipedia.org/wiki/File:Eustoma_grandiflorum_purple_02.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Prairie Gentian", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "E. russellianum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Eustoma_russellianum", - "description": "Eustoma russellianum is a species of flowering plant in the gentian family. One of its previous binomial names was Eustoma grandiflorum.[1] Common names include showy prairie gentian, prairie gentian, Texas bluebells, Texas bluebell, bluebell,[2] and Lisianthus.\n\nThere is a cultivar, 'Bolero Deep Blue'.[3]" + "description": "Eustoma russellianum is a species of flowering plant in the gentian family. One of its previous binomial names was Eustoma grandiflorum. Common names include showy prairie gentian, prairie gentian, Texas bluebells, Texas bluebell, bluebell, and Lisianthus.\n\nThere is a cultivar, 'Bolero Deep Blue'." + }, + "file": { + "contentLength": 104134, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "9bbf4efc14d13cb8c268901d0d6395a8745664312a7961d673695072bdb709fb" + } } }, { "type": "Taxon", "id": "7359834e-c79c-4773-89ac-46befceb5f72", "data": { + "created": "2026-09-24T19:04:01+00:00", "description": "Actinotus is a genus of flowering plants in the family Apiaceae, subfamily Mackinlayoideae, with about 18 species. It is native to Australasia. Its best known member is the flannel flower, a common sight in Sydney bushland in the spring. The generic name, meaning \"furnished with rays\" is derived from the Greek stem aktin-/ακτιν- \"ray\" or \"sunbeam\".\n\nMost species are endemic to Australia with one from New Zealand. Other notable species are A. schwarzii from the Macdonnell Ranges in Central Australia, which closely resembles A. helianthi in appearance, and the rare pink-flowering A. forsythii from the Blue Mountains.\n\nThe genus was established by the French botanist Jacques Labillardière with his description of A. helianthi on page 67 of the first volume of his Novae Hollandiae Plantarum Specimen. However the habitat statement is anomalous and according to historian Edward Duyker Labillardière could not have collected the type specimen personally and might have received it from Jean-Baptiste Leschenault de La Tour botanist on the expedition of Nicolas Baudin or another early French visitor to New South Wales.\n\nIts closest relative is Apiopetalum from New Caledonia.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Actinotus", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Apiales/Apiaceae/Actinotus", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Actinotus" @@ -112,10 +139,10 @@ "type": "Taxon", "id": "3a123b1c-8bdc-482c-9d12-c3e9e22ec4fd", "data": { + "created": "2026-09-24T19:04:01+00:00", "description": "Mertensia is a genus of flowering plants in the borage family Boraginaceae. They are perennial herbaceous plants with blue or sometimes white flowers that open from pink-tinged buds. Such a change in flower color is common in Boraginaceae and is caused by changes in soil pH. Mertensia is one of several plants that are commonly called \"bluebell\". In spite of their common name, the flowers are usually salverform (trumpet-shaped) rather than campanulate (bell-shaped).\n\nMertensia is native to most of North America and to a large part of Asia from western China to northeastern Russia. Its center of diversity is in the Rocky Mountains. Mertensia is mostly restricted to alpine, subalpine, and montane habitats. Notable exceptions are Mertensia maritima, a maritime plant of Arctic and subarctic coastlines, and Mertensia virginica, which is found from the Appalachian Mountains west to Minnesota, Iowa, and Missouri. Most of the species are endemic to very small areas of the Rocky Mountains.\n\nMertensia virginica has the largest flowers in the genus and is commonly cultivated. It is sparingly naturalized in Europe. About 12 other species are known in cultivation. The Inuit ate the rhizomes of Mertensia maritima.\n\nMany of the species of Mertensia are hard to distinguish and some are possibly cryptic. Around 150 species names have been published in Mertensia. Most authors have recognized about 45 species, but in 2014, the authors of a molecular phylogenetic study recommended the acceptance of at least 62.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Mertensia", + "updated": "2026-09-24T19:04:01+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Boraginales/Boraginaceae/Mertensia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Mertensia" @@ -125,6 +152,7 @@ "type": "Plant", "id": "152d527e-4e33-4ad4-b13b-1de643740cce", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Mimosa, Silver Wattle", @@ -133,23 +161,31 @@ "link": "https://en.wikipedia.org/wiki/File:Acacia_dealbata-1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Acacia", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "A. dealbata", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Acacia_dealbata", - "description": "Acacia dealbata, commonly known as silver wattle, blue wattle or mimosa,[2] is a species of flowering plant in the legume family, Fabaceae and is endemic to south-eastern mainland Australia. It is a bushy shrub or spreading tree with smooth bark, bluish grey or silvery and glaucous bipinnate leaves, spherical heads of yellow to bright yellow flowers, and straight to slightly curved pods. The Wiradjuri people of New South Wales use the name giigandul for the species.[3]" + "description": "Acacia dealbata, commonly known as silver wattle, blue wattle or mimosa, is a species of flowering plant in the legume family, Fabaceae and is endemic to south-eastern mainland Australia. It is a bushy shrub or spreading tree with smooth bark, bluish grey or silvery and glaucous bipinnate leaves, spherical heads of yellow to bright yellow flowers, and straight to slightly curved pods. The Wiradjuri people of New South Wales use the name giigandul for the species." + }, + "file": { + "contentLength": 133952, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c33c0c115ef2182e02533fd8fc4868f58ffaaf5ba212e4dcf9ec7c71020f2aba" + } } }, { "type": "Tag", "id": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "description": "Blue is one of the three primary colours in the RGB (additive) colour model, as well as in the RYB colour model (traditional colour theory).[2] It lies between violet and cyan on the spectrum of visible light. The term blue generally describes colours perceived by humans observing light with a dominant wavelength that's between approximately 450 and 495 nanometres. The clear daytime sky and the deep sea appear blue because of an optical effect known as Rayleigh scattering. An optical effect called the Tyndall effect explains blue eyes. Distant objects appear more blue because of another optical effect called aerial perspective.\n\nBlue has been an important colour in art and decoration since ancient times. The semi-precious stone lapis lazuli was used in ancient Egypt for jewellery and ornament and later, in the Renaissance, to make the pigment ultramarine, the most expensive of all pigments.[3] In the eighth century Chinese artists used cobalt blue to colour fine blue and white porcelain. In the Middle Ages, European artists used it in the windows of cathedrals. Europeans wore clothing coloured with the vegetable dye woad until it was replaced by the finer indigo from America. In the 19th century, synthetic blue dyes and pigments gradually replaced organic dyes and mineral pigments. Dark blue became a common colour for military uniforms and later, in the late 20th century, for business suits. Because blue has commonly been associated with harmony, it was chosen as the colour of the flags of the United Nations and the European Union.[4]\n\nIn the United States and Europe, blue is the colour that both men and women are most likely to choose as their favourite, with at least one recent survey showing the same across several other countries, including China, Malaysia, and Indonesia.[5][6] Past surveys in the US and Europe have found that blue is the colour most commonly associated with harmony, confidence, masculinity, knowledge, intelligence, calmness, distance, infinity, the imagination, cold, and sadness.[7]", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Blue is one of the three primary colours in the RGB (additive) colour model, as well as in the RYB colour model (traditional colour theory). It lies between violet and cyan on the spectrum of visible light. The term blue generally describes colours perceived by humans observing light with a dominant wavelength that's between approximately 450 and 495 nanometres. The clear daytime sky and the deep sea appear blue because of an optical effect known as Rayleigh scattering. An optical effect called the Tyndall effect explains blue eyes. Distant objects appear more blue because of another optical effect called aerial perspective.\n\nBlue has been an important colour in art and decoration since ancient times. The semi-precious stone lapis lazuli was used in ancient Egypt for jewellery and ornament and later, in the Renaissance, to make the pigment ultramarine, the most expensive of all pigments. In the eighth century Chinese artists used cobalt blue to colour fine blue and white porcelain. In the Middle Ages, European artists used it in the windows of cathedrals. Europeans wore clothing coloured with the vegetable dye woad until it was replaced by the finer indigo from America. In the 19th century, synthetic blue dyes and pigments gradually replaced organic dyes and mineral pigments. Dark blue became a common colour for military uniforms and later, in the late 20th century, for business suits. Because blue has commonly been associated with harmony, it was chosen as the colour of the flags of the United Nations and the European Union.\n\nIn the United States and Europe, blue is the colour that both men and women are most likely to choose as their favourite, with at least one recent survey showing the same across several other countries, including China, Malaysia, and Indonesia. Past surveys in the US and Europe have found that blue is the colour most commonly associated with harmony, confidence, masculinity, knowledge, intelligence, calmness, distance, infinity, the imagination, cold, and sadness.", "name": "blue", + "updated": "2026-09-24T19:04:01+00:00", "color": "#4363d8", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Blue" @@ -159,9 +195,9 @@ "type": "Tag", "id": "3e5b01a7-5856-461e-bde5-d8388b6d909c", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "navy", + "updated": "2026-09-24T19:04:01+00:00", "color": "#000075", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Navy_blue", @@ -172,13 +208,13 @@ "type": "Tag", "id": "b7121a49-8f17-4858-b988-4bd837a5f1fe", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", "name": "lavender", + "updated": "2026-09-24T19:04:01+00:00", "color": "#dcbeff", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lavender_(color)", - "description": "Lavender is a light shade of purple or violet. It applies particularly to the color of the flower of the same name. The web color called lavender is displayed adjacent\\u2014it matches the color of the palest part of the flower; however, the more saturated color shown as floral lavender more closely matches the average color of the lavender flower as shown in the picture and is the tone of lavender historically and traditionally considered lavender by average people as opposed to website designers.[3] The color lavender might be described as a medium purple, a pale bluish purple,[4] or a light pinkish-purple. The term lavender may be used in general to apply to a wide range of pale, light, or grayish-purples, but only on the blue side; lilac is pale purple on the pink side. In paints, the color lavender is made by mixing purple and white paint." + "description": "Lavender is a light shade of purple or violet. It applies particularly to the color of the flower of the same name. The web color called lavender is displayed adjacent\\u2014it matches the color of the palest part of the flower; however, the more saturated color shown as floral lavender more closely matches the average color of the lavender flower as shown in the picture and is the tone of lavender historically and traditionally considered lavender by average people as opposed to website designers. The color lavender might be described as a medium purple, a pale bluish purple, or a light pinkish-purple. The term lavender may be used in general to apply to a wide range of pale, light, or grayish-purples, but only on the blue side; lilac is pale purple on the pink side. In paints, the color lavender is made by mixing purple and white paint." } } ], @@ -197,7 +233,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825390.992112, + "start": 1790276706.113879, "indices": "*", "combinedQuery": { "_source": [ @@ -237,8 +273,8 @@ } } }, - "end": 1758825391.023698, - "duration": 0.031586 + "end": 1790276706.126923, + "duration": 0.013044 }, { "input": { @@ -259,21 +295,21 @@ "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "type": "Plant", "metadata": { - "score": 3.2498505 + "score": 3.2715626 } }, { "id": "ad80a619-2b53-4f27-a4bd-56a316c15251", "type": "Plant", "metadata": { - "score": 3.1922612 + "score": 3.1628277 } }, { "id": "26dfaa98-5f15-4170-9fdc-94661c1a26c5", "type": "Plant", "metadata": { - "score": 3.038499 + "score": 3.0894513 } }, { @@ -294,28 +330,28 @@ "id": "152d527e-4e33-4ad4-b13b-1de643740cce", "type": "Plant", "metadata": { - "score": 2.5810764 + "score": 2.5530436 } }, { "id": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "type": "Tag", "metadata": { - "score": 1.5438207 + "score": 1.5401099 } }, { "id": "3e5b01a7-5856-461e-bde5-d8388b6d909c", "type": "Tag", "metadata": { - "score": 1.5008786 + "score": 1.4979569 } }, { "id": "b7121a49-8f17-4858-b988-4bd837a5f1fe", "type": "Tag", "metadata": { - "score": 0.87871504 + "score": 0.88779384 } } ], @@ -326,7 +362,7 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825391.023871, + "start": 1790276706.127298, "accessibleElementIds": [ "36e02d35-f6b4-4ccc-ae2f-b035ef02e0d6", "83b35321-4a91-4e9f-a49b-66d718c32ba7", @@ -339,8 +375,8 @@ "3e5b01a7-5856-461e-bde5-d8388b6d909c", "b7121a49-8f17-4858-b988-4bd837a5f1fe" ], - "end": 1758825391.067116, - "duration": 0.043245 + "end": 1790276706.17326, + "duration": 0.045962 } ] } \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/query-string-search/response-header.txt b/docs/search/example/elasticsearch-query-dsl-mixin/query-string-search/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/query-string-search/response-header.txt +++ b/docs/search/example/elasticsearch-query-dsl-mixin/query-string-search/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search/response-body.json b/docs/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search/response-body.json index 5ffa3398..c740c086 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search/response-body.json +++ b/docs/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search/response-body.json @@ -5,9 +5,9 @@ "type": "Taxon", "id": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Gloriosa", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Colchicaceae/Gloriosa", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_(plant)", @@ -18,6 +18,7 @@ "type": "Plant", "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "", @@ -32,22 +33,30 @@ "link": "https://en.wikipedia.org/wiki/File:Gloriosa_superba_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Flame Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "G. superba", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_superba", - "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily,[3] gloriosa lily, tiger claw,[4] and fire lily.[5]" + "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily, gloriosa lily, tiger claw, and fire lily." + }, + "file": { + "contentLength": 90681, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "72e3e3770db795b2f04f0b5bb0be43e74df70de4faa0bf83a706bbde29e4ea0b" + } } }, { "type": "Taxon", "id": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilieae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilieae", @@ -58,19 +67,33 @@ "type": "Taxon", "id": "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Kniphofia", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae/Asphodeloideae/Kniphofia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Kniphofia", "description": "Kniphofia (/nɪpˈhoʊfiə/, /nɪˈfoʊfiə/) is a genus of perennial flowering plants in the family Asphodelaceae, first described as a genus in 1794. All species of Kniphofia are native to Africa. Common names include tritoma, red hot poker, torch lily and poker plant." } }, + { + "type": "Taxon", + "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "data": { + "created": "2026-09-25T18:30:16+00:00", + "name": "Lilioideae", + "updated": "2026-09-25T18:30:16+00:00", + "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae", + "scenario": "general.botanicExample", + "link": "https://en.wikipedia.org/wiki/Lilioideae", + "description": "The Lilioideae are a subfamily of monocotyledonous perennial, herbaceous mainly bulbous flowering plants in the lily family, Liliaceae. They are found predominantly in the temperate and colder regions of the Northern Hemisphere, particularly East Asia and North America. The subfamily includes two tribes. They are of economic importance, particularly the lilies and tulips." + } + }, { "type": "Plant", "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Red-hot poker plants (Kniphofia uvaria) on the shore of Lake Jindabyne, New South Wales, Australia.", @@ -79,35 +102,30 @@ "link": "https://en.wikipedia.org/wiki/File:Kniphofia_uvaria_close.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Red Hot Poker", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "K. uvaria", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Kniphofia_uvaria", "description": "Kniphofia uvaria is a species of flowering plant in the family Asphodelaceae, commonly known as tritomea, torch lily, or red hot poker, due to the shape and color of its inflorescence. The leaves are reminiscent of a lily, and the flowerhead can reach up to 1.5 m (5 ft) in height. There are many varieties of torch lily, and they bloom at different times during the growing season. The flowers are red, orange, and yellow." - } - }, - { - "type": "Taxon", - "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", - "name": "Lilioideae", - "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae", - "scenario": "general.botanicExample", - "link": "https://en.wikipedia.org/wiki/Lilioideae", - "description": "The Lilioideae are a subfamily of monocotyledonous perennial, herbaceous mainly bulbous flowering plants in the lily family, Liliaceae. They are found predominantly in the temperate and colder regions of the Northern Hemisphere, particularly East Asia and North America. The subfamily includes two tribes. They are of economic importance, particularly the lilies and tulips." + }, + "file": { + "contentLength": 123686, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a0f461e0383bc5b4518a43e1ac76060612c7e87bf420f9a6bbbe5231012108fe" + } } }, { "type": "Taxon", "id": "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Trillium", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Melanthiaceae/Trillium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Trillium", @@ -118,6 +136,7 @@ "type": "Plant", "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Lilium candidum, Israel", @@ -132,22 +151,30 @@ "link": "https://en.wikipedia.org/wiki/File:Lilium_candidum_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "L. candidum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium_candidum", - "description": "Lilium candidum, the Madonna lily[2][3] or white lily,[4] is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions.[1][5] It has been cultivated since antiquity, for at least 3,000 years,[6] and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + "description": "Lilium candidum, the Madonna lily or white lily, is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions. It has been cultivated since antiquity, for at least 3,000 years, and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + }, + "file": { + "contentLength": 115168, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ee066b93ae72c719f863a428f03c86ecd28e52818528eacf4d4e32acb4b4b37c" + } } }, { "type": "Taxon", "id": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilium", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae/Lilium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium", @@ -158,9 +185,9 @@ "type": "Taxon", "id": "2c0bb4b9-c1ec-41f3-b9d9-f59a8b8bef38", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Asparagaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asparagaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asparagaceae", @@ -171,10 +198,10 @@ "type": "Taxon", "id": "425235d6-75ab-4ccb-8208-783ced0decc6", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "The lily family, Liliaceae, consists of about 15 genera and 610 species of flowering plants within the order Liliales. They are monocotyledonous, perennial, herbaceous, often bulbous geophytes. Plants in this family have evolved with a fair amount of morphological diversity despite genetic similarity. Common characteristics include large flowers with parts arranged in threes: with six colored or patterned petaloid tepals (undifferentiated petals and sepals) arranged in two whorls, six stamens and a superior ovary. The leaves are linear in shape, with their veins usually arranged parallel to the edges, single and arranged alternating on the stem, or in a rosette at the base. Most species are grown from bulbs, although some have rhizomes. First described in 1789, the lily family became a paraphyletic \"catch-all\" (wastebasket) group of lilioid monocots that did not fit into other families and included a great number of genera now included in other families and in some cases in other orders. Consequently, many sources and descriptions labelled \"Liliaceae\" deal with the broader sense of the family.\n\nThe family evolved approximately 68 million years ago during the Late Cretaceous to Early Paleogene epochs. Liliaceae are widely distributed, mainly in temperate regions of the Northern Hemisphere and the flowers are insect pollinated. Many Liliaceae are important ornamental plants, widely grown for their attractive flowers and involved in a major floriculture of cut flowers and dry bulbs. Some species are poisonous if eaten and can have adverse health effects in humans and household pets.\n\nA number of Liliaceae genera are popular cultivated plants in private and public spaces. Lilies and tulips in particular have had considerable symbolic and decorative value, and appear frequently in paintings and the decorative arts. They are also an economically important product. Most of their genera, Lilium in particular, face considerable herbivory pressure from deer in some areas, both wild and domestic.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Liliaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliaceae" @@ -184,10 +211,10 @@ "type": "Taxon", "id": "1a9579bd-1331-4d5c-93ec-a9ff8d9c576b", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Aloe (/ˈæloʊ(i), əˈloʊi/; also written Aloë) is a genus containing over 650 species of flowering succulent plants. The most widely known species is Aloe vera, or \"true aloe\". It is called this because it is cultivated as the standard source for assorted pharmaceutical purposes. Other species, such as Aloe ferox, are also cultivated or harvested from the wild for similar applications.\n\nThe APG IV system (2016) places the genus in the family Asphodelaceae, subfamily Asphodeloideae. Within the subfamily it may be placed in the tribe Aloeae. In the past, it has been assigned to the family Aloaceae (now included in the Asphodeloidae) or to a broadly circumscribed family Liliaceae (the lily family). The plant Agave americana, which is sometimes called \"American aloe\", belongs to the Asparagaceae, a different family.\n\nThe genus is native to tropical and southern Africa, Madagascar, Jordan, the Arabian Peninsula, and various islands in the Indian Ocean (Mauritius, Réunion, Comoros, etc.). A few species have also become naturalized in other regions (Mediterranean, India, Australia, North and South America, Hawaiian Islands, etc.).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Aloe", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae/Asphodeloideae/Aloe", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Aloe" @@ -197,10 +224,10 @@ "type": "Taxon", "id": "47e135a7-c77a-4489-9262-1e425a4b7177", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Asparagales (asparagoid lilies) are a diverse order of flowering plants in the monocots. Under the APG IV system of flowering plant classification, Asparagales are the largest order of monocots with 14 families, 1,122 genera, and about 36,000 species, with members as varied as asparaguses, orchids, yuccas, irises, onions, garlics, leeks, and other alliums, daffodils, snowdrops, amaryllis, agaves, butcher's broom, agapanthuses, Solomon's seal, hyacinths, bluebells, spider plants, grasstrees, aloes, freesias, gladioli, crocuses, and saffrons.\n\nMost species of Asparagales are herbaceous perennials, although some are climbers and some are trees or shrubs. The order also contains many geophytes (bulbs, corms, and various kinds of tuber). The leaves of almost all species form a tight rosette, either at the base of the plant or at the end of the stem, but occasionally along the stem. The flowers are not particularly distinctive, being 'lily type', with six tepals and up to six stamina. One of the defining characteristics (synapomorphies) of the order is the presence of phytomelanin, a black pigment present in the seed coat, creating a dark crust. Phytomelanin is found in most families of the Asparagales (although not in Orchidaceae, thought to be the sister-group of the rest of the order).\n\nThe order Asparagales takes its name from the type family Asparagaceae and has only recently been recognized in classification systems. The order is clearly circumscribed on the basis of molecular phylogenetics, but it is difficult to define morphologically since its members are structurally diverse. The order was first put forward by Huber in 1977 and later taken up in the Dahlgren system of 1985 and then the Angiosperm Phylogeny Group systems. Before this, many of its families were assigned to the old order Liliales, which was redistributed over three orders, Liliales, Asparagales, and Dioscoreales, based on molecular phylogenetics. The boundaries of the Asparagales and of its families have undergone a series of changes in recent years; future research may lead to further changes and ultimately greater stability.\n\nThe order is thought to have first diverged from other related monocots some 120–130 million years ago (early in the Cretaceous period), although given the difficulty in classifying the families involved, estimates are likely to be uncertain.\n\nFrom an economic point of view, the order Asparagales is second in importance within the monocots only to the order Poales (which includes grasses and cereals). Species are used as food and flavourings (e.g. onion, garlic, leek, asparagus, vanilla, saffron), in medicinal or cosmetic applications (Aloe), as cut flowers (e.g. freesia, gladiolus, iris, orchids), and as garden ornamentals (e.g. day lilies, lily of the valley, Agapanthus).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Asparagales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asparagales" @@ -210,6 +237,7 @@ "type": "Plant", "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Flower of Nelumbo nucifera, bean of India.", @@ -224,19 +252,28 @@ "link": "https://en.wikipedia.org/wiki/File:Nelumbo_nucifera1romainguy.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lotus", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "N. nucifera", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Nelumbo_nucifera", - "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus,[1] or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae.[2] The lotus belongs in the order Proteales." + "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus, or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae. The lotus belongs in the order Proteales." + }, + "file": { + "contentLength": 63295, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a46657ef9ece1a7e0939ee5edcc4358f23a3b8b7871c6eba4ad2ce0f30cf4e9f" + } } }, { "type": "Plant", "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Saucer Magnolia -- Magnolia × soulangeana 'Rustica Rubra' found in Houston, Texas", @@ -251,19 +288,28 @@ "link": "https://en.wikipedia.org/wiki/File:Yulan_1.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Magnolia", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "M. denudata", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magnolia_denudata", - "description": "Magnolia denudata, the lilytree[2] or Yulan magnolia (simplified Chinese: \\u7389\\u5170\\u82b1; traditional Chinese: \\u7389\\u862d\\u82b1; pinyin: y\\u00f9l\\u00e1nhu\\u0101; lit. 'jade orchid/lily'), is native to central and eastern China.[3] It has been cultivated in Chinese Buddhist temple gardens since 600 AD. Its flowers were regarded as a symbol of purity in the Tang dynasty and it was planted in the grounds of the emperor's palace. It is the official city flower of Shanghai." + "description": "Magnolia denudata, the lilytree or Yulan magnolia (simplified Chinese: \\u7389\\u5170\\u82b1; traditional Chinese: \\u7389\\u862d\\u82b1; pinyin: y\\u00f9l\\u00e1nhu\\u0101; lit. 'jade orchid/lily'), is native to central and eastern China. It has been cultivated in Chinese Buddhist temple gardens since 600 AD. Its flowers were regarded as a symbol of purity in the Tang dynasty and it was planted in the grounds of the emperor's palace. It is the official city flower of Shanghai." + }, + "file": { + "contentLength": 50389, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c615404e051e1e2e6c1d107cb7c043fd0db9a71eb9671be35533e9aac5e72e82" + } } }, { "type": "Plant", "id": "de004523-5165-4f10-872b-92eb9637a5d1", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "Adenium obesum (desert rose), macro of a flower, side view showing calyx, corolla and styles. Focus stack of 7 images. Uthandi, Chennai", @@ -278,19 +324,28 @@ "link": "https://en.wikipedia.org/wiki/File:RCN_Mother.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Desert Rose", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "A. obesum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Adenium_obesum", - "description": "Adenium obesum, more commonly known as a desert rose, is a poisonous species of flowering plant belonging to the tribe Nerieae of the subfamily Apocynoideae of the dogbane family, Apocynaceae.[3] It is native to the Sahel regions south of the Sahara (from Mauritania and Senegal to Sudan), tropical and subtropical eastern and southern Africa, as well as the Arabian Peninsula. Other names for the flower include Sabi star, kudu, mock azalea, and impala lily. Adenium obesum is a popular houseplant and bonsai in temperate regions." + "description": "Adenium obesum, more commonly known as a desert rose, is a poisonous species of flowering plant belonging to the tribe Nerieae of the subfamily Apocynoideae of the dogbane family, Apocynaceae. It is native to the Sahel regions south of the Sahara (from Mauritania and Senegal to Sudan), tropical and subtropical eastern and southern Africa, as well as the Arabian Peninsula. Other names for the flower include Sabi star, kudu, mock azalea, and impala lily. Adenium obesum is a popular houseplant and bonsai in temperate regions." + }, + "file": { + "contentLength": 58116, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "858fe2bee255dd252d51d161d4f183a93c2da0d2d6662b20870cbbf3eec81acb" + } } }, { "type": "Plant", "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "in Seoul Forest, South Korea", @@ -311,23 +366,31 @@ "link": "https://en.wikipedia.org/wiki/File:Tulipa_orphanidea_060506.jpg" } ], - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "hasFile": true, "name": "Tulip", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "Tulipa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Tulip", - "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae,[2] along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae, along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + }, + "file": { + "contentLength": 105488, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c4c242897c43a74e9e4a8b5bf89e6b2cb1cbd99f8d621f33eea175cbf6dfab97" + } } }, { "type": "Taxon", "id": "cec3972f-322f-432c-b86e-611c85a96b6c", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Yucca (/ˈjʌkə/ YUCK-uh) is both the scientific name and common name for a genus native to North America from Panama to southern Canada. It contains 50 accepted species. In addition to yucca, they are also known as Adam's needle or Spanish-bayonet. The genus is generally classified in the asparagus family in a subfamily with the Agave, though historically it was part of the lily family. The species range from small shrubby plants to tree-like giants, such as the Joshua tree. All yuccas have rosettes of leaves that taper to points and inflorescences with many flowers that are mainly cream white with thick petals. Though adapted to a wide range of climates the plants are xerophytes, ones that specialize in dry living conditions.\n\nThe tight relationship between the yucca plants and their pollinators, the yucca moths from the genera Tegeticula and Parategeticula, is a well known example of evolutionary mutualism. They are an important part of the ecology of North American deserts, providing shelter to small animals and creating habitats. The human uses of yuccas include garden plants, as food, and for extracts. The flower petals of various species are eaten as a part of local cuisine, particularly in Central America and Mexico. Historically, the yucca was extensively used for its fibers to make cords, baskets, mats, and sandals. It continues to be used by native peoples for traditional soaps.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Yucca", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asparagaceae/Agavoideae/Yucca", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Yucca" @@ -337,6 +400,7 @@ "type": "Plant", "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "Narcissus pseudonarcissus", @@ -345,23 +409,31 @@ "link": "https://en.wikipedia.org/wiki/File:Narcissus_pseudonarcissus_flower_300303.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Daffodil", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "N. pseudonarcissus", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Narcissus_pseudonarcissus", - "description": "Narcissus pseudonarcissus, commonly named the wild daffodil or Lent lily (Welsh: Cennin Pedr), is a perennial flowering plant.[1][2][3][4][5][6]\n\nThis species has pale yellow tepals, with a darker central trumpet. The long, narrow leaves are slightly greyish green in colour and rise from the base of the stem. The plant grows from a bulb. The flowers produce seeds which, when germinated, take five to seven years to produce a flowering plant. (Sexual seed reproduction mixes the traits of both parent flowers, so if garden hybrid cultivars are planted close to wild populations of Narcissus pseudonarcissus, there is a danger that the new seedlings, having hybrid vigour, could out-compete the wild plants.)[7]" + "description": "Narcissus pseudonarcissus, commonly named the wild daffodil or Lent lily (Welsh: Cennin Pedr), is a perennial flowering plant.\n\nThis species has pale yellow tepals, with a darker central trumpet. The long, narrow leaves are slightly greyish green in colour and rise from the base of the stem. The plant grows from a bulb. The flowers produce seeds which, when germinated, take five to seven years to produce a flowering plant. (Sexual seed reproduction mixes the traits of both parent flowers, so if garden hybrid cultivars are planted close to wild populations of Narcissus pseudonarcissus, there is a danger that the new seedlings, having hybrid vigour, could out-compete the wild plants.)" + }, + "file": { + "contentLength": 62307, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ecda5f79c0714acbe609146166abbf3872ba51f459debd5e20c8b61bb932ed37" + } } }, { "type": "Taxon", "id": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Liliales is an order of monocotyledonous flowering plants in the Angiosperm Phylogeny Group and Angiosperm Phylogeny Web system, within the lilioid monocots. This order of necessity includes the family Liliaceae. The APG III system (2009) places this order in the monocot clade. In APG III, the family Luzuriagaceae is combined with the family Alstroemeriaceae and the family Petermanniaceae is recognized. Both the order Lililiales and the family Liliaceae have had a widely disputed history, with the circumscription varying greatly from one taxonomist to another. Previous members of this order, which at one stage included most monocots with conspicuous tepals and lacking starch in the endosperm are now distributed over three orders, Liliales, Dioscoreales and Asparagales, using predominantly molecular phylogenetics. The newly delimited Liliales is monophyletic, with ten families. Well known plants from the order include Lilium (lily), tulip, the North American wildflower Trillium, and greenbrier.\n\nThus circumscribed, this order consists mostly of herbaceous plants, but lianas and shrubs also occur. They are mostly perennial plants, with food storage organs such as corms or rhizomes. The family Corsiaceae is notable for being heterotrophic.\n\nThe order has worldwide distribution. The larger families (with more than 100 species) are roughly confined to the Northern Hemisphere, or are distributed worldwide, centering on the north. On the other hand, the smaller families (with up to 10 species) are confined to the Southern Hemisphere, or sometimes just to Australia or South America. The total number of species in the order is now about 1768.\n\nAs with any herbaceous group, the fossil record of the Liliales is rather scarce. There are several species from the Eocene, such as Petermanniopsis anglesaensis or Smilax, but their identification is not definite. Another known fossil is Ripogonum scandens from the Miocene. Due to the scarcity of data, it seems impossible to determine precisely the age and the initial distribution of the order. It is assumed that the Liliales originate from the Lower Cretaceous, over 100 million years ago. Fossil aquatic plants from the Cretaceous of northeastern Brazil and a new terrestrial species placed in the new genus Cratosmilax suggest that the first species have appeared around 120 million years ago when the continents formed Pangea, before dispersing as Asia, Africa and America. The initial diversification to the current families took place between 82 and 48 million years ago. The order consists of 10 families, 67 genera and about 1,768 species.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Liliales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliales" @@ -384,7 +456,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825391.222043, + "start": 1790361091.670929, "indices": "*", "combinedQuery": { "_source": [ @@ -425,8 +497,8 @@ } } }, - "end": 1758825391.252388, - "duration": 0.030345 + "end": 1790361091.689555, + "duration": 0.018626 }, { "input": { @@ -447,7 +519,7 @@ "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "type": "Plant", "metadata": { - "score": 3.9976888 + "score": 4.0113134 } }, { @@ -465,17 +537,17 @@ } }, { - "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", - "type": "Plant", + "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "type": "Taxon", "metadata": { - "score": 3.2730358 + "score": 3.269838 } }, { - "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "type": "Taxon", + "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", + "type": "Plant", "metadata": { - "score": 3.269838 + "score": 3.2554708 } }, { @@ -489,7 +561,7 @@ "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "type": "Plant", "metadata": { - "score": 3.021591 + "score": 3.060035 } }, { @@ -531,28 +603,28 @@ "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "type": "Plant", "metadata": { - "score": 2.152007 + "score": 2.1294188 } }, { "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "type": "Plant", "metadata": { - "score": 2.1088712 + "score": 2.085987 } }, { "id": "de004523-5165-4f10-872b-92eb9637a5d1", "type": "Plant", "metadata": { - "score": 2.02761 + "score": 2.0042536 } }, { "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "type": "Plant", "metadata": { - "score": 1.9892946 + "score": 1.9657542 } }, { @@ -566,7 +638,7 @@ "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "type": "Plant", "metadata": { - "score": 1.7868379 + "score": 1.8255562 } }, { @@ -584,14 +656,14 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825391.25256, + "start": 1790361091.689842, "accessibleElementIds": [ "16884ac8-ba7a-4c91-8449-4fdd803644b6", "258c0dfe-b1d8-4839-beed-d00d1b544a96", "1feedd9f-0c12-490c-8461-b12ff7447ac8", "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", - "f8179dfc-5578-44de-adc0-d6b613eb7a32", "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "f8179dfc-5578-44de-adc0-d6b613eb7a32", "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "23508e6c-632a-496d-9bd6-8c62a03216af", "7dd3a650-d60e-40c9-89d0-bccaf395369f", @@ -607,8 +679,8 @@ "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "1852bdff-a4dd-4f91-9243-0e802775f757" ], - "end": 1758825391.322722, - "duration": 0.070162 + "end": 1790361091.778086, + "duration": 0.088244 } ] } \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search/response-header.txt b/docs/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search/response-header.txt +++ b/docs/search/example/elasticsearch-query-dsl-mixin/simple-full-text-search/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/text-prefix-search/response-body.json b/docs/search/example/elasticsearch-query-dsl-mixin/text-prefix-search/response-body.json index 68ae203a..a25a81b5 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/text-prefix-search/response-body.json +++ b/docs/search/example/elasticsearch-query-dsl-mixin/text-prefix-search/response-body.json @@ -5,10 +5,10 @@ "type": "Tag", "id": "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "data": { - "description": "Blue is one of the three primary colours in the RGB (additive) colour model, as well as in the RYB colour model (traditional colour theory).[2] It lies between violet and cyan on the spectrum of visible light. The term blue generally describes colours perceived by humans observing light with a dominant wavelength that's between approximately 450 and 495 nanometres. The clear daytime sky and the deep sea appear blue because of an optical effect known as Rayleigh scattering. An optical effect called the Tyndall effect explains blue eyes. Distant objects appear more blue because of another optical effect called aerial perspective.\n\nBlue has been an important colour in art and decoration since ancient times. The semi-precious stone lapis lazuli was used in ancient Egypt for jewellery and ornament and later, in the Renaissance, to make the pigment ultramarine, the most expensive of all pigments.[3] In the eighth century Chinese artists used cobalt blue to colour fine blue and white porcelain. In the Middle Ages, European artists used it in the windows of cathedrals. Europeans wore clothing coloured with the vegetable dye woad until it was replaced by the finer indigo from America. In the 19th century, synthetic blue dyes and pigments gradually replaced organic dyes and mineral pigments. Dark blue became a common colour for military uniforms and later, in the late 20th century, for business suits. Because blue has commonly been associated with harmony, it was chosen as the colour of the flags of the United Nations and the European Union.[4]\n\nIn the United States and Europe, blue is the colour that both men and women are most likely to choose as their favourite, with at least one recent survey showing the same across several other countries, including China, Malaysia, and Indonesia.[5][6] Past surveys in the US and Europe have found that blue is the colour most commonly associated with harmony, confidence, masculinity, knowledge, intelligence, calmness, distance, infinity, the imagination, cold, and sadness.[7]", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-24T19:04:01+00:00", + "description": "Blue is one of the three primary colours in the RGB (additive) colour model, as well as in the RYB colour model (traditional colour theory). It lies between violet and cyan on the spectrum of visible light. The term blue generally describes colours perceived by humans observing light with a dominant wavelength that's between approximately 450 and 495 nanometres. The clear daytime sky and the deep sea appear blue because of an optical effect known as Rayleigh scattering. An optical effect called the Tyndall effect explains blue eyes. Distant objects appear more blue because of another optical effect called aerial perspective.\n\nBlue has been an important colour in art and decoration since ancient times. The semi-precious stone lapis lazuli was used in ancient Egypt for jewellery and ornament and later, in the Renaissance, to make the pigment ultramarine, the most expensive of all pigments. In the eighth century Chinese artists used cobalt blue to colour fine blue and white porcelain. In the Middle Ages, European artists used it in the windows of cathedrals. Europeans wore clothing coloured with the vegetable dye woad until it was replaced by the finer indigo from America. In the 19th century, synthetic blue dyes and pigments gradually replaced organic dyes and mineral pigments. Dark blue became a common colour for military uniforms and later, in the late 20th century, for business suits. Because blue has commonly been associated with harmony, it was chosen as the colour of the flags of the United Nations and the European Union.\n\nIn the United States and Europe, blue is the colour that both men and women are most likely to choose as their favourite, with at least one recent survey showing the same across several other countries, including China, Malaysia, and Indonesia. Past surveys in the US and Europe have found that blue is the colour most commonly associated with harmony, confidence, masculinity, knowledge, intelligence, calmness, distance, infinity, the imagination, cold, and sadness.", "name": "blue", + "updated": "2026-09-24T19:04:01+00:00", "color": "#4363d8", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Blue" @@ -18,6 +18,7 @@ "type": "Plant", "id": "83b35321-4a91-4e9f-a49b-66d718c32ba7", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Mertensia virginica Virginia Bluebell seen in Brooklyn Botanic Garden", @@ -32,13 +33,21 @@ "link": "https://en.wikipedia.org/wiki/File:Virginia_Bluebells_at_Rocky_River.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Bluebell", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "M. virginica", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Mertensia_virginica", - "description": "Mertensia virginica (common names Virginia bluebells,[1] Virginia cowslip,[2] lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + "description": "Mertensia virginica (common names Virginia bluebells, Virginia cowslip, lungwort oysterleaf, Roanoke bells) is a spring ephemeral plant in the Boraginaceae (borage) family with bell-shaped sky-blue flowers, native to eastern North America." + }, + "file": { + "contentLength": 82651, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "527fa0ca5006ae3c888c06c3e208db64aa0214b31ce9f26a1ccd5fa7cdf91c3b" + } } } ], @@ -58,7 +67,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825391.494736, + "start": 1790276706.395696, "indices": "*", "combinedQuery": { "_source": [ @@ -99,8 +108,8 @@ } } }, - "end": 1758825391.524346, - "duration": 0.02961 + "end": 1790276706.408176, + "duration": 0.01248 }, { "input": { @@ -132,13 +141,13 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825391.524511, + "start": 1790276706.408475, "accessibleElementIds": [ "79ca27e5-93bb-43e6-a76b-096ea45e2e8e", "83b35321-4a91-4e9f-a49b-66d718c32ba7" ], - "end": 1758825391.541848, - "duration": 0.017337 + "end": 1790276706.422993, + "duration": 0.014518 } ] } \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/text-prefix-search/response-header.txt b/docs/search/example/elasticsearch-query-dsl-mixin/text-prefix-search/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/text-prefix-search/response-header.txt +++ b/docs/search/example/elasticsearch-query-dsl-mixin/text-prefix-search/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/elasticsearch-query-dsl-mixin/wildcard-search/response-header.txt b/docs/search/example/elasticsearch-query-dsl-mixin/wildcard-search/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/elasticsearch-query-dsl-mixin/wildcard-search/response-header.txt +++ b/docs/search/example/elasticsearch-query-dsl-mixin/wildcard-search/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/element-hydration/explicit-elementids-hydration/response-body.json b/docs/search/example/element-hydration/explicit-elementids-hydration/response-body.json index ca8ad9c4..6570d2e5 100644 --- a/docs/search/example/element-hydration/explicit-elementids-hydration/response-body.json +++ b/docs/search/example/element-hydration/explicit-elementids-hydration/response-body.json @@ -5,6 +5,7 @@ "type": "Plant", "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "", @@ -19,19 +20,28 @@ "link": "https://en.wikipedia.org/wiki/File:Gloriosa_superba_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Flame Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "G. superba", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_superba", - "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily,[3] gloriosa lily, tiger claw,[4] and fire lily.[5]" + "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily, gloriosa lily, tiger claw, and fire lily." + }, + "file": { + "contentLength": 90681, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "72e3e3770db795b2f04f0b5bb0be43e74df70de4faa0bf83a706bbde29e4ea0b" + } } }, { "type": "Plant", "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Flower of Nelumbo nucifera, bean of India.", @@ -46,19 +56,28 @@ "link": "https://en.wikipedia.org/wiki/File:Nelumbo_nucifera1romainguy.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lotus", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "N. nucifera", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Nelumbo_nucifera", - "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus,[1] or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae.[2] The lotus belongs in the order Proteales." + "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus, or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae. The lotus belongs in the order Proteales." + }, + "file": { + "contentLength": 63295, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a46657ef9ece1a7e0939ee5edcc4358f23a3b8b7871c6eba4ad2ce0f30cf4e9f" + } } }, { "type": "Plant", "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "in Seoul Forest, South Korea", @@ -79,13 +98,21 @@ "link": "https://en.wikipedia.org/wiki/File:Tulipa_orphanidea_060506.jpg" } ], - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "hasFile": true, "name": "Tulip", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "Tulipa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Tulip", - "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae,[2] along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae, along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + }, + "file": { + "contentLength": 105488, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c4c242897c43a74e9e4a8b5bf89e6b2cb1cbd99f8d621f33eea175cbf6dfab97" + } } } ], @@ -105,14 +132,14 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825391.88911, + "start": 1790276706.547772, "accessibleElementIds": [ "258c0dfe-b1d8-4839-beed-d00d1b544a96", "3283fd3d-8083-4170-882a-41b1cd152c55", "8940d70b-5b6f-43b7-bee4-41d073396ff8" ], - "end": 1758825391.926094, - "duration": 0.036984 + "end": 1790276706.56921, + "duration": 0.021438 } ] } \ No newline at end of file diff --git a/docs/search/example/element-hydration/explicit-elementids-hydration/response-header.txt b/docs/search/example/element-hydration/explicit-elementids-hydration/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/element-hydration/explicit-elementids-hydration/response-header.txt +++ b/docs/search/example/element-hydration/explicit-elementids-hydration/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/element-hydration/implicit-elements-hydration/response-body.json b/docs/search/example/element-hydration/implicit-elements-hydration/response-body.json index ae3e9d82..662bab90 100644 --- a/docs/search/example/element-hydration/implicit-elements-hydration/response-body.json +++ b/docs/search/example/element-hydration/implicit-elements-hydration/response-body.json @@ -5,9 +5,9 @@ "type": "Taxon", "id": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Gloriosa", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Colchicaceae/Gloriosa", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_(plant)", @@ -18,6 +18,7 @@ "type": "Plant", "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "", @@ -32,22 +33,30 @@ "link": "https://en.wikipedia.org/wiki/File:Gloriosa_superba_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Flame Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "G. superba", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_superba", - "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily,[3] gloriosa lily, tiger claw,[4] and fire lily.[5]" + "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily, gloriosa lily, tiger claw, and fire lily." + }, + "file": { + "contentLength": 90681, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "72e3e3770db795b2f04f0b5bb0be43e74df70de4faa0bf83a706bbde29e4ea0b" + } } }, { "type": "Taxon", "id": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilieae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilieae", @@ -58,19 +67,33 @@ "type": "Taxon", "id": "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Kniphofia", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae/Asphodeloideae/Kniphofia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Kniphofia", "description": "Kniphofia (/nɪpˈhoʊfiə/, /nɪˈfoʊfiə/) is a genus of perennial flowering plants in the family Asphodelaceae, first described as a genus in 1794. All species of Kniphofia are native to Africa. Common names include tritoma, red hot poker, torch lily and poker plant." } }, + { + "type": "Taxon", + "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "data": { + "created": "2026-09-25T18:30:16+00:00", + "name": "Lilioideae", + "updated": "2026-09-25T18:30:16+00:00", + "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae", + "scenario": "general.botanicExample", + "link": "https://en.wikipedia.org/wiki/Lilioideae", + "description": "The Lilioideae are a subfamily of monocotyledonous perennial, herbaceous mainly bulbous flowering plants in the lily family, Liliaceae. They are found predominantly in the temperate and colder regions of the Northern Hemisphere, particularly East Asia and North America. The subfamily includes two tribes. They are of economic importance, particularly the lilies and tulips." + } + }, { "type": "Plant", "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Red-hot poker plants (Kniphofia uvaria) on the shore of Lake Jindabyne, New South Wales, Australia.", @@ -79,35 +102,30 @@ "link": "https://en.wikipedia.org/wiki/File:Kniphofia_uvaria_close.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Red Hot Poker", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "K. uvaria", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Kniphofia_uvaria", "description": "Kniphofia uvaria is a species of flowering plant in the family Asphodelaceae, commonly known as tritomea, torch lily, or red hot poker, due to the shape and color of its inflorescence. The leaves are reminiscent of a lily, and the flowerhead can reach up to 1.5 m (5 ft) in height. There are many varieties of torch lily, and they bloom at different times during the growing season. The flowers are red, orange, and yellow." - } - }, - { - "type": "Taxon", - "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", - "name": "Lilioideae", - "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae", - "scenario": "general.botanicExample", - "link": "https://en.wikipedia.org/wiki/Lilioideae", - "description": "The Lilioideae are a subfamily of monocotyledonous perennial, herbaceous mainly bulbous flowering plants in the lily family, Liliaceae. They are found predominantly in the temperate and colder regions of the Northern Hemisphere, particularly East Asia and North America. The subfamily includes two tribes. They are of economic importance, particularly the lilies and tulips." + }, + "file": { + "contentLength": 123686, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a0f461e0383bc5b4518a43e1ac76060612c7e87bf420f9a6bbbe5231012108fe" + } } }, { "type": "Taxon", "id": "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Trillium", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Melanthiaceae/Trillium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Trillium", @@ -118,6 +136,7 @@ "type": "Plant", "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Lilium candidum, Israel", @@ -132,22 +151,30 @@ "link": "https://en.wikipedia.org/wiki/File:Lilium_candidum_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "L. candidum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium_candidum", - "description": "Lilium candidum, the Madonna lily[2][3] or white lily,[4] is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions.[1][5] It has been cultivated since antiquity, for at least 3,000 years,[6] and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + "description": "Lilium candidum, the Madonna lily or white lily, is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions. It has been cultivated since antiquity, for at least 3,000 years, and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + }, + "file": { + "contentLength": 115168, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ee066b93ae72c719f863a428f03c86ecd28e52818528eacf4d4e32acb4b4b37c" + } } }, { "type": "Taxon", "id": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilium", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae/Lilium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium", @@ -158,9 +185,9 @@ "type": "Taxon", "id": "2c0bb4b9-c1ec-41f3-b9d9-f59a8b8bef38", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Asparagaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asparagaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asparagaceae", @@ -171,10 +198,10 @@ "type": "Taxon", "id": "425235d6-75ab-4ccb-8208-783ced0decc6", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "The lily family, Liliaceae, consists of about 15 genera and 610 species of flowering plants within the order Liliales. They are monocotyledonous, perennial, herbaceous, often bulbous geophytes. Plants in this family have evolved with a fair amount of morphological diversity despite genetic similarity. Common characteristics include large flowers with parts arranged in threes: with six colored or patterned petaloid tepals (undifferentiated petals and sepals) arranged in two whorls, six stamens and a superior ovary. The leaves are linear in shape, with their veins usually arranged parallel to the edges, single and arranged alternating on the stem, or in a rosette at the base. Most species are grown from bulbs, although some have rhizomes. First described in 1789, the lily family became a paraphyletic \"catch-all\" (wastebasket) group of lilioid monocots that did not fit into other families and included a great number of genera now included in other families and in some cases in other orders. Consequently, many sources and descriptions labelled \"Liliaceae\" deal with the broader sense of the family.\n\nThe family evolved approximately 68 million years ago during the Late Cretaceous to Early Paleogene epochs. Liliaceae are widely distributed, mainly in temperate regions of the Northern Hemisphere and the flowers are insect pollinated. Many Liliaceae are important ornamental plants, widely grown for their attractive flowers and involved in a major floriculture of cut flowers and dry bulbs. Some species are poisonous if eaten and can have adverse health effects in humans and household pets.\n\nA number of Liliaceae genera are popular cultivated plants in private and public spaces. Lilies and tulips in particular have had considerable symbolic and decorative value, and appear frequently in paintings and the decorative arts. They are also an economically important product. Most of their genera, Lilium in particular, face considerable herbivory pressure from deer in some areas, both wild and domestic.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Liliaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliaceae" @@ -184,10 +211,10 @@ "type": "Taxon", "id": "1a9579bd-1331-4d5c-93ec-a9ff8d9c576b", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Aloe (/ˈæloʊ(i), əˈloʊi/; also written Aloë) is a genus containing over 650 species of flowering succulent plants. The most widely known species is Aloe vera, or \"true aloe\". It is called this because it is cultivated as the standard source for assorted pharmaceutical purposes. Other species, such as Aloe ferox, are also cultivated or harvested from the wild for similar applications.\n\nThe APG IV system (2016) places the genus in the family Asphodelaceae, subfamily Asphodeloideae. Within the subfamily it may be placed in the tribe Aloeae. In the past, it has been assigned to the family Aloaceae (now included in the Asphodeloidae) or to a broadly circumscribed family Liliaceae (the lily family). The plant Agave americana, which is sometimes called \"American aloe\", belongs to the Asparagaceae, a different family.\n\nThe genus is native to tropical and southern Africa, Madagascar, Jordan, the Arabian Peninsula, and various islands in the Indian Ocean (Mauritius, Réunion, Comoros, etc.). A few species have also become naturalized in other regions (Mediterranean, India, Australia, North and South America, Hawaiian Islands, etc.).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Aloe", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae/Asphodeloideae/Aloe", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Aloe" @@ -197,10 +224,10 @@ "type": "Taxon", "id": "47e135a7-c77a-4489-9262-1e425a4b7177", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Asparagales (asparagoid lilies) are a diverse order of flowering plants in the monocots. Under the APG IV system of flowering plant classification, Asparagales are the largest order of monocots with 14 families, 1,122 genera, and about 36,000 species, with members as varied as asparaguses, orchids, yuccas, irises, onions, garlics, leeks, and other alliums, daffodils, snowdrops, amaryllis, agaves, butcher's broom, agapanthuses, Solomon's seal, hyacinths, bluebells, spider plants, grasstrees, aloes, freesias, gladioli, crocuses, and saffrons.\n\nMost species of Asparagales are herbaceous perennials, although some are climbers and some are trees or shrubs. The order also contains many geophytes (bulbs, corms, and various kinds of tuber). The leaves of almost all species form a tight rosette, either at the base of the plant or at the end of the stem, but occasionally along the stem. The flowers are not particularly distinctive, being 'lily type', with six tepals and up to six stamina. One of the defining characteristics (synapomorphies) of the order is the presence of phytomelanin, a black pigment present in the seed coat, creating a dark crust. Phytomelanin is found in most families of the Asparagales (although not in Orchidaceae, thought to be the sister-group of the rest of the order).\n\nThe order Asparagales takes its name from the type family Asparagaceae and has only recently been recognized in classification systems. The order is clearly circumscribed on the basis of molecular phylogenetics, but it is difficult to define morphologically since its members are structurally diverse. The order was first put forward by Huber in 1977 and later taken up in the Dahlgren system of 1985 and then the Angiosperm Phylogeny Group systems. Before this, many of its families were assigned to the old order Liliales, which was redistributed over three orders, Liliales, Asparagales, and Dioscoreales, based on molecular phylogenetics. The boundaries of the Asparagales and of its families have undergone a series of changes in recent years; future research may lead to further changes and ultimately greater stability.\n\nThe order is thought to have first diverged from other related monocots some 120–130 million years ago (early in the Cretaceous period), although given the difficulty in classifying the families involved, estimates are likely to be uncertain.\n\nFrom an economic point of view, the order Asparagales is second in importance within the monocots only to the order Poales (which includes grasses and cereals). Species are used as food and flavourings (e.g. onion, garlic, leek, asparagus, vanilla, saffron), in medicinal or cosmetic applications (Aloe), as cut flowers (e.g. freesia, gladiolus, iris, orchids), and as garden ornamentals (e.g. day lilies, lily of the valley, Agapanthus).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Asparagales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asparagales" @@ -210,6 +237,7 @@ "type": "Plant", "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Flower of Nelumbo nucifera, bean of India.", @@ -224,19 +252,28 @@ "link": "https://en.wikipedia.org/wiki/File:Nelumbo_nucifera1romainguy.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lotus", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "N. nucifera", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Nelumbo_nucifera", - "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus,[1] or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae.[2] The lotus belongs in the order Proteales." + "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus, or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae. The lotus belongs in the order Proteales." + }, + "file": { + "contentLength": 63295, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a46657ef9ece1a7e0939ee5edcc4358f23a3b8b7871c6eba4ad2ce0f30cf4e9f" + } } }, { "type": "Plant", "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Saucer Magnolia -- Magnolia × soulangeana 'Rustica Rubra' found in Houston, Texas", @@ -251,19 +288,28 @@ "link": "https://en.wikipedia.org/wiki/File:Yulan_1.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Magnolia", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "M. denudata", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magnolia_denudata", - "description": "Magnolia denudata, the lilytree[2] or Yulan magnolia (simplified Chinese: \\u7389\\u5170\\u82b1; traditional Chinese: \\u7389\\u862d\\u82b1; pinyin: y\\u00f9l\\u00e1nhu\\u0101; lit. 'jade orchid/lily'), is native to central and eastern China.[3] It has been cultivated in Chinese Buddhist temple gardens since 600 AD. Its flowers were regarded as a symbol of purity in the Tang dynasty and it was planted in the grounds of the emperor's palace. It is the official city flower of Shanghai." + "description": "Magnolia denudata, the lilytree or Yulan magnolia (simplified Chinese: \\u7389\\u5170\\u82b1; traditional Chinese: \\u7389\\u862d\\u82b1; pinyin: y\\u00f9l\\u00e1nhu\\u0101; lit. 'jade orchid/lily'), is native to central and eastern China. It has been cultivated in Chinese Buddhist temple gardens since 600 AD. Its flowers were regarded as a symbol of purity in the Tang dynasty and it was planted in the grounds of the emperor's palace. It is the official city flower of Shanghai." + }, + "file": { + "contentLength": 50389, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c615404e051e1e2e6c1d107cb7c043fd0db9a71eb9671be35533e9aac5e72e82" + } } }, { "type": "Plant", "id": "de004523-5165-4f10-872b-92eb9637a5d1", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "Adenium obesum (desert rose), macro of a flower, side view showing calyx, corolla and styles. Focus stack of 7 images. Uthandi, Chennai", @@ -278,19 +324,28 @@ "link": "https://en.wikipedia.org/wiki/File:RCN_Mother.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Desert Rose", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "A. obesum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Adenium_obesum", - "description": "Adenium obesum, more commonly known as a desert rose, is a poisonous species of flowering plant belonging to the tribe Nerieae of the subfamily Apocynoideae of the dogbane family, Apocynaceae.[3] It is native to the Sahel regions south of the Sahara (from Mauritania and Senegal to Sudan), tropical and subtropical eastern and southern Africa, as well as the Arabian Peninsula. Other names for the flower include Sabi star, kudu, mock azalea, and impala lily. Adenium obesum is a popular houseplant and bonsai in temperate regions." + "description": "Adenium obesum, more commonly known as a desert rose, is a poisonous species of flowering plant belonging to the tribe Nerieae of the subfamily Apocynoideae of the dogbane family, Apocynaceae. It is native to the Sahel regions south of the Sahara (from Mauritania and Senegal to Sudan), tropical and subtropical eastern and southern Africa, as well as the Arabian Peninsula. Other names for the flower include Sabi star, kudu, mock azalea, and impala lily. Adenium obesum is a popular houseplant and bonsai in temperate regions." + }, + "file": { + "contentLength": 58116, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "858fe2bee255dd252d51d161d4f183a93c2da0d2d6662b20870cbbf3eec81acb" + } } }, { "type": "Plant", "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "in Seoul Forest, South Korea", @@ -311,23 +366,31 @@ "link": "https://en.wikipedia.org/wiki/File:Tulipa_orphanidea_060506.jpg" } ], - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "hasFile": true, "name": "Tulip", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "Tulipa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Tulip", - "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae,[2] along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae, along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + }, + "file": { + "contentLength": 105488, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c4c242897c43a74e9e4a8b5bf89e6b2cb1cbd99f8d621f33eea175cbf6dfab97" + } } }, { "type": "Taxon", "id": "cec3972f-322f-432c-b86e-611c85a96b6c", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Yucca (/ˈjʌkə/ YUCK-uh) is both the scientific name and common name for a genus native to North America from Panama to southern Canada. It contains 50 accepted species. In addition to yucca, they are also known as Adam's needle or Spanish-bayonet. The genus is generally classified in the asparagus family in a subfamily with the Agave, though historically it was part of the lily family. The species range from small shrubby plants to tree-like giants, such as the Joshua tree. All yuccas have rosettes of leaves that taper to points and inflorescences with many flowers that are mainly cream white with thick petals. Though adapted to a wide range of climates the plants are xerophytes, ones that specialize in dry living conditions.\n\nThe tight relationship between the yucca plants and their pollinators, the yucca moths from the genera Tegeticula and Parategeticula, is a well known example of evolutionary mutualism. They are an important part of the ecology of North American deserts, providing shelter to small animals and creating habitats. The human uses of yuccas include garden plants, as food, and for extracts. The flower petals of various species are eaten as a part of local cuisine, particularly in Central America and Mexico. Historically, the yucca was extensively used for its fibers to make cords, baskets, mats, and sandals. It continues to be used by native peoples for traditional soaps.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Yucca", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asparagaceae/Agavoideae/Yucca", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Yucca" @@ -337,6 +400,7 @@ "type": "Plant", "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "Narcissus pseudonarcissus", @@ -345,23 +409,31 @@ "link": "https://en.wikipedia.org/wiki/File:Narcissus_pseudonarcissus_flower_300303.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Daffodil", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "N. pseudonarcissus", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Narcissus_pseudonarcissus", - "description": "Narcissus pseudonarcissus, commonly named the wild daffodil or Lent lily (Welsh: Cennin Pedr), is a perennial flowering plant.[1][2][3][4][5][6]\n\nThis species has pale yellow tepals, with a darker central trumpet. The long, narrow leaves are slightly greyish green in colour and rise from the base of the stem. The plant grows from a bulb. The flowers produce seeds which, when germinated, take five to seven years to produce a flowering plant. (Sexual seed reproduction mixes the traits of both parent flowers, so if garden hybrid cultivars are planted close to wild populations of Narcissus pseudonarcissus, there is a danger that the new seedlings, having hybrid vigour, could out-compete the wild plants.)[7]" + "description": "Narcissus pseudonarcissus, commonly named the wild daffodil or Lent lily (Welsh: Cennin Pedr), is a perennial flowering plant.\n\nThis species has pale yellow tepals, with a darker central trumpet. The long, narrow leaves are slightly greyish green in colour and rise from the base of the stem. The plant grows from a bulb. The flowers produce seeds which, when germinated, take five to seven years to produce a flowering plant. (Sexual seed reproduction mixes the traits of both parent flowers, so if garden hybrid cultivars are planted close to wild populations of Narcissus pseudonarcissus, there is a danger that the new seedlings, having hybrid vigour, could out-compete the wild plants.)" + }, + "file": { + "contentLength": 62307, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ecda5f79c0714acbe609146166abbf3872ba51f459debd5e20c8b61bb932ed37" + } } }, { "type": "Taxon", "id": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Liliales is an order of monocotyledonous flowering plants in the Angiosperm Phylogeny Group and Angiosperm Phylogeny Web system, within the lilioid monocots. This order of necessity includes the family Liliaceae. The APG III system (2009) places this order in the monocot clade. In APG III, the family Luzuriagaceae is combined with the family Alstroemeriaceae and the family Petermanniaceae is recognized. Both the order Lililiales and the family Liliaceae have had a widely disputed history, with the circumscription varying greatly from one taxonomist to another. Previous members of this order, which at one stage included most monocots with conspicuous tepals and lacking starch in the endosperm are now distributed over three orders, Liliales, Dioscoreales and Asparagales, using predominantly molecular phylogenetics. The newly delimited Liliales is monophyletic, with ten families. Well known plants from the order include Lilium (lily), tulip, the North American wildflower Trillium, and greenbrier.\n\nThus circumscribed, this order consists mostly of herbaceous plants, but lianas and shrubs also occur. They are mostly perennial plants, with food storage organs such as corms or rhizomes. The family Corsiaceae is notable for being heterotrophic.\n\nThe order has worldwide distribution. The larger families (with more than 100 species) are roughly confined to the Northern Hemisphere, or are distributed worldwide, centering on the north. On the other hand, the smaller families (with up to 10 species) are confined to the Southern Hemisphere, or sometimes just to Australia or South America. The total number of species in the order is now about 1768.\n\nAs with any herbaceous group, the fossil record of the Liliales is rather scarce. There are several species from the Eocene, such as Petermanniopsis anglesaensis or Smilax, but their identification is not definite. Another known fossil is Ripogonum scandens from the Miocene. Due to the scarcity of data, it seems impossible to determine precisely the age and the initial distribution of the order. It is assumed that the Liliales originate from the Lower Cretaceous, over 100 million years ago. Fossil aquatic plants from the Cretaceous of northeastern Brazil and a new terrestrial species placed in the new genus Cratosmilax suggest that the first species have appeared around 120 million years ago when the continents formed Pangea, before dispersing as Asia, Africa and America. The initial diversification to the current families took place between 82 and 48 million years ago. The order consists of 10 families, 67 genera and about 1,768 species.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Liliales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliales" @@ -384,7 +456,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825392.074784, + "start": 1790361092.028617, "indices": "*", "combinedQuery": { "_source": [ @@ -425,8 +497,8 @@ } } }, - "end": 1758825392.106174, - "duration": 0.03139 + "end": 1790361092.045917, + "duration": 0.0173 }, { "input": { @@ -447,7 +519,7 @@ "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "type": "Plant", "metadata": { - "score": 3.9976888 + "score": 4.0113134 } }, { @@ -465,17 +537,17 @@ } }, { - "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", - "type": "Plant", + "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "type": "Taxon", "metadata": { - "score": 3.2730358 + "score": 3.269838 } }, { - "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "type": "Taxon", + "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", + "type": "Plant", "metadata": { - "score": 3.269838 + "score": 3.2554708 } }, { @@ -489,7 +561,7 @@ "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "type": "Plant", "metadata": { - "score": 3.021591 + "score": 3.060035 } }, { @@ -531,28 +603,28 @@ "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "type": "Plant", "metadata": { - "score": 2.152007 + "score": 2.1294188 } }, { "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "type": "Plant", "metadata": { - "score": 2.1088712 + "score": 2.085987 } }, { "id": "de004523-5165-4f10-872b-92eb9637a5d1", "type": "Plant", "metadata": { - "score": 2.02761 + "score": 2.0042536 } }, { "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "type": "Plant", "metadata": { - "score": 1.9892946 + "score": 1.9657542 } }, { @@ -566,7 +638,7 @@ "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "type": "Plant", "metadata": { - "score": 1.7868379 + "score": 1.8255562 } }, { @@ -584,14 +656,14 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825392.106344, + "start": 1790361092.046199, "accessibleElementIds": [ "16884ac8-ba7a-4c91-8449-4fdd803644b6", "258c0dfe-b1d8-4839-beed-d00d1b544a96", "1feedd9f-0c12-490c-8461-b12ff7447ac8", "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", - "f8179dfc-5578-44de-adc0-d6b613eb7a32", "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "f8179dfc-5578-44de-adc0-d6b613eb7a32", "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "23508e6c-632a-496d-9bd6-8c62a03216af", "7dd3a650-d60e-40c9-89d0-bccaf395369f", @@ -607,8 +679,8 @@ "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "1852bdff-a4dd-4f91-9243-0e802775f757" ], - "end": 1758825392.178265, - "duration": 0.071921 + "end": 1790361092.126483, + "duration": 0.080284 } ] } \ No newline at end of file diff --git a/docs/search/example/element-hydration/implicit-elements-hydration/response-header.txt b/docs/search/example/element-hydration/implicit-elements-hydration/response-header.txt index 34499e40..5da47216 100644 --- a/docs/search/example/element-hydration/implicit-elements-hydration/response-header.txt +++ b/docs/search/example/element-hydration/implicit-elements-hydration/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:04 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/element-hydration/implicit-paths-hydration/response-body.json b/docs/search/example/element-hydration/implicit-paths-hydration/response-body.json index 58b34445..0f5e6cbd 100644 --- a/docs/search/example/element-hydration/implicit-paths-hydration/response-body.json +++ b/docs/search/example/element-hydration/implicit-paths-hydration/response-body.json @@ -5,9 +5,9 @@ "type": "Taxon", "id": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Gloriosa", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Colchicaceae/Gloriosa", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_(plant)", @@ -18,6 +18,7 @@ "type": "Plant", "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "", @@ -32,22 +33,30 @@ "link": "https://en.wikipedia.org/wiki/File:Gloriosa_superba_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Flame Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "G. superba", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_superba", - "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily,[3] gloriosa lily, tiger claw,[4] and fire lily.[5]" + "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily, gloriosa lily, tiger claw, and fire lily." + }, + "file": { + "contentLength": 90681, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "72e3e3770db795b2f04f0b5bb0be43e74df70de4faa0bf83a706bbde29e4ea0b" + } } }, { "type": "Taxon", "id": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilieae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilieae", @@ -58,19 +67,33 @@ "type": "Taxon", "id": "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Kniphofia", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae/Asphodeloideae/Kniphofia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Kniphofia", "description": "Kniphofia (/nɪpˈhoʊfiə/, /nɪˈfoʊfiə/) is a genus of perennial flowering plants in the family Asphodelaceae, first described as a genus in 1794. All species of Kniphofia are native to Africa. Common names include tritoma, red hot poker, torch lily and poker plant." } }, + { + "type": "Taxon", + "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "data": { + "created": "2026-09-25T18:30:16+00:00", + "name": "Lilioideae", + "updated": "2026-09-25T18:30:16+00:00", + "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae", + "scenario": "general.botanicExample", + "link": "https://en.wikipedia.org/wiki/Lilioideae", + "description": "The Lilioideae are a subfamily of monocotyledonous perennial, herbaceous mainly bulbous flowering plants in the lily family, Liliaceae. They are found predominantly in the temperate and colder regions of the Northern Hemisphere, particularly East Asia and North America. The subfamily includes two tribes. They are of economic importance, particularly the lilies and tulips." + } + }, { "type": "Plant", "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Red-hot poker plants (Kniphofia uvaria) on the shore of Lake Jindabyne, New South Wales, Australia.", @@ -79,35 +102,30 @@ "link": "https://en.wikipedia.org/wiki/File:Kniphofia_uvaria_close.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Red Hot Poker", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "K. uvaria", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Kniphofia_uvaria", "description": "Kniphofia uvaria is a species of flowering plant in the family Asphodelaceae, commonly known as tritomea, torch lily, or red hot poker, due to the shape and color of its inflorescence. The leaves are reminiscent of a lily, and the flowerhead can reach up to 1.5 m (5 ft) in height. There are many varieties of torch lily, and they bloom at different times during the growing season. The flowers are red, orange, and yellow." - } - }, - { - "type": "Taxon", - "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", - "name": "Lilioideae", - "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae", - "scenario": "general.botanicExample", - "link": "https://en.wikipedia.org/wiki/Lilioideae", - "description": "The Lilioideae are a subfamily of monocotyledonous perennial, herbaceous mainly bulbous flowering plants in the lily family, Liliaceae. They are found predominantly in the temperate and colder regions of the Northern Hemisphere, particularly East Asia and North America. The subfamily includes two tribes. They are of economic importance, particularly the lilies and tulips." + }, + "file": { + "contentLength": 123686, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a0f461e0383bc5b4518a43e1ac76060612c7e87bf420f9a6bbbe5231012108fe" + } } }, { "type": "Taxon", "id": "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Trillium", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Melanthiaceae/Trillium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Trillium", @@ -118,6 +136,7 @@ "type": "Plant", "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Lilium candidum, Israel", @@ -132,22 +151,30 @@ "link": "https://en.wikipedia.org/wiki/File:Lilium_candidum_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "L. candidum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium_candidum", - "description": "Lilium candidum, the Madonna lily[2][3] or white lily,[4] is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions.[1][5] It has been cultivated since antiquity, for at least 3,000 years,[6] and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + "description": "Lilium candidum, the Madonna lily or white lily, is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions. It has been cultivated since antiquity, for at least 3,000 years, and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + }, + "file": { + "contentLength": 115168, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ee066b93ae72c719f863a428f03c86ecd28e52818528eacf4d4e32acb4b4b37c" + } } }, { "type": "Taxon", "id": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilium", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae/Lilium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium", @@ -158,9 +185,9 @@ "type": "Taxon", "id": "2c0bb4b9-c1ec-41f3-b9d9-f59a8b8bef38", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Asparagaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asparagaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asparagaceae", @@ -171,10 +198,10 @@ "type": "Taxon", "id": "425235d6-75ab-4ccb-8208-783ced0decc6", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "The lily family, Liliaceae, consists of about 15 genera and 610 species of flowering plants within the order Liliales. They are monocotyledonous, perennial, herbaceous, often bulbous geophytes. Plants in this family have evolved with a fair amount of morphological diversity despite genetic similarity. Common characteristics include large flowers with parts arranged in threes: with six colored or patterned petaloid tepals (undifferentiated petals and sepals) arranged in two whorls, six stamens and a superior ovary. The leaves are linear in shape, with their veins usually arranged parallel to the edges, single and arranged alternating on the stem, or in a rosette at the base. Most species are grown from bulbs, although some have rhizomes. First described in 1789, the lily family became a paraphyletic \"catch-all\" (wastebasket) group of lilioid monocots that did not fit into other families and included a great number of genera now included in other families and in some cases in other orders. Consequently, many sources and descriptions labelled \"Liliaceae\" deal with the broader sense of the family.\n\nThe family evolved approximately 68 million years ago during the Late Cretaceous to Early Paleogene epochs. Liliaceae are widely distributed, mainly in temperate regions of the Northern Hemisphere and the flowers are insect pollinated. Many Liliaceae are important ornamental plants, widely grown for their attractive flowers and involved in a major floriculture of cut flowers and dry bulbs. Some species are poisonous if eaten and can have adverse health effects in humans and household pets.\n\nA number of Liliaceae genera are popular cultivated plants in private and public spaces. Lilies and tulips in particular have had considerable symbolic and decorative value, and appear frequently in paintings and the decorative arts. They are also an economically important product. Most of their genera, Lilium in particular, face considerable herbivory pressure from deer in some areas, both wild and domestic.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Liliaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliaceae" @@ -184,10 +211,10 @@ "type": "Taxon", "id": "1a9579bd-1331-4d5c-93ec-a9ff8d9c576b", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Aloe (/ˈæloʊ(i), əˈloʊi/; also written Aloë) is a genus containing over 650 species of flowering succulent plants. The most widely known species is Aloe vera, or \"true aloe\". It is called this because it is cultivated as the standard source for assorted pharmaceutical purposes. Other species, such as Aloe ferox, are also cultivated or harvested from the wild for similar applications.\n\nThe APG IV system (2016) places the genus in the family Asphodelaceae, subfamily Asphodeloideae. Within the subfamily it may be placed in the tribe Aloeae. In the past, it has been assigned to the family Aloaceae (now included in the Asphodeloidae) or to a broadly circumscribed family Liliaceae (the lily family). The plant Agave americana, which is sometimes called \"American aloe\", belongs to the Asparagaceae, a different family.\n\nThe genus is native to tropical and southern Africa, Madagascar, Jordan, the Arabian Peninsula, and various islands in the Indian Ocean (Mauritius, Réunion, Comoros, etc.). A few species have also become naturalized in other regions (Mediterranean, India, Australia, North and South America, Hawaiian Islands, etc.).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Aloe", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae/Asphodeloideae/Aloe", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Aloe" @@ -197,10 +224,10 @@ "type": "Taxon", "id": "47e135a7-c77a-4489-9262-1e425a4b7177", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Asparagales (asparagoid lilies) are a diverse order of flowering plants in the monocots. Under the APG IV system of flowering plant classification, Asparagales are the largest order of monocots with 14 families, 1,122 genera, and about 36,000 species, with members as varied as asparaguses, orchids, yuccas, irises, onions, garlics, leeks, and other alliums, daffodils, snowdrops, amaryllis, agaves, butcher's broom, agapanthuses, Solomon's seal, hyacinths, bluebells, spider plants, grasstrees, aloes, freesias, gladioli, crocuses, and saffrons.\n\nMost species of Asparagales are herbaceous perennials, although some are climbers and some are trees or shrubs. The order also contains many geophytes (bulbs, corms, and various kinds of tuber). The leaves of almost all species form a tight rosette, either at the base of the plant or at the end of the stem, but occasionally along the stem. The flowers are not particularly distinctive, being 'lily type', with six tepals and up to six stamina. One of the defining characteristics (synapomorphies) of the order is the presence of phytomelanin, a black pigment present in the seed coat, creating a dark crust. Phytomelanin is found in most families of the Asparagales (although not in Orchidaceae, thought to be the sister-group of the rest of the order).\n\nThe order Asparagales takes its name from the type family Asparagaceae and has only recently been recognized in classification systems. The order is clearly circumscribed on the basis of molecular phylogenetics, but it is difficult to define morphologically since its members are structurally diverse. The order was first put forward by Huber in 1977 and later taken up in the Dahlgren system of 1985 and then the Angiosperm Phylogeny Group systems. Before this, many of its families were assigned to the old order Liliales, which was redistributed over three orders, Liliales, Asparagales, and Dioscoreales, based on molecular phylogenetics. The boundaries of the Asparagales and of its families have undergone a series of changes in recent years; future research may lead to further changes and ultimately greater stability.\n\nThe order is thought to have first diverged from other related monocots some 120–130 million years ago (early in the Cretaceous period), although given the difficulty in classifying the families involved, estimates are likely to be uncertain.\n\nFrom an economic point of view, the order Asparagales is second in importance within the monocots only to the order Poales (which includes grasses and cereals). Species are used as food and flavourings (e.g. onion, garlic, leek, asparagus, vanilla, saffron), in medicinal or cosmetic applications (Aloe), as cut flowers (e.g. freesia, gladiolus, iris, orchids), and as garden ornamentals (e.g. day lilies, lily of the valley, Agapanthus).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Asparagales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asparagales" @@ -210,6 +237,7 @@ "type": "Plant", "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Flower of Nelumbo nucifera, bean of India.", @@ -224,19 +252,28 @@ "link": "https://en.wikipedia.org/wiki/File:Nelumbo_nucifera1romainguy.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lotus", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "N. nucifera", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Nelumbo_nucifera", - "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus,[1] or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae.[2] The lotus belongs in the order Proteales." + "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus, or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae. The lotus belongs in the order Proteales." + }, + "file": { + "contentLength": 63295, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a46657ef9ece1a7e0939ee5edcc4358f23a3b8b7871c6eba4ad2ce0f30cf4e9f" + } } }, { "type": "Plant", "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Saucer Magnolia -- Magnolia × soulangeana 'Rustica Rubra' found in Houston, Texas", @@ -251,19 +288,28 @@ "link": "https://en.wikipedia.org/wiki/File:Yulan_1.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Magnolia", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "M. denudata", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magnolia_denudata", - "description": "Magnolia denudata, the lilytree[2] or Yulan magnolia (simplified Chinese: \\u7389\\u5170\\u82b1; traditional Chinese: \\u7389\\u862d\\u82b1; pinyin: y\\u00f9l\\u00e1nhu\\u0101; lit. 'jade orchid/lily'), is native to central and eastern China.[3] It has been cultivated in Chinese Buddhist temple gardens since 600 AD. Its flowers were regarded as a symbol of purity in the Tang dynasty and it was planted in the grounds of the emperor's palace. It is the official city flower of Shanghai." + "description": "Magnolia denudata, the lilytree or Yulan magnolia (simplified Chinese: \\u7389\\u5170\\u82b1; traditional Chinese: \\u7389\\u862d\\u82b1; pinyin: y\\u00f9l\\u00e1nhu\\u0101; lit. 'jade orchid/lily'), is native to central and eastern China. It has been cultivated in Chinese Buddhist temple gardens since 600 AD. Its flowers were regarded as a symbol of purity in the Tang dynasty and it was planted in the grounds of the emperor's palace. It is the official city flower of Shanghai." + }, + "file": { + "contentLength": 50389, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c615404e051e1e2e6c1d107cb7c043fd0db9a71eb9671be35533e9aac5e72e82" + } } }, { "type": "Plant", "id": "de004523-5165-4f10-872b-92eb9637a5d1", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "Adenium obesum (desert rose), macro of a flower, side view showing calyx, corolla and styles. Focus stack of 7 images. Uthandi, Chennai", @@ -278,19 +324,28 @@ "link": "https://en.wikipedia.org/wiki/File:RCN_Mother.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Desert Rose", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "A. obesum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Adenium_obesum", - "description": "Adenium obesum, more commonly known as a desert rose, is a poisonous species of flowering plant belonging to the tribe Nerieae of the subfamily Apocynoideae of the dogbane family, Apocynaceae.[3] It is native to the Sahel regions south of the Sahara (from Mauritania and Senegal to Sudan), tropical and subtropical eastern and southern Africa, as well as the Arabian Peninsula. Other names for the flower include Sabi star, kudu, mock azalea, and impala lily. Adenium obesum is a popular houseplant and bonsai in temperate regions." + "description": "Adenium obesum, more commonly known as a desert rose, is a poisonous species of flowering plant belonging to the tribe Nerieae of the subfamily Apocynoideae of the dogbane family, Apocynaceae. It is native to the Sahel regions south of the Sahara (from Mauritania and Senegal to Sudan), tropical and subtropical eastern and southern Africa, as well as the Arabian Peninsula. Other names for the flower include Sabi star, kudu, mock azalea, and impala lily. Adenium obesum is a popular houseplant and bonsai in temperate regions." + }, + "file": { + "contentLength": 58116, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "858fe2bee255dd252d51d161d4f183a93c2da0d2d6662b20870cbbf3eec81acb" + } } }, { "type": "Plant", "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "in Seoul Forest, South Korea", @@ -311,23 +366,31 @@ "link": "https://en.wikipedia.org/wiki/File:Tulipa_orphanidea_060506.jpg" } ], - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "hasFile": true, "name": "Tulip", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "Tulipa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Tulip", - "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae,[2] along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae, along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + }, + "file": { + "contentLength": 105488, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c4c242897c43a74e9e4a8b5bf89e6b2cb1cbd99f8d621f33eea175cbf6dfab97" + } } }, { "type": "Taxon", "id": "cec3972f-322f-432c-b86e-611c85a96b6c", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Yucca (/ˈjʌkə/ YUCK-uh) is both the scientific name and common name for a genus native to North America from Panama to southern Canada. It contains 50 accepted species. In addition to yucca, they are also known as Adam's needle or Spanish-bayonet. The genus is generally classified in the asparagus family in a subfamily with the Agave, though historically it was part of the lily family. The species range from small shrubby plants to tree-like giants, such as the Joshua tree. All yuccas have rosettes of leaves that taper to points and inflorescences with many flowers that are mainly cream white with thick petals. Though adapted to a wide range of climates the plants are xerophytes, ones that specialize in dry living conditions.\n\nThe tight relationship between the yucca plants and their pollinators, the yucca moths from the genera Tegeticula and Parategeticula, is a well known example of evolutionary mutualism. They are an important part of the ecology of North American deserts, providing shelter to small animals and creating habitats. The human uses of yuccas include garden plants, as food, and for extracts. The flower petals of various species are eaten as a part of local cuisine, particularly in Central America and Mexico. Historically, the yucca was extensively used for its fibers to make cords, baskets, mats, and sandals. It continues to be used by native peoples for traditional soaps.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Yucca", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asparagaceae/Agavoideae/Yucca", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Yucca" @@ -337,6 +400,7 @@ "type": "Plant", "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "Narcissus pseudonarcissus", @@ -345,23 +409,31 @@ "link": "https://en.wikipedia.org/wiki/File:Narcissus_pseudonarcissus_flower_300303.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Daffodil", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "N. pseudonarcissus", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Narcissus_pseudonarcissus", - "description": "Narcissus pseudonarcissus, commonly named the wild daffodil or Lent lily (Welsh: Cennin Pedr), is a perennial flowering plant.[1][2][3][4][5][6]\n\nThis species has pale yellow tepals, with a darker central trumpet. The long, narrow leaves are slightly greyish green in colour and rise from the base of the stem. The plant grows from a bulb. The flowers produce seeds which, when germinated, take five to seven years to produce a flowering plant. (Sexual seed reproduction mixes the traits of both parent flowers, so if garden hybrid cultivars are planted close to wild populations of Narcissus pseudonarcissus, there is a danger that the new seedlings, having hybrid vigour, could out-compete the wild plants.)[7]" + "description": "Narcissus pseudonarcissus, commonly named the wild daffodil or Lent lily (Welsh: Cennin Pedr), is a perennial flowering plant.\n\nThis species has pale yellow tepals, with a darker central trumpet. The long, narrow leaves are slightly greyish green in colour and rise from the base of the stem. The plant grows from a bulb. The flowers produce seeds which, when germinated, take five to seven years to produce a flowering plant. (Sexual seed reproduction mixes the traits of both parent flowers, so if garden hybrid cultivars are planted close to wild populations of Narcissus pseudonarcissus, there is a danger that the new seedlings, having hybrid vigour, could out-compete the wild plants.)" + }, + "file": { + "contentLength": 62307, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ecda5f79c0714acbe609146166abbf3872ba51f459debd5e20c8b61bb932ed37" + } } }, { "type": "Taxon", "id": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Liliales is an order of monocotyledonous flowering plants in the Angiosperm Phylogeny Group and Angiosperm Phylogeny Web system, within the lilioid monocots. This order of necessity includes the family Liliaceae. The APG III system (2009) places this order in the monocot clade. In APG III, the family Luzuriagaceae is combined with the family Alstroemeriaceae and the family Petermanniaceae is recognized. Both the order Lililiales and the family Liliaceae have had a widely disputed history, with the circumscription varying greatly from one taxonomist to another. Previous members of this order, which at one stage included most monocots with conspicuous tepals and lacking starch in the endosperm are now distributed over three orders, Liliales, Dioscoreales and Asparagales, using predominantly molecular phylogenetics. The newly delimited Liliales is monophyletic, with ten families. Well known plants from the order include Lilium (lily), tulip, the North American wildflower Trillium, and greenbrier.\n\nThus circumscribed, this order consists mostly of herbaceous plants, but lianas and shrubs also occur. They are mostly perennial plants, with food storage organs such as corms or rhizomes. The family Corsiaceae is notable for being heterotrophic.\n\nThe order has worldwide distribution. The larger families (with more than 100 species) are roughly confined to the Northern Hemisphere, or are distributed worldwide, centering on the north. On the other hand, the smaller families (with up to 10 species) are confined to the Southern Hemisphere, or sometimes just to Australia or South America. The total number of species in the order is now about 1768.\n\nAs with any herbaceous group, the fossil record of the Liliales is rather scarce. There are several species from the Eocene, such as Petermanniopsis anglesaensis or Smilax, but their identification is not definite. Another known fossil is Ripogonum scandens from the Miocene. Due to the scarcity of data, it seems impossible to determine precisely the age and the initial distribution of the order. It is assumed that the Liliales originate from the Lower Cretaceous, over 100 million years ago. Fossil aquatic plants from the Cretaceous of northeastern Brazil and a new terrestrial species placed in the new genus Cratosmilax suggest that the first species have appeared around 120 million years ago when the continents formed Pangea, before dispersing as Asia, Africa and America. The initial diversification to the current families took place between 82 and 48 million years ago. The order consists of 10 families, 67 genera and about 1,768 species.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Liliales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliales" @@ -384,7 +456,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825392.350405, + "start": 1790361092.173303, "indices": "*", "combinedQuery": { "_source": [ @@ -425,8 +497,8 @@ } } }, - "end": 1758825392.381313, - "duration": 0.030908 + "end": 1790361092.190453, + "duration": 0.01715 }, { "input": { @@ -447,7 +519,7 @@ "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "type": "Plant", "metadata": { - "score": 3.9976888 + "score": 4.0113134 } }, { @@ -465,17 +537,17 @@ } }, { - "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", - "type": "Plant", + "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "type": "Taxon", "metadata": { - "score": 3.2730358 + "score": 3.269838 } }, { - "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "type": "Taxon", + "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", + "type": "Plant", "metadata": { - "score": 3.269838 + "score": 3.2554708 } }, { @@ -489,7 +561,7 @@ "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "type": "Plant", "metadata": { - "score": 3.021591 + "score": 3.060035 } }, { @@ -531,28 +603,28 @@ "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "type": "Plant", "metadata": { - "score": 2.152007 + "score": 2.1294188 } }, { "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "type": "Plant", "metadata": { - "score": 2.1088712 + "score": 2.085987 } }, { "id": "de004523-5165-4f10-872b-92eb9637a5d1", "type": "Plant", "metadata": { - "score": 2.02761 + "score": 2.0042536 } }, { "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "type": "Plant", "metadata": { - "score": 1.9892946 + "score": 1.9657542 } }, { @@ -566,7 +638,7 @@ "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "type": "Plant", "metadata": { - "score": 1.7868379 + "score": 1.8255562 } }, { @@ -584,14 +656,14 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825392.381483, + "start": 1790361092.190744, "accessibleElementIds": [ "16884ac8-ba7a-4c91-8449-4fdd803644b6", "258c0dfe-b1d8-4839-beed-d00d1b544a96", "1feedd9f-0c12-490c-8461-b12ff7447ac8", "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", - "f8179dfc-5578-44de-adc0-d6b613eb7a32", "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "f8179dfc-5578-44de-adc0-d6b613eb7a32", "9abc0ab3-fa1a-4138-80c1-49db5c4d082f", "23508e6c-632a-496d-9bd6-8c62a03216af", "7dd3a650-d60e-40c9-89d0-bccaf395369f", @@ -607,8 +679,8 @@ "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "1852bdff-a4dd-4f91-9243-0e802775f757" ], - "end": 1758825392.451822, - "duration": 0.070339 + "end": 1790361092.274449, + "duration": 0.083705 } ] } \ No newline at end of file diff --git a/docs/search/example/element-hydration/implicit-paths-hydration/response-header.txt b/docs/search/example/element-hydration/implicit-paths-hydration/response-header.txt index 34499e40..56840199 100644 --- a/docs/search/example/element-hydration/implicit-paths-hydration/response-header.txt +++ b/docs/search/example/element-hydration/implicit-paths-hydration/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:05 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/element-hydration/parameterized-elementids-hydration/response-body.json b/docs/search/example/element-hydration/parameterized-elementids-hydration/response-body.json index b8c9c3fe..8069962f 100644 --- a/docs/search/example/element-hydration/parameterized-elementids-hydration/response-body.json +++ b/docs/search/example/element-hydration/parameterized-elementids-hydration/response-body.json @@ -5,6 +5,7 @@ "type": "Plant", "id": "70965ab5-bc3e-4bbe-aacf-1b7e12b76110", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "White trillium (Trillium grandiflorum) blooming in Backus Woods.", @@ -25,19 +26,28 @@ "link": "https://en.wikipedia.org/wiki/File:White_Trillium_Trillium_grandiflorum_Flower_2613px.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Trillium", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "T. grandiflorum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Trillium_grandiflorum", - "description": "Trillium grandiflorum, the white trillium,[3] large-flowered trillium, great white trillium,[4] white wake-robin or French: trille blanc, is a species of flowering plant in the family Melanthiaceae. A monocotyledonous, herbaceous perennial, the plant is native to eastern North America, from northern Quebec to the southern parts of the United States through the Appalachian Mountains into northernmost Georgia and west to Minnesota. There are also several isolated populations in Nova Scotia, Maine, southern Illinois, and Iowa.[5]" + "description": "Trillium grandiflorum, the white trillium, large-flowered trillium, great white trillium, white wake-robin or French: trille blanc, is a species of flowering plant in the family Melanthiaceae. A monocotyledonous, herbaceous perennial, the plant is native to eastern North America, from northern Quebec to the southern parts of the United States through the Appalachian Mountains into northernmost Georgia and west to Minnesota. There are also several isolated populations in Nova Scotia, Maine, southern Illinois, and Iowa." + }, + "file": { + "contentLength": 52082, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a235debeb572b5ab0cd3a84dfcf869dd558042dead656097fa5d414f2fee2b31" + } } }, { "type": "Plant", "id": "4a335e0b-e6bf-4c64-8c28-2a17bd6f0dec", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Hibiscus heterophyllus cultivated plant growing in Thirlmere", @@ -52,19 +62,28 @@ "link": "https://en.wikipedia.org/wiki/File:Hibiscus_heterophyllus_Chatswood_West.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Hibiscus", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "H. heterophyllus", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Hibiscus_heterophyllus", - "description": "Hibiscus heterophyllus, commonly known as native rosella or toilet paper bush,[2] is a flowering plant in the family Malvaceae. It a shrub or small tree with white, pale pink or yellow flowers with a dark red centre and grows in New South Wales and Queensland." + "description": "Hibiscus heterophyllus, commonly known as native rosella or toilet paper bush, is a flowering plant in the family Malvaceae. It a shrub or small tree with white, pale pink or yellow flowers with a dark red centre and grows in New South Wales and Queensland." + }, + "file": { + "contentLength": 91123, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "9adcacd32ddda75b23007df4be9d74d85f1e768ae1a991891703e3d1bee64006" + } } }, { "type": "Plant", "id": "b133d1d5-a24c-4409-955f-99b53b3f2a73", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "Arabian jasmin 'Grand Duke of Tuscany'", @@ -73,13 +92,21 @@ "link": "https://en.wikipedia.org/wiki/File:Jasminum_sambac_%27Grand_Duke_of_Tuscany%27.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Jasmine", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "J. sambac", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Jasminum_sambac", - "description": "Jasminum sambac (Arabian jasmine or Sambac jasmine)[1][3] is a species of jasmine native to Bhutan and India.[4][5] It is cultivated in many places, especially West Asia, South Asia and Southeast Asia. It is naturalised in many scattered locales: Mauritius, Madagascar, the Maldives, Christmas Island, Chiapas, Central America, southern Florida, the Bahamas, Cuba, Hispaniola, Jamaica, Puerto Rico, and the Lesser Antilles.[6][4][7]" + "description": "Jasminum sambac (Arabian jasmine or Sambac jasmine) is a species of jasmine native to Bhutan and India. It is cultivated in many places, especially West Asia, South Asia and Southeast Asia. It is naturalised in many scattered locales: Mauritius, Madagascar, the Maldives, Christmas Island, Chiapas, Central America, southern Florida, the Bahamas, Cuba, Hispaniola, Jamaica, Puerto Rico, and the Lesser Antilles." + }, + "file": { + "contentLength": 27888, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "96e35f27fa6c148d68ba326b80f3172f4de2e08ad35127bd8e3e4fb006fb5176" + } } } ], @@ -113,14 +140,14 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825392.623079, + "start": 1790276706.945658, "accessibleElementIds": [ "70965ab5-bc3e-4bbe-aacf-1b7e12b76110", "4a335e0b-e6bf-4c64-8c28-2a17bd6f0dec", "b133d1d5-a24c-4409-955f-99b53b3f2a73" ], - "end": 1758825392.730921, - "duration": 0.107842 + "end": 1790276707.040742, + "duration": 0.095084 } ] } \ No newline at end of file diff --git a/docs/search/example/element-hydration/parameterized-elementids-hydration/response-header.txt b/docs/search/example/element-hydration/parameterized-elementids-hydration/response-header.txt index 34499e40..56840199 100644 --- a/docs/search/example/element-hydration/parameterized-elementids-hydration/response-header.txt +++ b/docs/search/example/element-hydration/parameterized-elementids-hydration/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:05 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration/response-body.json b/docs/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration/response-body.json index ae10aa4e..b607f38c 100644 --- a/docs/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration/response-body.json +++ b/docs/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration/response-body.json @@ -5,6 +5,7 @@ "type": "Plant", "id": "a3e1063d-a714-4fb4-a95e-6a11e7076bb0", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Wild columbine (Aquilegia canadensis) in Talcott Mountain State Park", @@ -19,19 +20,28 @@ "link": "https://en.wikipedia.org/wiki/File:Aquilegia_canadensis_Redmarkviolinist.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Columbine", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "A. canadensis", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Aquilegia_canadensis", "description": "Aquilegia canadensis, the Canadian or Canada columbine, eastern red columbine, or wild columbine, is a species of flowering plant in the buttercup family Ranunculaceae. It is an herbaceous perennial native to woodland and rocky slopes in eastern North America, prized for its red and yellow flowers. It readily hybridizes with other species in the genus Aquilegia." + }, + "file": { + "contentLength": 51355, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "25772ade78beadc7fc55053016c88b17ede751fc001518b0a25428af523f8e64" + } } }, { "type": "Plant", "id": "eb5373ef-50ae-462f-a07a-5ccf767bff21", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Flowering Corymbia ficifolia, Austins Ferry, Tasmania, Australia", @@ -46,19 +56,28 @@ "link": "https://en.wikipedia.org/wiki/File:Corymbia_ficifolia_in_Berkeley_California.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Eucalyptus Blossom", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "C. ficifolia", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Corymbia_ficifolia", - "description": "Corymbia ficifolia, commonly known as red flowering gum,[2] is a species of small tree that is endemic to the south-west of Western Australia. It has rough, fibrous bark on the trunk and branches, egg-shaped to broadly lance-shape adult leaves, flower buds in groups of seven, bright red, pink or orange flowers and urn-shaped fruit. It has a restricted distribution in the wild but is one of the most commonly planted ornamental eucalypts." + "description": "Corymbia ficifolia, commonly known as red flowering gum, is a species of small tree that is endemic to the south-west of Western Australia. It has rough, fibrous bark on the trunk and branches, egg-shaped to broadly lance-shape adult leaves, flower buds in groups of seven, bright red, pink or orange flowers and urn-shaped fruit. It has a restricted distribution in the wild but is one of the most commonly planted ornamental eucalypts." + }, + "file": { + "contentLength": 102098, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "dbd69e49d315abad39a57c90fee358301f7217b4ef5597286d9b16ae09d4a3c2" + } } }, { "type": "Plant", "id": "731fd394-6e0d-4a43-9693-4a7a7d97731e", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "", @@ -67,19 +86,28 @@ "link": "https://en.wikipedia.org/wiki/File:Bromeliaceae03.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Bromeliad", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "G. lingulata", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Guzmania_lingulata", - "description": "Guzmania lingulata, the droophead tufted airplant or scarlet star, is a species of flowering plant in the family Bromeliaceae, subfamily Tillandsioideae. This evergreen epiphytic perennial[2] is native to rainforest habitats in Central America, northern and central South America and southern Mexico.[1] The Latin word lingulata means \"tongue-shaped\".[3] The foliage grows in a star-shaped basal rosette culminating in an orange and red bracted inflorescence. It is among the most commonly cultivated bromeliad types, with cultivars producing flowers in shades of maroon, red, orange, yellow or pink." + "description": "Guzmania lingulata, the droophead tufted airplant or scarlet star, is a species of flowering plant in the family Bromeliaceae, subfamily Tillandsioideae. This evergreen epiphytic perennial is native to rainforest habitats in Central America, northern and central South America and southern Mexico. The Latin word lingulata means \"tongue-shaped\". The foliage grows in a star-shaped basal rosette culminating in an orange and red bracted inflorescence. It is among the most commonly cultivated bromeliad types, with cultivars producing flowers in shades of maroon, red, orange, yellow or pink." + }, + "file": { + "contentLength": 82201, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "d13ab134d7d1b9933d4369c9aeeae07827fdfb3cd6f2ae6c4b549375412ef097" + } } }, { "type": "Plant", "id": "6a2b73e7-716b-4a8d-a8e6-69ab80b65e67", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "A poster showing three different stages of a Common Poppy flower (Papaver rhoeas): bud, flower and fruit (capsule).", @@ -88,19 +116,28 @@ "link": "https://en.wikipedia.org/wiki/File:Poster_papaver_3a.jpg" } ], - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "hasFile": true, "name": "Poppy", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "P. rhoeas", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Papaver_rhoeas", - "description": "Papaver rhoeas, with common names including common poppy,[3] corn poppy, corn rose, field poppy,[4] Flanders poppy, red poppy, and Odai, is an annual herbaceous species of flowering plant in the poppy family Papaveraceae. It is native to north Africa and temperate Eurasia and is introduced into temperate areas on all other continents except Antarctica." + "description": "Papaver rhoeas, with common names including common poppy, corn poppy, corn rose, field poppy, Flanders poppy, red poppy, and Odai, is an annual herbaceous species of flowering plant in the poppy family Papaveraceae. It is native to north Africa and temperate Eurasia and is introduced into temperate areas on all other continents except Antarctica." + }, + "file": { + "contentLength": 125585, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "0e468bf4e2b26f8e04914eb4dda88622c7c196b4a7a71e82bb857068a6e0b70a" + } } }, { "type": "Plant", "id": "3f6be764-d780-44d0-a12f-15326abe091d", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Grevillea rosmarinifolia subsp. glabella at Stocks Nursery and Botanic Gardens, Harden, NSW", @@ -109,19 +146,28 @@ "link": "https://en.wikipedia.org/wiki/File:Grevillea_rosmarinifolia_glabella.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Grevillea", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "G. rosmarinifolia", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Grevillea_rosmarinifolia", - "description": "Grevillea rosmarinifolia, commonly known as rosemary grevillea,[2] is a species of flowering plant in the family Proteaceae and is endemic to south-eastern continental Australia and naturalised in other parts of the country. It is usually an erect, compact to open shrub with linear, narrowly elliptic or narrowly oblong leaves with the edges rolled under, and loose clusters of pink to red flowers." + "description": "Grevillea rosmarinifolia, commonly known as rosemary grevillea, is a species of flowering plant in the family Proteaceae and is endemic to south-eastern continental Australia and naturalised in other parts of the country. It is usually an erect, compact to open shrub with linear, narrowly elliptic or narrowly oblong leaves with the edges rolled under, and loose clusters of pink to red flowers." + }, + "file": { + "contentLength": 84441, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "488aa6a8d34a9927c057eacc28d8917f462af819f011bca44d533d4204b56d6b" + } } }, { "type": "Plant", "id": "36eca1a2-8a7b-42c5-860a-4ad444f8792f", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Sturt's Desert Pea Swainsona formosa, Melbourne Zoo", @@ -136,19 +182,28 @@ "link": "https://en.wikipedia.org/wiki/File:A.I.B.T_Sturt_Peas.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Sturt\\u2019s Desert Pea", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "S. formosa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Swainsona_formosa", - "description": "Swainsona formosa, commonly known as Sturt's desert pea or Sturt pea,[3] is a species of flowering plant in the family Fabaceae and is native to all continental states and the Northern Territory of Australia, with the exception of Victoria. It is a prostrate annual or short lived perennial herb with imparipinnate leaves with about 15 elliptic to egg-shaped leaflets with the narrower end towards the base, and racemes of usually red flowers in racemes of 2 to 6." + "description": "Swainsona formosa, commonly known as Sturt's desert pea or Sturt pea, is a species of flowering plant in the family Fabaceae and is native to all continental states and the Northern Territory of Australia, with the exception of Victoria. It is a prostrate annual or short lived perennial herb with imparipinnate leaves with about 15 elliptic to egg-shaped leaflets with the narrower end towards the base, and racemes of usually red flowers in racemes of 2 to 6." + }, + "file": { + "contentLength": 98146, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "23c083fd8583e0c241fa72f8dca1af7523b531625317fd209cdd0b3102d724a4" + } } }, { "type": "Plant", "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "data": { + "created": "2026-09-24T19:04:01+00:00", "images": [ { "description": "in Seoul Forest, South Korea", @@ -169,19 +224,28 @@ "link": "https://en.wikipedia.org/wiki/File:Tulipa_orphanidea_060506.jpg" } ], - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "hasFile": true, "name": "Tulip", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:01+00:00", "scientificName": "Tulipa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Tulip", - "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae,[2] along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae, along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + }, + "file": { + "contentLength": 105488, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c4c242897c43a74e9e4a8b5bf89e6b2cb1cbd99f8d621f33eea175cbf6dfab97" + } } }, { "type": "Plant", "id": "0f3aced5-8484-49d4-9579-e3ec5facde95", "data": { + "created": "2026-09-24T19:04:03+00:00", "description": "Telopea speciosissima, commonly known as the New South Wales waratah or simply waratah, is a large shrub in the plant family Proteaceae. It is endemic to New South Wales in Australia. No subspecies are recognised; the closely related Telopea aspera was classified as a separate species in 1995. T. speciosissima is a shrub to 3 or 4 m (9.8 or 13.1 ft) high and 2 m (6.6 ft) wide, with dark green leaves. Its several stems arise from a pronounced woody base known as a lignotuber. The species is well renowned for its striking large red springtime inflorescences (flowerheads), each including hundreds of individual flowers. These are visited by the eastern pygmy possum (Cercartetus nanus), birds such as honeyeaters (Meliphagidae), and various insects.\n\nThe floral emblem for its home state of New South Wales, Telopea speciosissima has featured prominently in art, architecture, and advertising, particularly since Australian federation. Commercially grown in several countries as a cut flower, it is also cultivated in home gardens, requiring good drainage yet adequate moisture, but is vulnerable to various fungal diseases and pests. A number of cultivars with various shades of red, pink and even white flowers are available. Horticulturists have also developed hybrids with T. oreades and T. mongaensis which are more tolerant of cold, shade, and heavier soils.", "images": [ { @@ -197,18 +261,27 @@ "link": "https://en.wikipedia.org/wiki/File:Telopea_speciosissima_RNP.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Waratah", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "T. speciosissima", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Telopea_speciosissima" + }, + "file": { + "contentLength": 72759, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "0926def0aa909d3e889aa5ba0a01df37772ea79f87a67d0565f4d4c6ed1a60fe" + } } }, { "type": "Plant", "id": "c05a9e25-11bc-48db-8fea-6d1b885119b0", "data": { + "created": "2026-09-24T19:04:03+00:00", "images": [ { "description": "Bush Ochre (Anigozanthos), Australian Garden, Royal Botanic Gardens, Cranbourne, Victoria, Australia. 29 June, 2006.", @@ -217,13 +290,21 @@ "link": "https://en.wikipedia.org/wiki/File:Bush-Pearl-in-RBG-Cranbourne.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Kangaroo Paw", - "scenario": "general.botanicExample", + "updated": "2026-09-24T19:04:03+00:00", "scientificName": "Anigozanthos", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Anigozanthos", - "description": "Anigozanthos is a genus of plant found naturally in the Southwestern Australia biogeographic region, belonging to the bloodwort family Haemodoraceae.[1][2] The 11 species and their subspecies are commonly known as kangaroo paw or catspaw, depending on their size, and the shape and colour of their flowers. A further species, previously identified as Anigozanthos fuliginosus (black kangaroo paw), was separated to a monotypic genus as Macropidia fuliginosa. All 11 species of Anigozanthos are endemic to the south west of Western Australia,[3] Noongar Boodjar.\n\nThe species are recognised by their unusual flowers, numerous hybrids and cultivars have been developed for cultivation and floristry in recent years; kangaroo paws are much in demand as house plants and as cut flowers. The red-and-green kangaroo paw is the floral emblem of Western Australia." + "description": "Anigozanthos is a genus of plant found naturally in the Southwestern Australia biogeographic region, belonging to the bloodwort family Haemodoraceae. The 11 species and their subspecies are commonly known as kangaroo paw or catspaw, depending on their size, and the shape and colour of their flowers. A further species, previously identified as Anigozanthos fuliginosus (black kangaroo paw), was separated to a monotypic genus as Macropidia fuliginosa. All 11 species of Anigozanthos are endemic to the south west of Western Australia, Noongar Boodjar.\n\nThe species are recognised by their unusual flowers, numerous hybrids and cultivars have been developed for cultivation and floristry in recent years; kangaroo paws are much in demand as house plants and as cut flowers. The red-and-green kangaroo paw is the floral emblem of Western Australia." + }, + "file": { + "contentLength": 133185, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a5bc64f577b8715d3f8c33f17bf7a7d87dbd00001fb341de53dc52279147f04f" + } } } ], @@ -238,9 +319,9 @@ } }, "step-handler": "cypher-path-subset (App\\EventSystem\\SearchStep\\EventListener\\CypherPathSearchStepEventListener)", - "start": 1758825392.880632, - "end": 1758825393.209822, - "duration": 0.3291900157928467 + "start": 1790276707.085009, + "end": 1790276707.595679, + "duration": 0.5106699466705322 }, { "input": { @@ -508,7 +589,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825393.21006, + "start": 1790276707.596112, "indices": "*", "combinedQuery": { "_source": [ @@ -587,8 +668,8 @@ } } }, - "end": 1758825393.372277, - "duration": 0.162217 + "end": 1790276707.754085, + "duration": 0.157973 }, { "input": { @@ -841,74 +922,74 @@ "id": "a3e1063d-a714-4fb4-a95e-6a11e7076bb0", "type": "Plant", "metadata": { - "score": 3.463559 + "score": 3.4491417 } }, { "id": "eb5373ef-50ae-462f-a07a-5ccf767bff21", "type": "Plant", "metadata": { - "score": 3.296052 + "score": 3.2790928 } }, { "id": "731fd394-6e0d-4a43-9693-4a7a7d97731e", "type": "Plant", "metadata": { - "score": 3.206095 + "score": 3.2175324 } }, { "id": "6a2b73e7-716b-4a8d-a8e6-69ab80b65e67", "type": "Plant", "metadata": { - "score": 2.8846285 + "score": 2.8893025 } }, { "id": "3f6be764-d780-44d0-a12f-15326abe091d", "type": "Plant", "metadata": { - "score": 2.8042715 + "score": 2.826378 } }, { "id": "36eca1a2-8a7b-42c5-860a-4ad444f8792f", "type": "Plant", "metadata": { - "score": 2.6625946 + "score": 2.6774929 } }, { "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "type": "Plant", "metadata": { - "score": 2.599828 + "score": 2.5809202 } }, { "id": "0f3aced5-8484-49d4-9579-e3ec5facde95", "type": "Plant", "metadata": { - "score": 2.5568495 + "score": 2.5349326 } }, { "id": "c05a9e25-11bc-48db-8fea-6d1b885119b0", "type": "Plant", "metadata": { - "score": 2.3461056 + "score": 2.3267329 } } ], "totalHits": 9, - "maxScore": 3.463559 + "maxScore": 3.4491417 } ] } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825393.372446, + "start": 1790276707.754366, "accessibleElementIds": [ "a3e1063d-a714-4fb4-a95e-6a11e7076bb0", "eb5373ef-50ae-462f-a07a-5ccf767bff21", @@ -920,8 +1001,8 @@ "0f3aced5-8484-49d4-9579-e3ec5facde95", "c05a9e25-11bc-48db-8fea-6d1b885119b0" ], - "end": 1758825393.410484, - "duration": 0.038038 + "end": 1790276707.799931, + "duration": 0.045565 } ] } \ No newline at end of file diff --git a/docs/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration/response-header.txt b/docs/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration/response-header.txt index 34499e40..56840199 100644 --- a/docs/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration/response-header.txt +++ b/docs/search/example/polyglot/cypher-path-es-query-dsl-mixin-element-hydration/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:05 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration/response-body.json b/docs/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration/response-body.json index c355d1dc..fd2880a1 100644 --- a/docs/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration/response-body.json +++ b/docs/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration/response-body.json @@ -7,8 +7,8 @@ "start": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "end": "b7cda919-deea-49f9-9151-49132f83cbff", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -18,8 +18,8 @@ "start": "75a7a9c8-8330-483c-b7f3-f7ca74c48535", "end": "47e135a7-c77a-4489-9262-1e425a4b7177", "data": { - "created": "2025-09-25T18:35:32+00:00", - "updated": "2025-09-25T18:35:32+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -27,9 +27,9 @@ "type": "Taxon", "id": "0fe4710a-1998-4761-919e-aa3cb9c055f8", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Magnoliaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Magnoliids/Magnoliales/Magnoliaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magnoliaceae", @@ -40,9 +40,9 @@ "type": "Taxon", "id": "13fc213f-d90d-4c14-b841-dafb5eb1d817", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Magnolia sect. Yulania", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Magnoliids/Magnoliales/Magnoliaceae/Magnolia/Magnolia subg. Yulania/Magnolia sect. Yulania", "scenario": "general.botanicExample" } @@ -51,9 +51,9 @@ "type": "Taxon", "id": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Gloriosa", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Colchicaceae/Gloriosa", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_(plant)", @@ -64,10 +64,10 @@ "type": "Taxon", "id": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Liliales is an order of monocotyledonous flowering plants in the Angiosperm Phylogeny Group and Angiosperm Phylogeny Web system, within the lilioid monocots. This order of necessity includes the family Liliaceae. The APG III system (2009) places this order in the monocot clade. In APG III, the family Luzuriagaceae is combined with the family Alstroemeriaceae and the family Petermanniaceae is recognized. Both the order Lililiales and the family Liliaceae have had a widely disputed history, with the circumscription varying greatly from one taxonomist to another. Previous members of this order, which at one stage included most monocots with conspicuous tepals and lacking starch in the endosperm are now distributed over three orders, Liliales, Dioscoreales and Asparagales, using predominantly molecular phylogenetics. The newly delimited Liliales is monophyletic, with ten families. Well known plants from the order include Lilium (lily), tulip, the North American wildflower Trillium, and greenbrier.\n\nThus circumscribed, this order consists mostly of herbaceous plants, but lianas and shrubs also occur. They are mostly perennial plants, with food storage organs such as corms or rhizomes. The family Corsiaceae is notable for being heterotrophic.\n\nThe order has worldwide distribution. The larger families (with more than 100 species) are roughly confined to the Northern Hemisphere, or are distributed worldwide, centering on the north. On the other hand, the smaller families (with up to 10 species) are confined to the Southern Hemisphere, or sometimes just to Australia or South America. The total number of species in the order is now about 1768.\n\nAs with any herbaceous group, the fossil record of the Liliales is rather scarce. There are several species from the Eocene, such as Petermanniopsis anglesaensis or Smilax, but their identification is not definite. Another known fossil is Ripogonum scandens from the Miocene. Due to the scarcity of data, it seems impossible to determine precisely the age and the initial distribution of the order. It is assumed that the Liliales originate from the Lower Cretaceous, over 100 million years ago. Fossil aquatic plants from the Cretaceous of northeastern Brazil and a new terrestrial species placed in the new genus Cratosmilax suggest that the first species have appeared around 120 million years ago when the continents formed Pangea, before dispersing as Asia, Africa and America. The initial diversification to the current families took place between 82 and 48 million years ago. The order consists of 10 families, 67 genera and about 1,768 species.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Liliales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliales" @@ -77,9 +77,9 @@ "type": "Taxon", "id": "1d5350ed-86c5-4933-8089-5fa053a3ab02", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Gentianales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Gentianales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gentianales", @@ -90,9 +90,9 @@ "type": "Taxon", "id": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilieae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilieae", @@ -105,8 +105,8 @@ "start": "927c7763-0e29-4bd4-817e-d2b19ec424fa", "end": "2f4e71c8-851b-4d3d-a0f5-f357eab1dec1", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -114,10 +114,10 @@ "type": "Taxon", "id": "2341f6f7-1b5d-4ce9-a68e-2973be25ec9a", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "The eudicots or eudicotyledons are flowering plants that have two seed leaves (cotyledons) upon germination. The term derives from dicotyledon (etymologically, eu = true; di = two; cotyledon = seed leaf). Historically, authors have used the terms tricolpates or non-magnoliid dicots. The current botanical terms were introduced in 1991, by evolutionary botanist James A. Doyle and paleobotanist Carol L. Hotton, to emphasize the later evolutionary divergence of tricolpate dicots from earlier, less specialized, dicots.\n\nScores of familiar plants are eudicots, including many commonly cultivated and edible plants, numerous trees, tropicals and ornamentals. Among the most well-known eudicot genera are those of the sunflower (Helianthus), dandelion (Taraxacum), forget-me-not (Myosotis), cabbage (Brassica), apple (Malus), buttercup (Ranunculus), maple (Acer) and macadamia (Macadamia). Most leafy, mid-latitude trees are also classified as eudicots, with notable exceptions being the magnolias and American tulip tree (Liriodendron)—which belong to the magnoliids—and Ginkgo biloba, which is not an angiosperm.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Eudicots", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Eudicots" @@ -127,6 +127,7 @@ "type": "Plant", "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Lilium candidum, Israel", @@ -141,19 +142,28 @@ "link": "https://en.wikipedia.org/wiki/File:Lilium_candidum_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "L. candidum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium_candidum", - "description": "Lilium candidum, the Madonna lily[2][3] or white lily,[4] is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions.[1][5] It has been cultivated since antiquity, for at least 3,000 years,[6] and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + "description": "Lilium candidum, the Madonna lily or white lily, is a plant in the true lily family. It is native to the Balkans and Middle East, and naturalized in other parts of Europe, including France, Italy, and Ukraine, and in North Africa, the Canary Islands, Mexico, and other regions. It has been cultivated since antiquity, for at least 3,000 years, and has great symbolic value since then for many cultures. It is susceptible to several virus diseases common to lilies, and especially to Botrytis fungus. One technique to avoid problems with viruses is to grow plants from seed instead of bulblets." + }, + "file": { + "contentLength": 115168, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ee066b93ae72c719f863a428f03c86ecd28e52818528eacf4d4e32acb4b4b37c" + } } }, { "type": "Plant", "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "", @@ -168,13 +178,21 @@ "link": "https://en.wikipedia.org/wiki/File:Gloriosa_superba_1.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Flame Lily", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "G. superba", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Gloriosa_superba", - "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily,[3] gloriosa lily, tiger claw,[4] and fire lily.[5]" + "description": "Gloriosa superba is a species of flowering plant in the family Colchicaceae. Common names include flame lily, climbing lily, creeping lily, glory lily, gloriosa lily, tiger claw, and fire lily." + }, + "file": { + "contentLength": 90681, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "72e3e3770db795b2f04f0b5bb0be43e74df70de4faa0bf83a706bbde29e4ea0b" + } } }, { @@ -183,8 +201,8 @@ "start": "acbe7b5d-784a-4956-8fa4-786589584135", "end": "13fc213f-d90d-4c14-b841-dafb5eb1d817", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -192,9 +210,9 @@ "type": "Taxon", "id": "2f4e71c8-851b-4d3d-a0f5-f357eab1dec1", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Amaryllidoideae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Amaryllidaceae/Amaryllidoideae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Amaryllidoideae", @@ -205,6 +223,7 @@ "type": "Plant", "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Flower of Nelumbo nucifera, bean of India.", @@ -219,13 +238,21 @@ "link": "https://en.wikipedia.org/wiki/File:Nelumbo_nucifera1romainguy.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Lotus", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "N. nucifera", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Nelumbo_nucifera", - "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus,[1] or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae.[2] The lotus belongs in the order Proteales." + "description": "Nelumbo nucifera, also known as Padma (Sanskrit: \\u092a\\u0926\\u094d\\u092e, romanized: Padm\\u0101, lit.\\u2009'Lotus') or Kamala (Sanskrit: \\u0915\\u092e\\u0932, lit. 'Lotus'), sacred lotus, pink lotus, Indian lotus, or simply lotus, is one of two extant species of aquatic plant in the family Nelumbonaceae. It is sometimes colloquially called a water lily, though this more often refers to members of the family Nymphaeaceae. The lotus belongs in the order Proteales." + }, + "file": { + "contentLength": 63295, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a46657ef9ece1a7e0939ee5edcc4358f23a3b8b7871c6eba4ad2ce0f30cf4e9f" + } } }, { @@ -234,8 +261,8 @@ "start": "6f84870c-62c1-4a1a-8189-a453e00e296f", "end": "a2c4ba63-65f2-460e-b77c-6db283efe3ab", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -245,8 +272,8 @@ "start": "74023bac-88ea-4031-b4a5-68d861ea2e91", "end": "acbe7b5d-784a-4956-8fa4-786589584135", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -254,10 +281,10 @@ "type": "Taxon", "id": "425235d6-75ab-4ccb-8208-783ced0decc6", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "The lily family, Liliaceae, consists of about 15 genera and 610 species of flowering plants within the order Liliales. They are monocotyledonous, perennial, herbaceous, often bulbous geophytes. Plants in this family have evolved with a fair amount of morphological diversity despite genetic similarity. Common characteristics include large flowers with parts arranged in threes: with six colored or patterned petaloid tepals (undifferentiated petals and sepals) arranged in two whorls, six stamens and a superior ovary. The leaves are linear in shape, with their veins usually arranged parallel to the edges, single and arranged alternating on the stem, or in a rosette at the base. Most species are grown from bulbs, although some have rhizomes. First described in 1789, the lily family became a paraphyletic \"catch-all\" (wastebasket) group of lilioid monocots that did not fit into other families and included a great number of genera now included in other families and in some cases in other orders. Consequently, many sources and descriptions labelled \"Liliaceae\" deal with the broader sense of the family.\n\nThe family evolved approximately 68 million years ago during the Late Cretaceous to Early Paleogene epochs. Liliaceae are widely distributed, mainly in temperate regions of the Northern Hemisphere and the flowers are insect pollinated. Many Liliaceae are important ornamental plants, widely grown for their attractive flowers and involved in a major floriculture of cut flowers and dry bulbs. Some species are poisonous if eaten and can have adverse health effects in humans and household pets.\n\nA number of Liliaceae genera are popular cultivated plants in private and public spaces. Lilies and tulips in particular have had considerable symbolic and decorative value, and appear frequently in paintings and the decorative arts. They are also an economically important product. Most of their genera, Lilium in particular, face considerable herbivory pressure from deer in some areas, both wild and domestic.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Liliaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Liliaceae" @@ -269,8 +296,8 @@ "start": "a2daf225-4907-4869-aa55-c82561caac68", "end": "6f84870c-62c1-4a1a-8189-a453e00e296f", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -278,10 +305,10 @@ "type": "Taxon", "id": "47e135a7-c77a-4489-9262-1e425a4b7177", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Asparagales (asparagoid lilies) are a diverse order of flowering plants in the monocots. Under the APG IV system of flowering plant classification, Asparagales are the largest order of monocots with 14 families, 1,122 genera, and about 36,000 species, with members as varied as asparaguses, orchids, yuccas, irises, onions, garlics, leeks, and other alliums, daffodils, snowdrops, amaryllis, agaves, butcher's broom, agapanthuses, Solomon's seal, hyacinths, bluebells, spider plants, grasstrees, aloes, freesias, gladioli, crocuses, and saffrons.\n\nMost species of Asparagales are herbaceous perennials, although some are climbers and some are trees or shrubs. The order also contains many geophytes (bulbs, corms, and various kinds of tuber). The leaves of almost all species form a tight rosette, either at the base of the plant or at the end of the stem, but occasionally along the stem. The flowers are not particularly distinctive, being 'lily type', with six tepals and up to six stamina. One of the defining characteristics (synapomorphies) of the order is the presence of phytomelanin, a black pigment present in the seed coat, creating a dark crust. Phytomelanin is found in most families of the Asparagales (although not in Orchidaceae, thought to be the sister-group of the rest of the order).\n\nThe order Asparagales takes its name from the type family Asparagaceae and has only recently been recognized in classification systems. The order is clearly circumscribed on the basis of molecular phylogenetics, but it is difficult to define morphologically since its members are structurally diverse. The order was first put forward by Huber in 1977 and later taken up in the Dahlgren system of 1985 and then the Angiosperm Phylogeny Group systems. Before this, many of its families were assigned to the old order Liliales, which was redistributed over three orders, Liliales, Asparagales, and Dioscoreales, based on molecular phylogenetics. The boundaries of the Asparagales and of its families have undergone a series of changes in recent years; future research may lead to further changes and ultimately greater stability.\n\nThe order is thought to have first diverged from other related monocots some 120–130 million years ago (early in the Cretaceous period), although given the difficulty in classifying the families involved, estimates are likely to be uncertain.\n\nFrom an economic point of view, the order Asparagales is second in importance within the monocots only to the order Poales (which includes grasses and cereals). Species are used as food and flavourings (e.g. onion, garlic, leek, asparagus, vanilla, saffron), in medicinal or cosmetic applications (Aloe), as cut flowers (e.g. freesia, gladiolus, iris, orchids), and as garden ornamentals (e.g. day lilies, lily of the valley, Agapanthus).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Asparagales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asparagales" @@ -291,10 +318,10 @@ "type": "Taxon", "id": "487db1d2-a12f-422a-a0d2-1da198ef62a3", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Asterids are a large clade (monophyletic group) of flowering plants, composed of 17 orders and more than 80,000 species, about a third of the total flowering plant species. The asterids are divided into the unranked clades lamiids (8 orders) and campanulids (7 orders), and the single orders Cornales and Ericales. Well-known asterids include dogwoods and hydrangeas (order Cornales), tea, blueberries, cranberries, kiwifruit, Brazil nuts, argan, sapote, and azaleas (order Ericales), sunflowers, lettuce, common daisy, yacon, carrots, celery, parsley, parsnips, ginseng, ivies, holly, honeysuckle, elder, and valerian (clade campanulids), borage, forget-me-nots, comfrey, coffee, frangipani, gentian, pong-pong, oleander, periwinkle, basil, mint, rosemary, sage, oregano, thyme, lavender, wild dagga, olives, ash, teak, foxgloves, lilac, jasmine, snapdragons, African violets, butterfly bushes, sesame, psyllium, potatoes, eggplants, tomatoes, chilli peppers, tobacco, petunias, morning glory, and sweet potato (clade lamiids).\n\nMost of the taxa belonging to this clade had been referred to as Asteridae in the Cronquist system (1981) and as Sympetalae in earlier systems. The name asterids (not necessarily capitalised) resembles the earlier botanical name but is intended to be the name of a clade rather than a formal ranked name, in the sense of the ICBN.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Asterids", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asterids" @@ -306,8 +333,8 @@ "start": "3283fd3d-8083-4170-882a-41b1cd152c55", "end": "abcdcfee-3f4f-464f-8418-6e6640ad72b6", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -317,8 +344,8 @@ "start": "b7cda919-deea-49f9-9151-49132f83cbff", "end": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -328,8 +355,8 @@ "start": "abcdcfee-3f4f-464f-8418-6e6640ad72b6", "end": "ff04eb54-7656-47ae-816b-debc794a0f49", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -339,8 +366,8 @@ "start": "7cc682bf-b648-47b1-b49a-e328f2d1bcd3", "end": "f1622292-ace6-45c0-bd8c-0de67bcfb6bf", "data": { - "created": "2025-09-25T18:35:32+00:00", - "updated": "2025-09-25T18:35:32+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -350,8 +377,8 @@ "start": "2341f6f7-1b5d-4ce9-a68e-2973be25ec9a", "end": "a2c4ba63-65f2-460e-b77c-6db283efe3ab", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -361,8 +388,8 @@ "start": "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", "end": "d633ef5f-f385-44ef-8326-9b17e728cca8", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:37+00:00", + "updated": "2026-09-25T18:30:37+00:00", "scenario": "general.botanicExample" } }, @@ -372,8 +399,8 @@ "start": "99b9f696-7f86-4728-b88f-def50ede6ce0", "end": "a2c4ba63-65f2-460e-b77c-6db283efe3ab", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -383,8 +410,8 @@ "start": "ff04eb54-7656-47ae-816b-debc794a0f49", "end": "b597444b-d50f-4f30-b9f0-a31d2fef5322", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -392,10 +419,10 @@ "type": "Taxon", "id": "632f5679-a4bc-4aae-bdec-d083c74b32ba", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Magnolia is a large genus of about 210 to 340 flowering plant species in the subfamily Magnolioideae of the family Magnoliaceae. The natural range of Magnolia species is disjunct, with a main center in east, south and southeast Asia and a secondary center in eastern North America, Central America, the West Indies, and some species in South America.\n\nMagnolias are evergreen or deciduous trees or shrubs known for their large, fragrant, bowl- or star-shaped flowers with numerous spirally arranged reproductive parts, producing cone-like fruits in autumn that open to reveal seeds. The genus Magnolia was first named in 1703 by Charles Plumier, honoring Pierre Magnol, with early taxonomy refined by Linnaeus in the 18th century based on American and later Asian species. Modern molecular phylogenetic studies have revealed complex relationships leading to taxonomic debates about merging related genera like Michelia with Magnolia. Magnolia species are valued horticulturally for their early and showy flowering, used culinarily in various edible forms, employed in traditional medicine for their bioactive compounds like magnolol and honokiol, and harvested for timber, with hybridization enhancing desirable traits.\n\nMagnolia is an ancient genus that dates back the Cretaceous. Fossilized specimens of M. acuminata have been found dating to 20 million years ago (mya), and fossils of plants identifiably belonging to the Magnoliaceae date to 95 mya. They are theorized to have evolved to encourage pollination by beetles as they existed prior to the evolution of bees. Another aspect of Magnolia considered to represent an ancestral state is that the flower bud is enclosed in a bract rather than in sepals; the perianth parts are undifferentiated and called tepals rather than distinct sepals and petals. Magnolia shares the tepal characteristic with several other flowering plants near the base of the flowering plant lineage, such as Amborella and Nymphaea (as well as with many more recently derived plants, such as Lilium).\n\nMagnolias are culturally significant symbols, serving as official flowers and trees in various regions like Shanghai, Mississippi, Louisiana, North Korea, and Seoul, and are closely associated with the Southern United States. In the arts, magnolias symbolize both beauty and resilience, as seen in the play and film Steel Magnolias, while also evoking the contrasting brutality of lynching in the song \"Strange Fruit\" and Southern stereotypes in political commentary.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Magnolia", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Magnoliids/Magnoliales/Magnoliaceae/Magnolia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magnolia" @@ -405,9 +432,9 @@ "type": "Taxon", "id": "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Kniphofia", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae/Asphodeloideae/Kniphofia", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Kniphofia", @@ -420,8 +447,8 @@ "start": "47e135a7-c77a-4489-9262-1e425a4b7177", "end": "99b9f696-7f86-4728-b88f-def50ede6ce0", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -429,9 +456,9 @@ "type": "Taxon", "id": "6f84870c-62c1-4a1a-8189-a453e00e296f", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Magnoliids", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Magnoliids", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magnoliids", @@ -442,6 +469,7 @@ "type": "Plant", "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Saucer Magnolia -- Magnolia × soulangeana 'Rustica Rubra' found in Houston, Texas", @@ -456,23 +484,31 @@ "link": "https://en.wikipedia.org/wiki/File:Yulan_1.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Magnolia", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "M. denudata", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magnolia_denudata", - "description": "Magnolia denudata, the lilytree[2] or Yulan magnolia (simplified Chinese: \\u7389\\u5170\\u82b1; traditional Chinese: \\u7389\\u862d\\u82b1; pinyin: y\\u00f9l\\u00e1nhu\\u0101; lit. 'jade orchid/lily'), is native to central and eastern China.[3] It has been cultivated in Chinese Buddhist temple gardens since 600 AD. Its flowers were regarded as a symbol of purity in the Tang dynasty and it was planted in the grounds of the emperor's palace. It is the official city flower of Shanghai." + "description": "Magnolia denudata, the lilytree or Yulan magnolia (simplified Chinese: \\u7389\\u5170\\u82b1; traditional Chinese: \\u7389\\u862d\\u82b1; pinyin: y\\u00f9l\\u00e1nhu\\u0101; lit. 'jade orchid/lily'), is native to central and eastern China. It has been cultivated in Chinese Buddhist temple gardens since 600 AD. Its flowers were regarded as a symbol of purity in the Tang dynasty and it was planted in the grounds of the emperor's palace. It is the official city flower of Shanghai." + }, + "file": { + "contentLength": 50389, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c615404e051e1e2e6c1d107cb7c043fd0db9a71eb9671be35533e9aac5e72e82" + } } }, { "type": "Taxon", "id": "75a7a9c8-8330-483c-b7f3-f7ca74c48535", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "The Amaryllidaceae are a family of herbaceous, mainly perennial and bulbous (rarely rhizomatous) flowering plants in the monocot order Asparagales. The family takes its name from the genus Amaryllis and is commonly known as the amaryllis family. The leaves are usually linear, and the flowers are usually bisexual and symmetrical, arranged in umbels on the stem. The petals and sepals are undifferentiated as tepals, which may be fused at the base into a floral tube. Some also display a corona. Allyl sulfide compounds produce the characteristic odour of the onion subfamily (Allioideae).\n\nThe family, which was originally created in 1805, now contains about 1600 species, divided into 71 genera, 17 tribes and three subfamilies, the Agapanthoideae (Agapanthus), Allioideae (onions, garlic and chives) and Amaryllidoideae (amaryllis, daffodils, snowdrops). Over time, it has seen much reorganisation and at various times was combined with the related Liliaceae. Since 2009, a very broad view has prevailed based on phylogenetics, and including a number of other former families.\n\nThe family is found in tropical to subtropical and temperate areas of the world and includes many ornamental garden plants and vegetables.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Amaryllidaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Amaryllidaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Amaryllidaceae" @@ -484,8 +520,8 @@ "start": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "end": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -493,10 +529,10 @@ "type": "Taxon", "id": "7cc682bf-b648-47b1-b49a-e328f2d1bcd3", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Vascular plants (from Latin vasculum 'duct'), also called tracheophytes (UK: /ˈtrækiːəˌfaɪts/, US: /ˈtreɪkiːəˌfaɪts/) or collectively tracheophyta (/ˌtreɪkiːˈɒfɪtə/; from Ancient Greek τραχεῖα ἀρτηρία (trakheîa artēría) 'windpipe' and φυτά (phutá) 'plants'), are plants that have lignified tissues (the xylem) for conducting water and minerals throughout the plant. They also have a specialized non-lignified tissue (the phloem) to conduct products of photosynthesis. The group includes most land plants (c. 300,000 accepted known species) excluding mosses.\n\nVascular plants include the clubmosses, horsetails, ferns, gymnosperms (including conifers), and angiosperms (flowering plants). They are contrasted with nonvascular plants such as mosses and green algae. Scientific names for the vascular plants group include Tracheophyta,: 251  Tracheobionta and Equisetopsida sensu lato. Some early land plants (the rhyniophytes) had less developed vascular tissue; the term eutracheophyte has been used for all other vascular plants, including all living ones.\n\nHistorically, vascular plants were known as \"higher plants\", as it was believed that they were further evolved than other plants due to being more complex organisms. However, this is an antiquated remnant of the obsolete scala naturae, and the term is generally considered to be unscientific.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Tracheophytes", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Vascular_plant" @@ -506,9 +542,9 @@ "type": "Taxon", "id": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilium", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae/Lilieae/Lilium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilium", @@ -521,8 +557,8 @@ "start": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "end": "8288a39a-4b41-4ed5-8d0f-0b795048163c", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -530,9 +566,9 @@ "type": "Taxon", "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Lilioideae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Liliaceae/Lilioideae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Lilioideae", @@ -545,8 +581,8 @@ "start": "487db1d2-a12f-422a-a0d2-1da198ef62a3", "end": "2341f6f7-1b5d-4ce9-a68e-2973be25ec9a", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -554,6 +590,7 @@ "type": "Plant", "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "in Seoul Forest, South Korea", @@ -574,23 +611,31 @@ "link": "https://en.wikipedia.org/wiki/File:Tulipa_orphanidea_060506.jpg" } ], - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "hasFile": true, "name": "Tulip", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "Tulipa", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Tulip", - "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae,[2] along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + "description": "Tulips are spring-blooming perennial herbaceous bulbiferous geophytes in the Tulipa genus. Their flowers are usually large, showy, and brightly coloured, generally red, orange, pink, yellow, or white. They often have a different coloured blotch at the base of the tepals, internally. Because of a degree of variability within the populations and a long history of cultivation, classification has been complex and controversial. The tulip is a member of the lily family, Liliaceae, along with 14 other genera, where it is most closely related to Amana, Erythronium, and Gagea in the tribe Lilieae." + }, + "file": { + "contentLength": 105488, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "c4c242897c43a74e9e4a8b5bf89e6b2cb1cbd99f8d621f33eea175cbf6dfab97" + } } }, { "type": "Taxon", "id": "927c7763-0e29-4bd4-817e-d2b19ec424fa", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Narcissus is a genus of predominantly spring flowering perennial plants of the amaryllis family, Amaryllidaceae. Various common names including daffodil, narcissus (plural narcissi), and jonquil, are used to describe some or all members of the genus.\n\nNarcissus has conspicuous flowers with six petal-like tepals surmounted by a cup- or trumpet-shaped corona. The flowers are generally white and yellow (also orange or pink in garden varieties), with either uniform or contrasting coloured tepals and corona.\n\nNarcissi were well known in ancient civilisation, both medicinally and botanically, but were formally described by Linnaeus in his Species Plantarum (1753). The genus is generally considered to have about ten sections with approximately 70–80 species; the Plants of the World Online database currently accepts 76 species and 93 named hybrids. The number of species has varied, depending on how they are classified, due to similarity between species and hybridisation.\n\nThe genus arose some time in the Late Oligocene to Early Miocene epochs, in the Iberian peninsula and adjacent areas of southwest Europe. The exact origin of the name Narcissus is unknown, but it is often linked to a Greek word (ancient Greek ναρκῶ narkō, \"to make numb\") and the myth of the youth of that name who fell in love with his own reflection. The English word \"daffodil\" appears to be derived from \"asphodel\", with which it was commonly compared.\n\nThe species are native to meadows and woods in southern Europe and North Africa with a centre of diversity in the Western Mediterranean. Both wild and cultivated plants have naturalised widely, and were introduced into the Far East prior to the tenth century. Narcissi tend to be long-lived bulbs, which propagate by division, but are also insect-pollinated. Known pests, diseases and disorders include viruses, fungi, the larvae of flies, mites and nematodes. Some Narcissus species have become extinct, while others are threatened by increasing urbanisation and tourism.\n\nHistorical accounts suggest narcissi have been cultivated from the earliest times, but became increasingly popular in Europe after the 16th century and by the late 19th century were an important commercial crop centred primarily in the Netherlands. Today, narcissi are popular as cut flowers and as ornamental plants. The long history of breeding has resulted in thousands of different cultivars. For horticultural purposes, narcissi are classified into divisions, covering a wide range of shapes and colours. Narcissi produce a number of different alkaloids, which provide some protection for the plant, but may be poisonous if accidentally ingested. This property has been exploited for medicinal use in traditional healing and has resulted in the production of galantamine for the treatment of Alzheimer's dementia. Narcissi are associated with a number of themes in different cultures, ranging from death to good fortune, and as symbols of spring. The daffodil is the national flower of Wales and the symbol of cancer charities in many countries. The appearance of wild flowers in spring is associated with festivals in many places.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Narcissus", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Amaryllidaceae/Amaryllidoideae/Narcissus", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Narcissus_(plant)" @@ -602,8 +647,8 @@ "start": "a2c4ba63-65f2-460e-b77c-6db283efe3ab", "end": "7cc682bf-b648-47b1-b49a-e328f2d1bcd3", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -611,10 +656,10 @@ "type": "Taxon", "id": "99b9f696-7f86-4728-b88f-def50ede6ce0", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Monocotyledons (/ˌmɒnəˌkɒtəˈliːdənz/), commonly referred to as monocots, (Lilianae sensu Chase & Reveal) are flowering plants whose seeds contain only one embryonic leaf, or cotyledon. A monocot taxon has been in use for several decades, but with various ranks and under several different names. The APG IV system recognises its monophyly but does not assign it to a taxonomic rank, and instead uses the term \"monocots\" to refer to the group.\n\nMonocotyledons are contrasted with the dicotyledons, which have two cotyledons. Unlike the monocots however, the dicots are not monophyletic and the two cotyledons are instead the ancestral characteristic of all flowering plants. Botanists now classify dicots into the eudicots (\"true dicots\") and several basal lineages from which the monocots emerged.\n\nThe monocots are extremely important economically, culturally, and ecologically, and make up a majority of plant biomass used in agriculture. Common crops such as dates, onions, garlic, rice, wheat, maize, and sugarcane are all monocots. The grasses alone cover over 40% of Earth's land area[e] and contribute a significant portion of the human diet. Other monocots, like orchids, tulips, daffodils, and lilies are common houseplants and have been the subjects of several celebrations, holidays, and artworks for thousands of years.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Monocots", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Monocotyledon" @@ -626,8 +671,8 @@ "start": "425235d6-75ab-4ccb-8208-783ced0decc6", "end": "1852bdff-a4dd-4f91-9243-0e802775f757", "data": { - "created": "2025-09-25T18:35:32+00:00", - "updated": "2025-09-25T18:35:32+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -637,8 +682,8 @@ "start": "1852bdff-a4dd-4f91-9243-0e802775f757", "end": "99b9f696-7f86-4728-b88f-def50ede6ce0", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -646,10 +691,10 @@ "type": "Taxon", "id": "a1996d15-9882-464c-aab0-1ce6e77af522", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Apocynaceae (/əˌpɑːsəˈneɪsiˌaɪ, -siːˌiː/, from Apocynum, Greek for \"dog-away\") is a family of flowering plants that includes trees, shrubs, herbs, stem succulents, and vines, commonly known as the dogbane family, because some taxa were used as dog poison. Notable members of the family include oleander, dogbanes, milkweeds, and periwinkles. The family is native to the European, Asian, African, Australian, and American tropics or subtropics, with some temperate members as well. The former family Asclepiadaceae (now known as Asclepiadoideae) is considered a subfamily of Apocynaceae and contains 348 genera. A list of Apocynaceae genera may be found here.\n\nMany species are tall trees found in tropical forests, but some grow in tropical dry (xeric) environments. Also perennial herbs from temperate zones occur. Many of these plants have milky latex, and many species are poisonous if ingested, the family being rich in genera containing alkaloids and cardiac glycosides, those containing the latter often finding use as arrow poisons. Some genera of Apocynaceae, such as Adenium, bleed clear sap without latex when damaged, and others, such as Pachypodium, have milky latex apart from their sap.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Apocynaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Gentianales/Apocynaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Apocynaceae" @@ -661,8 +706,8 @@ "start": "d633ef5f-f385-44ef-8326-9b17e728cca8", "end": "c2282076-98d0-42f8-9582-728aed89bfca", "data": { - "created": "2025-09-25T18:35:32+00:00", - "updated": "2025-09-25T18:35:32+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -670,10 +715,10 @@ "type": "Taxon", "id": "a2c4ba63-65f2-460e-b77c-6db283efe3ab", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Flowering plants are plants that bear flowers and fruits, and form the clade Angiospermae (/ˌændʒiəˈspərmiː/). The term angiosperm is derived from the Greek words ἀγγεῖον (angeion; 'container, vessel') and σπέρμα (sperma; 'seed'), meaning that the seeds are enclosed within a fruit. The group was formerly called Magnoliophyta.\n\nAngiosperms are by far the most diverse group of land plants with 64 orders, 416 families, approximately 13,000 known genera and 300,000 known species. They include all forbs (flowering plants without a woody stem), grasses and grass-like plants, a vast majority of broad-leaved trees, shrubs and vines, and most aquatic plants. Angiosperms are distinguished from the other major seed plant clade, the gymnosperms, by having flowers, xylem consisting of vessel elements instead of tracheids, endosperm within their seeds, and fruits that completely envelop the seeds. The ancestors of flowering plants diverged from the common ancestor of all living gymnosperms before the end of the Carboniferous, over 300 million years ago. In the Cretaceous, angiosperms diversified explosively, becoming the dominant group of plants across the planet.\n\nAgriculture is almost entirely dependent on angiosperms, and a small number of flowering plant families supply nearly all plant-based food and livestock feed. Rice, maize and wheat provide half of the world's staple calorie intake, and all three plants are cereals from the Poaceae family (colloquially known as grasses). Other families provide important industrial plant products such as wood, paper and cotton, and supply numerous ingredients for drinks, sugar production, traditional medicine and modern pharmaceuticals. Flowering plants are also commonly grown for decorative purposes, with certain flowers playing significant cultural roles in many societies.\n\nOut of the \"Big Five\" extinction events in Earth's history, only the Cretaceous–Paleogene extinction event occurred while angiosperms dominated plant life on the planet. Today, the Holocene extinction affects all kingdoms of complex life on Earth, and conservation measures are necessary to protect plants in their habitats in the wild (in situ), or failing that, ex situ in seed banks or artificial habitats like botanic gardens. Otherwise, around 40% of plant species may become extinct due to human actions such as habitat destruction, introduction of invasive species, unsustainable logging, land clearing and overharvesting of medicinal or ornamental plants. Further, climate change is starting to impact plants and is likely to cause many species to become extinct by 2100.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Angiosperms", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Flowering_plant" @@ -683,9 +728,9 @@ "type": "Taxon", "id": "a2daf225-4907-4869-aa55-c82561caac68", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Magnoliales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Magnoliids/Magnoliales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Magnoliales", @@ -698,8 +743,8 @@ "start": "e3c61d19-6cb9-4f41-913b-9a445b2fa150", "end": "632f5679-a4bc-4aae-bdec-d083c74b32ba", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:37+00:00", + "updated": "2026-09-25T18:30:37+00:00", "scenario": "general.botanicExample" } }, @@ -709,8 +754,8 @@ "start": "1d5350ed-86c5-4933-8089-5fa053a3ab02", "end": "487db1d2-a12f-422a-a0d2-1da198ef62a3", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -718,9 +763,9 @@ "type": "Taxon", "id": "abcdcfee-3f4f-464f-8418-6e6640ad72b6", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Nelumbo", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Proteales/Nelumbonaceae/Nelumbo", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Nelumbo", @@ -731,9 +776,9 @@ "type": "Taxon", "id": "acbe7b5d-784a-4956-8fa4-786589584135", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Magnolia subsect. Yulania", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Magnoliids/Magnoliales/Magnoliaceae/Magnolia/Magnolia subg. Yulania/Magnolia sect. Yulania/Magnolia subsect. Yulania", "scenario": "general.botanicExample" } @@ -744,8 +789,8 @@ "start": "2f4e71c8-851b-4d3d-a0f5-f357eab1dec1", "end": "75a7a9c8-8330-483c-b7f3-f7ca74c48535", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -755,8 +800,8 @@ "start": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "end": "927c7763-0e29-4bd4-817e-d2b19ec424fa", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -764,9 +809,9 @@ "type": "Taxon", "id": "b597444b-d50f-4f30-b9f0-a31d2fef5322", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Proteales", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Proteales", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Proteales", @@ -779,8 +824,8 @@ "start": "8288a39a-4b41-4ed5-8d0f-0b795048163c", "end": "425235d6-75ab-4ccb-8208-783ced0decc6", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -790,8 +835,8 @@ "start": "cd83808b-80df-41a0-964e-e33071e28830", "end": "a1996d15-9882-464c-aab0-1ce6e77af522", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -799,9 +844,9 @@ "type": "Taxon", "id": "b7cda919-deea-49f9-9151-49132f83cbff", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Colchicaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Liliales/Colchicaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Colchicaceae", @@ -814,8 +859,8 @@ "start": "632f5679-a4bc-4aae-bdec-d083c74b32ba", "end": "0fe4710a-1998-4761-919e-aa3cb9c055f8", "data": { - "created": "2025-09-25T18:35:32+00:00", - "updated": "2025-09-25T18:35:32+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -825,8 +870,8 @@ "start": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "end": "16884ac8-ba7a-4c91-8449-4fdd803644b6", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -836,8 +881,8 @@ "start": "f8179dfc-5578-44de-adc0-d6b613eb7a32", "end": "63bcbffb-29a3-45b5-8cc1-8c41281bcae3", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -845,9 +890,9 @@ "type": "Taxon", "id": "c2282076-98d0-42f8-9582-728aed89bfca", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Asphodelaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asphodelaceae", @@ -858,6 +903,7 @@ "type": "Plant", "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "Narcissus pseudonarcissus", @@ -866,22 +912,30 @@ "link": "https://en.wikipedia.org/wiki/File:Narcissus_pseudonarcissus_flower_300303.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Daffodil", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "N. pseudonarcissus", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Narcissus_pseudonarcissus", - "description": "Narcissus pseudonarcissus, commonly named the wild daffodil or Lent lily (Welsh: Cennin Pedr), is a perennial flowering plant.[1][2][3][4][5][6]\n\nThis species has pale yellow tepals, with a darker central trumpet. The long, narrow leaves are slightly greyish green in colour and rise from the base of the stem. The plant grows from a bulb. The flowers produce seeds which, when germinated, take five to seven years to produce a flowering plant. (Sexual seed reproduction mixes the traits of both parent flowers, so if garden hybrid cultivars are planted close to wild populations of Narcissus pseudonarcissus, there is a danger that the new seedlings, having hybrid vigour, could out-compete the wild plants.)[7]" + "description": "Narcissus pseudonarcissus, commonly named the wild daffodil or Lent lily (Welsh: Cennin Pedr), is a perennial flowering plant.\n\nThis species has pale yellow tepals, with a darker central trumpet. The long, narrow leaves are slightly greyish green in colour and rise from the base of the stem. The plant grows from a bulb. The flowers produce seeds which, when germinated, take five to seven years to produce a flowering plant. (Sexual seed reproduction mixes the traits of both parent flowers, so if garden hybrid cultivars are planted close to wild populations of Narcissus pseudonarcissus, there is a danger that the new seedlings, having hybrid vigour, could out-compete the wild plants.)" + }, + "file": { + "contentLength": 62307, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "ecda5f79c0714acbe609146166abbf3872ba51f459debd5e20c8b61bb932ed37" + } } }, { "type": "Taxon", "id": "cd83808b-80df-41a0-964e-e33071e28830", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Adenium", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Asterids/Gentianales/Apocynaceae/Adenium", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Adenium", @@ -892,10 +946,10 @@ "type": "Taxon", "id": "d633ef5f-f385-44ef-8326-9b17e728cca8", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Asphodeloideae is a subfamily of the monocot family Asphodelaceae in the order Asparagales. It has previously been treated as a separate family, Asphodelaceae sensu stricto. The family Asphodelaceae has now been proposed to be a nomen conservandum, and the proposal has been recommended for ratification in 2017. In that case, Asphodelaceae will have priority over Xanthorrhoeaceae. This is reflected in the APG IV family lists.\n\nThe subfamily name is derived from the generic name of the type genus, Asphodelus. Members of this group can be found growing native in coastal Southern Africa, Central and Western Europe, the Mediterranean basin, Central Asia and Australia; one genus, Bulbinella, can additionally be found growing in New Zealand. The greatest diversity occurs in South Africa.\n\nSeveral genera, notably Aloe, Asphodelus, Gasteria, Haworthia and Kniphofia are perhaps the best known of the family due to their use among plant collectors, botanists and horticulturists. Additional genera and hybrids are also known, including Aristaloe, Gasteraloe and Gonialoe (the latter formerly included the now-rehomed Aloe variegata, or partridge-breast aloe).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Asphodeloideae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Monocots/Asparagales/Asphodelaceae/Asphodeloideae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Asphodeloideae" @@ -907,8 +961,8 @@ "start": "de004523-5165-4f10-872b-92eb9637a5d1", "end": "cd83808b-80df-41a0-964e-e33071e28830", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -916,6 +970,7 @@ "type": "Plant", "id": "de004523-5165-4f10-872b-92eb9637a5d1", "data": { + "created": "2026-09-25T18:30:16+00:00", "images": [ { "description": "Adenium obesum (desert rose), macro of a flower, side view showing calyx, corolla and styles. Focus stack of 7 images. Uthandi, Chennai", @@ -930,13 +985,21 @@ "link": "https://en.wikipedia.org/wiki/File:RCN_Mother.jpg" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Desert Rose", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:16+00:00", "scientificName": "A. obesum", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Adenium_obesum", - "description": "Adenium obesum, more commonly known as a desert rose, is a poisonous species of flowering plant belonging to the tribe Nerieae of the subfamily Apocynoideae of the dogbane family, Apocynaceae.[3] It is native to the Sahel regions south of the Sahara (from Mauritania and Senegal to Sudan), tropical and subtropical eastern and southern Africa, as well as the Arabian Peninsula. Other names for the flower include Sabi star, kudu, mock azalea, and impala lily. Adenium obesum is a popular houseplant and bonsai in temperate regions." + "description": "Adenium obesum, more commonly known as a desert rose, is a poisonous species of flowering plant belonging to the tribe Nerieae of the subfamily Apocynoideae of the dogbane family, Apocynaceae. It is native to the Sahel regions south of the Sahara (from Mauritania and Senegal to Sudan), tropical and subtropical eastern and southern Africa, as well as the Arabian Peninsula. Other names for the flower include Sabi star, kudu, mock azalea, and impala lily. Adenium obesum is a popular houseplant and bonsai in temperate regions." + }, + "file": { + "contentLength": 58116, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "858fe2bee255dd252d51d161d4f183a93c2da0d2d6662b20870cbbf3eec81acb" + } } }, { @@ -945,8 +1008,8 @@ "start": "b597444b-d50f-4f30-b9f0-a31d2fef5322", "end": "2341f6f7-1b5d-4ce9-a68e-2973be25ec9a", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -954,9 +1017,9 @@ "type": "Taxon", "id": "e3c61d19-6cb9-4f41-913b-9a445b2fa150", "data": { - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", + "created": "2026-09-25T18:30:16+00:00", "name": "Magnolia subg. Yulania", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Magnoliids/Magnoliales/Magnoliaceae/Magnolia/Magnolia subg. Yulania", "scenario": "general.botanicExample" } @@ -967,8 +1030,8 @@ "start": "23508e6c-632a-496d-9bd6-8c62a03216af", "end": "7dd3a650-d60e-40c9-89d0-bccaf395369f", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -978,8 +1041,8 @@ "start": "a1996d15-9882-464c-aab0-1ce6e77af522", "end": "1d5350ed-86c5-4933-8089-5fa053a3ab02", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -989,8 +1052,8 @@ "start": "13fc213f-d90d-4c14-b841-dafb5eb1d817", "end": "e3c61d19-6cb9-4f41-913b-9a445b2fa150", "data": { - "created": "2025-09-25T18:35:32+00:00", - "updated": "2025-09-25T18:35:32+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -1000,8 +1063,8 @@ "start": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "end": "1feedd9f-0c12-490c-8461-b12ff7447ac8", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:37+00:00", + "updated": "2026-09-25T18:30:37+00:00", "scenario": "general.botanicExample" } }, @@ -1011,8 +1074,8 @@ "start": "0fe4710a-1998-4761-919e-aa3cb9c055f8", "end": "a2daf225-4907-4869-aa55-c82561caac68", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:34+00:00", + "updated": "2026-09-25T18:30:34+00:00", "scenario": "general.botanicExample" } }, @@ -1020,10 +1083,10 @@ "type": "Taxon", "id": "f1622292-ace6-45c0-bd8c-0de67bcfb6bf", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Plants are the eukaryotes that comprise the kingdom Plantae; they are predominantly photosynthetic. This means that they obtain their energy from sunlight, using chloroplasts derived from endosymbiosis with cyanobacteria to produce sugars from carbon dioxide and water, using the green pigment chlorophyll. Exceptions are parasitic plants that have lost the genes for chlorophyll and photosynthesis, and obtain their energy from other plants or fungi. Most plants are multicellular, except for some green algae.\n\nHistorically, as in Aristotle's biology, the plant kingdom encompassed all living things that were not animals, and included algae and fungi. Definitions have narrowed since then; current definitions exclude fungi and some of the algae. By the definition used in this article, plants form the clade Viridiplantae (green plants), which consists of the green algae and the embryophytes or land plants (hornworts, liverworts, mosses, lycophytes, ferns, conifers and other gymnosperms, and flowering plants). A definition based on genomes includes the Viridiplantae, along with the red algae and the glaucophytes, in the clade Archaeplastida.\n\nThere are about 380,000 known species of plants, of which the majority, some 260,000, produce seeds. They range in size from single cells to the tallest trees. Green plants provide a substantial proportion of the world's molecular oxygen; the sugars they create supply the energy for most of Earth's ecosystems, and other organisms, including animals, either eat plants directly or rely on organisms which do so.\n\nGrain, fruit, and vegetables are basic human foods and have been domesticated for millennia. People use plants for many purposes, such as building materials, ornaments, writing materials, and, in great variety, for medicines. The scientific study of plants is known as botany, a branch of biology.", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Plantae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Plant" @@ -1033,6 +1096,7 @@ "type": "Plant", "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", "data": { + "created": "2026-09-25T18:30:20+00:00", "images": [ { "description": "Red-hot poker plants (Kniphofia uvaria) on the shore of Lake Jindabyne, New South Wales, Australia.", @@ -1041,13 +1105,21 @@ "link": "https://en.wikipedia.org/wiki/File:Kniphofia_uvaria_close.JPG" } ], - "created": "2025-09-25T18:35:28+00:00", - "updated": "2025-09-25T18:35:28+00:00", + "hasFile": true, "name": "Red Hot Poker", - "scenario": "general.botanicExample", + "updated": "2026-09-25T18:30:20+00:00", "scientificName": "K. uvaria", + "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Kniphofia_uvaria", "description": "Kniphofia uvaria is a species of flowering plant in the family Asphodelaceae, commonly known as tritomea, torch lily, or red hot poker, due to the shape and color of its inflorescence. The leaves are reminiscent of a lily, and the flowerhead can reach up to 1.5 m (5 ft) in height. There are many varieties of torch lily, and they bloom at different times during the growing season. The flowers are red, orange, and yellow." + }, + "file": { + "contentLength": 123686, + "extension": "jpg", + "mimeType": "image/jpeg", + "hash": { + "sha256": "a0f461e0383bc5b4518a43e1ac76060612c7e87bf420f9a6bbbe5231012108fe" + } } }, { @@ -1056,8 +1128,8 @@ "start": "c2282076-98d0-42f8-9582-728aed89bfca", "end": "47e135a7-c77a-4489-9262-1e425a4b7177", "data": { - "created": "2025-09-25T18:35:34+00:00", - "updated": "2025-09-25T18:35:34+00:00", + "created": "2026-09-25T18:30:37+00:00", + "updated": "2026-09-25T18:30:37+00:00", "scenario": "general.botanicExample" } }, @@ -1065,10 +1137,10 @@ "type": "Taxon", "id": "ff04eb54-7656-47ae-816b-debc794a0f49", "data": { + "created": "2026-09-25T18:30:16+00:00", "description": "Nelumbonaceae is a family of aquatic flowering plants. Nelumbo is the sole extant genus, containing Nelumbo lutea, native to North America, and Nelumbo nucifera, widespread in Asia. At least five other genera, Nelumbites, Exnelumbites, Paleonelumbo, Nelumbago, and Notocyamus are known from fossils.\n\nNelumbonaceae were once included in the waterlily family, Nymphaeaceae. Genetic analysis determined that the similarities between the families are an example of convergent evolution. Nelumbonaceae are highly modified eudicots belonging to the order Proteales, their closest living relatives being the plane trees (Platanaceae) and Proteaceae. Notocyamus from the Early Cretaceous of Brazil is the oldest known representative of the family, and displays several transitional traits between Nelumbonaceae and both the Proteaceae and Platanaceae.\n\nThe APG IV system of 2016 places the family in the order Proteales, in the clade eudicots. The Cronquist system, of 1981, also recognized this family, but placed it in order Nymphaeales in subclass Magnoliidae in class Magnoliopsida (=dicotyledons), based on gross morphological similarities. The Dahlgren system and Thorne system (1992) also recognized this family and placed it in its own order, Nelumbonales, in superorder Magnolianae in subclass Magnoliidae (=dicotyledons).", - "created": "2025-09-25T18:35:26+00:00", - "updated": "2025-09-25T18:35:26+00:00", "name": "Nelumbonaceae", + "updated": "2026-09-25T18:30:16+00:00", "path": "/Plantae/Tracheophytes/Angiosperms/Eudicots/Proteales/Nelumbonaceae", "scenario": "general.botanicExample", "link": "https://en.wikipedia.org/wiki/Nelumbonaceae" @@ -1091,7 +1163,7 @@ } }, "step-handler": "elasticsearch-query-dsl-mixin (App\\EventSystem\\SearchStep\\EventListener\\ElasticsearchQueryDslMixinSearchStepEventListener)", - "start": 1758825393.576418, + "start": 1790361093.166627, "indices": "*", "combinedQuery": { "_source": [ @@ -1132,8 +1204,8 @@ } } }, - "end": 1758825393.608732, - "duration": 0.032314 + "end": 1790361093.189556, + "duration": 0.022929 }, { "input": { @@ -1154,7 +1226,7 @@ "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "type": "Plant", "metadata": { - "score": 3.9976888 + "score": 4.0113134 } }, { @@ -1172,17 +1244,17 @@ } }, { - "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", - "type": "Plant", + "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "type": "Taxon", "metadata": { - "score": 3.2730358 + "score": 3.269838 } }, { - "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "type": "Taxon", + "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", + "type": "Plant", "metadata": { - "score": 3.269838 + "score": 3.2554708 } }, { @@ -1196,7 +1268,7 @@ "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "type": "Plant", "metadata": { - "score": 3.021591 + "score": 3.060035 } }, { @@ -1238,28 +1310,28 @@ "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "type": "Plant", "metadata": { - "score": 2.152007 + "score": 2.1294188 } }, { "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "type": "Plant", "metadata": { - "score": 2.1088712 + "score": 2.085987 } }, { "id": "de004523-5165-4f10-872b-92eb9637a5d1", "type": "Plant", "metadata": { - "score": 2.02761 + "score": 2.0042536 } }, { "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "type": "Plant", "metadata": { - "score": 1.9892946 + "score": 1.9657542 } }, { @@ -1273,7 +1345,7 @@ "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "type": "Plant", "metadata": { - "score": 1.7868379 + "score": 1.8255562 } }, { @@ -1291,9 +1363,9 @@ } }, "step-handler": "cypher-path-subset (App\\EventSystem\\SearchStep\\EventListener\\CypherPathSearchStepEventListener)", - "start": 1758825393.608918, - "end": 1758825394.031818, - "duration": 0.4228999614715576 + "start": 1790361093.189827, + "end": 1790361093.933255, + "duration": 0.7434279918670654 }, { "input": { @@ -1314,7 +1386,7 @@ "id": "258c0dfe-b1d8-4839-beed-d00d1b544a96", "type": "Plant", "metadata": { - "score": 3.9976888 + "score": 4.0113134 } }, { @@ -1332,17 +1404,17 @@ } }, { - "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", - "type": "Plant", + "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", + "type": "Taxon", "metadata": { - "score": 3.2730358 + "score": 3.269838 } }, { - "id": "8288a39a-4b41-4ed5-8d0f-0b795048163c", - "type": "Taxon", + "id": "f8179dfc-5578-44de-adc0-d6b613eb7a32", + "type": "Plant", "metadata": { - "score": 3.269838 + "score": 3.2554708 } }, { @@ -1356,7 +1428,7 @@ "id": "23508e6c-632a-496d-9bd6-8c62a03216af", "type": "Plant", "metadata": { - "score": 3.021591 + "score": 3.060035 } }, { @@ -1398,28 +1470,28 @@ "id": "3283fd3d-8083-4170-882a-41b1cd152c55", "type": "Plant", "metadata": { - "score": 2.152007 + "score": 2.1294188 } }, { "id": "74023bac-88ea-4031-b4a5-68d861ea2e91", "type": "Plant", "metadata": { - "score": 2.1088712 + "score": 2.085987 } }, { "id": "de004523-5165-4f10-872b-92eb9637a5d1", "type": "Plant", "metadata": { - "score": 2.02761 + "score": 2.0042536 } }, { "id": "8940d70b-5b6f-43b7-bee4-41d073396ff8", "type": "Plant", "metadata": { - "score": 1.9892946 + "score": 1.9657542 } }, { @@ -1433,7 +1505,7 @@ "id": "c3b3dcf9-4947-43b3-b877-7a337eea5fda", "type": "Plant", "metadata": { - "score": 1.7868379 + "score": 1.8255562 } }, { @@ -2510,7 +2582,7 @@ } }, "step-handler": "element-hydration (App\\EventSystem\\SearchStep\\EventListener\\ElementHydrationSearchStepEventListener)", - "start": 1758825394.032423, + "start": 1790361093.933932, "element-hydration:redundantElementIds": { "message": "Removed 584 redundant elementIds.", "removedElementIds": [ @@ -2680,8 +2752,8 @@ "fefde536-6ed4-4d09-9141-68f754fadb67", "ff04eb54-7656-47ae-816b-debc794a0f49" ], - "end": 1758825394.361263, - "duration": 0.32884 + "end": 1790361094.322943, + "duration": 0.389011 } ] } \ No newline at end of file diff --git a/docs/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration/response-header.txt b/docs/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration/response-header.txt index 34499e40..6527435b 100644 --- a/docs/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration/response-header.txt +++ b/docs/search/example/polyglot/es-query-dsl-mixin-cypher-path-element-hydration/response-header.txt @@ -1,10 +1,10 @@ -Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method -Access-Control-Allow-Methods: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: OPTIONS, POST Access-Control-Allow-Origin: * Access-Control-Expose-Headers: ETag, Location -Allow: GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK +Allow: OPTIONS, POST Cache-Control: no-cache, private Content-Type: application/json; charset=utf-8 -Date: Sat, 06 Sep 2025 14:57:35 GMT +Date: Fri, 02 Oct 2026 22:38:06 GMT Transfer-Encoding: chunked X-Powered-By: Ember Nexus API \ No newline at end of file diff --git a/docs/security/access.md b/docs/security/access.md index 1f338959..0373bef4 100755 --- a/docs/security/access.md +++ b/docs/security/access.md @@ -101,7 +101,7 @@ WHERE ( relation.onCreatedByUser IS NULL OR - (element)<-[:CREATED_BY*]-(user) + (element)<-[:CREATED*]-(user) ) ) ) @@ -145,7 +145,7 @@ WHERE ( startRelation.onCreatedByUser IS NULL OR - (start)<-[:CREATED_BY*]-(user) + (start)<-[:CREATED*]-(user) ) ) ) @@ -177,7 +177,7 @@ WHERE ( endRelation.onCreatedByUser IS NULL OR - (end)<-[:CREATED_BY*]-(user) + (end)<-[:CREATED*]-(user) ) ) ) diff --git a/docs/security/test/01-basic-negative-tests/01-01-no-connection.md b/docs/security/test/01-basic-negative-tests/01-01-no-connection.md index 5f7d500a..77c62cf3 100644 --- a/docs/security/test/01-basic-negative-tests/01-01-no-connection.md +++ b/docs/security/test/01-basic-negative-tests/01-01-no-connection.md @@ -21,13 +21,6 @@ Users who are not connected to nodes in any way, can not have access to them: | `1-01-02-22` | `User` | `🟠 PUT //file` | Valid request body. | ❌ 404 | yes | ✔️ implemented | | `1-01-02-23` | `User` | `🟠 PATCH //file` | Valid request body. | ❌ 404 | yes | ✔️ implemented | | `1-01-02-24` | `User` | `🔴 DELETE //file` | - | ❌ 404 | yes | ✔️ implemented | -| `1-01-02-30` | `User` | `🟣 COPY /` | Valid request body. | ❌ 404 | yes | ✔️ implemented | -| `1-01-02-31` | `User` | `🟣 LOCK /` | Valid request body. | ❌ 404 | yes | ✔️ implemented | -| `1-01-02-32` | `User` | `🟣 UNLOCK /` | Valid request body. | ❌ 404 | yes | ✔️ implemented | -| `1-01-02-33` | `User` | `🟣 MKCOL /` | Valid request body. | ❌ 404 | yes | ✔️ implemented | -| `1-01-02-34` | `User` | `🟣 MOVE /` | Valid request body. | ❌ 404 | yes | ✔️ implemented | -| `1-01-02-35` | `User` | `🟣 PROPFIND /` | Valid request body. | ❌ 404 | yes | ✔️ implemented | -| `1-01-02-36` | `User` | `🟣 PROPPATCH /` | Valid request body. | ❌ 404 | yes | ✔️ implemented |