From 36110e5addfd4a8b3344a314ec2e33bd31805448 Mon Sep 17 00:00:00 2001
From: Guillaume
Date: Thu, 5 Dec 2024 18:02:35 +0100
Subject: [PATCH] Release/next (#152)
* Use new user profile type
* Prepare new release
* Remove old docs and add docs for deploy option
* Package lock
* Rewrite data files docs and remove old rf to v1.16.0
* Update docs for JSON schema improved support
* Add JSON schema tutorial
* Update docs with new tool
* Remove old sponsor images
* docs image change
* Add doc for deploy custom subdomain
* Add docs for object merging helpers update
* add docs
* Add changelog
* Changelog formatting
---
CONTRIBUTING.md | 1 -
components/footer.tsx | 2 +-
components/markdown.tsx | 2 +-
components/nav.tsx | 2 +-
content/docs/latest/about.md | 4 +-
.../docs/latest/api-endpoints/crud-routes.md | 2 +-
content/docs/latest/api-endpoints/folders.md | 2 +-
content/docs/latest/api-endpoints/routing.md | 2 +-
.../latest/data-buckets/using-data-buckets.md | 19 +-
.../api-mock-cloud-deployments.md | 19 +-
...data-synchronization-team-collaboration.md | 18 +-
.../mockoon-data-files/data-files-location.md | 42 +
.../mockoon-data-files/settings-and-logs.md | 2 +-
.../sharing-mock-api-files.md | 36 +-
.../response-configuration/file-serving.md | 4 +-
.../response-configuration/response-body.md | 2 +-
.../latest/route-responses/dynamic-rules.md | 12 +-
.../docs/latest/templating/mockoon-helpers.md | 64 +-
content/docs/v6.2.0/about.md | 24 -
.../templates-and-ai-assistant.md | 68 -
.../v6.2.0/data-buckets/using-data-buckets.md | 37 -
.../data-storage-location.md | 47 -
.../environment-clipboard-copy.md | 35 -
.../response-configuration/xml-support.md | 51 -
.../v6.2.0/route-responses/dynamic-rules.md | 117 --
.../server-configuration/serving-over-tls.md | 39 -
...data-synchronization-team-collaboration.md | 14 +-
...data-synchronization-team-collaboration.md | 14 +-
...data-synchronization-team-collaboration.md | 14 +-
...data-synchronization-team-collaboration.md | 14 +-
.../api-mock-cloud-deployments.md | 8 +-
...data-synchronization-team-collaboration.md | 14 +-
.../api-mock-cloud-deployments.md | 8 +-
...data-synchronization-team-collaboration.md | 14 +-
content/docs/v9.0.0/about.md | 39 +
content/docs/v9.0.0/admin-api/data-buckets.md | 49 +
.../v9.0.0/admin-api/environment-variables.md | 61 +
.../docs/v9.0.0/admin-api/global-variables.md | 66 +
content/docs/v9.0.0/admin-api/overview.md | 59 +
content/docs/v9.0.0/admin-api/server-state.md | 29 +
.../docs/v9.0.0/admin-api/transaction-logs.md | 76 ++
.../api-endpoints/crud-routes.md | 46 +-
.../api-endpoints/folders.md | 4 +-
.../docs/v9.0.0/api-endpoints/http-routes.md | 41 +
.../api-endpoints/routing.md | 30 +-
.../docs/v9.0.0/api-endpoints/websockets.md | 90 ++
.../{v6.2.0 => v9.0.0}/callbacks/overview.md | 4 +-
.../callbacks/using-callbacks.md | 6 +-
.../data-buckets/overview.md | 12 +-
.../v9.0.0/data-buckets/using-data-buckets.md | 83 ++
.../{v6.2.0 => v9.0.0}/gui-cheat-sheet.md | 0
.../auto-mocking-and-recording.md | 8 +-
.../logging-and-recording/requests-logging.md | 22 +-
.../api-mock-cloud-deployments.md | 87 ++
...data-synchronization-team-collaboration.md | 120 ++
content/docs/v9.0.0/mockoon-cloud/overview.md | 27 +
.../templates-and-ai-assistant.md | 79 ++
.../data-storage-location.md | 0
.../environment-clipboard-copy.md | 0
.../mockoon-data-files/settings-and-logs.md | 2 +-
.../sharing-mock-api-files.md | 6 +-
.../openapi/import-export-openapi-format.md | 2 +-
.../openapi-specification-compatibility.md | 4 +-
.../docs/v9.0.0/requests/query-parameters.md | 57 +
.../v9.0.0/requests/supported-body-formats.md | 164 +++
.../response-configuration/file-serving.md | 12 +-
.../response-configuration/response-body.md | 10 +-
.../response-headers.md | 8 +-
.../v9.0.0/route-responses/dynamic-rules.md | 143 +++
.../global-routes-with-rules.md | 8 +-
.../route-responses/multiple-responses.md | 4 +-
.../server-configuration/cors.md | 10 +-
.../listening-hostname.md | 4 +-
.../server-configuration/port-prefix.md | 8 +-
.../server-configuration/proxy-mode.md | 8 +-
.../server-configuration/serving-over-tls.md | 65 +
.../templating/fakerjs-helpers.md | 2 +-
content/docs/v9.0.0/templating/jwt-helpers.md | 65 +
.../templating/mockoon-helpers.md | 324 ++---
.../templating/mockoon-request-helpers.md | 54 +-
.../templating/mockoon-response-helpers.md | 4 +-
.../templating/mockoon-variables-helpers.md | 149 +++
.../{v6.2.0 => v9.0.0}/templating/overview.md | 18 +-
.../v9.0.0/variables/environment-variables.md | 37 +
.../variables/global-variables.md} | 16 +-
.../docs/v9.0.0/variables/local-variables.md | 58 +
content/releases/5.0.0.md | 6 +-
content/releases/8.0.0.md | 6 +
content/releases/8.1.0.md | 6 +
content/releases/8.1.1.md | 6 +
content/releases/8.2.0.md | 6 +
content/releases/8.3.0.md | 6 +
content/releases/8.4.0.md | 6 +
content/releases/9.0.0.md | 8 +-
content/releases/9.1.0.md | 120 ++
.../create-endpoint-serving-static-file.md | 2 +-
content/tutorials/getting-started.md | 2 +-
.../self-host-mock-api-server-cli.md | 2 +-
.../tutorials/use-persisting-data-buckets.md | 4 +
.../validate-requests-payload-json-schema.md | 215 ++++
firebase.json | 12 +-
package-lock.json | 1128 ++++-------------
package.json | 2 +-
pages/account/info.tsx | 2 +-
pages/faq.tsx | 49 +-
pages/integrations/embedded-button.tsx | 2 +-
pages/sponsor-us.tsx | 6 +-
.../deploy-environment-dialog.png | Bin 0 -> 23644 bytes
.../deploy-environment-management-dialog.png | Bin
.../deploy-environment-management-menu.png | Bin
.../deploy-environment-menu.png | Bin
.../cloud-sync-menu.png | Bin
.../convert-cloud-to-local.png | Bin
.../create-cloud-environment.png | Bin
.../offline-conflict-warning.png | Bin
.../offline-editing-warning.png | Bin
.../offline-reason-disconnected.png | Bin
.../offline-reason-incompatible-version.png | Bin
.../presence-indicators.png | Bin
.../enable-file-watching.png | Bin
.../environment-move-to-folder.png | Bin
.../environment-show-in-folder.png | Bin
.../export-clipboard-env.png | Bin
.../crud-routes/add-crud-route.png | Bin 3828 -> 0 bytes
.../customize-crud-id-property-key.png | Bin 7658 -> 0 bytes
.../link-data-bucket-crud-route.png | Bin 7668 -> 0 bytes
.../crud-routes/set-crud-route-path.png | Bin 6278 -> 0 bytes
.../folders/routes-nested-folder.png | Bin 11138 -> 0 bytes
.../routing/environment-prefix.png | Bin 7664 -> 0 bytes
.../routing/open-environment-settings.png | Bin 5627 -> 0 bytes
.../api-endpoints/routing/route-params.png | Bin 1553 -> 0 bytes
.../api-endpoints/routing/route-patterns.png | Bin 1393 -> 0 bytes
.../ai-assistant-generate-button.png | Bin 9339 -> 0 bytes
.../ai-assistant-generate-template-tab.png | Bin 10076 -> 0 bytes
...ai-assistant-template-generate-options.png | Bin 10075 -> 0 bytes
.../pre-generated-templates-modal.png | Bin 3738 -> 0 bytes
.../templates-create-get-route.png | Bin 13408 -> 0 bytes
.../templates-generate-get-route.png | Bin 20687 -> 0 bytes
.../callbacks/overview/add-callback.png | Bin 11177 -> 0 bytes
.../overview/open-callbacks-view.png | Bin 6059 -> 0 bytes
.../link-callback-response.png | Bin 4666 -> 0 bytes
.../open-route-response-callbacks.png | Bin 3940 -> 0 bytes
.../data-buckets/overview/add-data-bucket.png | Bin 8090 -> 0 bytes
.../data-buckets/overview/open-data-view.png | Bin 5554 -> 0 bytes
.../link-data-bucket-response.png | Bin 6714 -> 0 bytes
.../logs-auto-mocking.png | Bin 14921 -> 0 bytes
.../logs-recording-in-progress.png | Bin 12971 -> 0 bytes
.../logs-start-recording.png | Bin 14929 -> 0 bytes
.../requests-logging/logs-metadata.png | Bin 14941 -> 0 bytes
.../requests-logging/logs-request.png | Bin 13618 -> 0 bytes
.../requests-logging/logs-response.png | Bin 10624 -> 0 bytes
.../requests-logging/logs-view-body-modal.png | Bin 5678 -> 0 bytes
.../requests-logging/logs-view-body.png | Bin 13667 -> 0 bytes
.../requests-logging/open-logs.png | Bin 5921 -> 0 bytes
.../enable-file-watching.png | Bin 15388 -> 0 bytes
.../environment-move-to-folder.png | Bin 9364 -> 0 bytes
.../environment-show-in-folder.png | Bin 8807 -> 0 bytes
.../export-clipboard-env.png | Bin 11286 -> 0 bytes
.../open-environment.png | Bin 6031 -> 0 bytes
.../storage-pretty-printing.png | Bin 15435 -> 0 bytes
.../file-serving/enable-404-fallback.png | Bin 6436 -> 0 bytes
.../environment-show-in-folder.png | Bin 8849 -> 0 bytes
.../file-serving/file-path.png | Bin 6872 -> 0 bytes
.../route-response-disable-templating.png | Bin 6073 -> 0 bytes
.../response-body/body-data-bucket.png | Bin 11108 -> 0 bytes
.../response-body/body-file-serving.png | Bin 11187 -> 0 bytes
.../response-body/body-type-toggle.png | Bin 15532 -> 0 bytes
.../response-body/inline-body-editor.png | Bin 12503 -> 0 bytes
.../add-environment-header.png | Bin 5632 -> 0 bytes
.../response-headers/add-route-header.png | Bin 4894 -> 0 bytes
.../fill-route-header-form.png | Bin 5155 -> 0 bytes
.../open-environment-headers.png | Bin 5320 -> 0 bytes
.../dynamic-rules/add-route-response-rule.png | Bin 6311 -> 0 bytes
.../dynamic-rules/disable-rules.png | Bin 11089 -> 0 bytes
.../route-response-rule-reorder.png | Bin 12055 -> 0 bytes
...ute-response-rules-comparison-operator.png | Bin 5522 -> 0 bytes
.../route-response-rules-invert-operator.png | Bin 5462 -> 0 bytes
.../route-response-rules-operator.png | Bin 6607 -> 0 bytes
.../route-response-rules-property.png | Bin 5542 -> 0 bytes
.../route-response-rules-target.png | Bin 5536 -> 0 bytes
.../route-response-rules-value.png | Bin 5505 -> 0 bytes
.../activate-fallback-mode.png | Bin 4835 -> 0 bytes
.../create-wildcard-route.png | Bin 7874 -> 0 bytes
.../response-rule-header-null.png | Bin 6203 -> 0 bytes
.../response-status-code-401.png | Bin 5339 -> 0 bytes
.../multiple-responses/add-route-response.png | Bin 4022 -> 0 bytes
.../change-route-responses-default.png | Bin 8462 -> 0 bytes
.../duplicate-route-response.png | Bin 7211 -> 0 bytes
.../fallback-mode-responses.png | Bin 6502 -> 0 bytes
.../random-route-responses.png | Bin 6694 -> 0 bytes
.../multiple-responses/reorder-responses.png | Bin 5043 -> 0 bytes
.../sequential-route-responses.png | Bin 6589 -> 0 bytes
.../cors/add-cors-headers.png | Bin 5795 -> 0 bytes
.../server-configuration/cors/enable-cors.png | Bin 11897 -> 0 bytes
.../cors/open-environment-headers.png | Bin 6657 -> 0 bytes
.../cors/open-environment-settings.png | Bin 6304 -> 0 bytes
.../cors/view-cors-headers.png | Bin 10204 -> 0 bytes
.../custom-hostname-setting.png | Bin 7529 -> 0 bytes
.../open-environment-settings.png | Bin 6311 -> 0 bytes
.../port-prefix/environment-custom-port.png | Bin 5537 -> 0 bytes
.../port-prefix/environment-custom-prefix.png | Bin 7664 -> 0 bytes
.../port-prefix/open-environment-settings.png | Bin 5627 -> 0 bytes
.../proxy-mode/enable-proxy.png | Bin 8057 -> 0 bytes
.../proxy-mode/open-proxy-options.png | Bin 5960 -> 0 bytes
.../proxy-mode/proxy-headers.png | Bin 9610 -> 0 bytes
.../proxy-mode/proxy-no-forward.png | Bin 6572 -> 0 bytes
.../enable-tls-custom-certificate.png | Bin 13904 -> 0 bytes
.../serving-over-tls/enable-tls.png | Bin 7933 -> 0 bytes
.../open-environment-settings.png | Bin 6217 -> 0 bytes
.../fakerjs-helpers/settings-faker.png | Bin 15582 -> 0 bytes
.../templating/overview/body-templating.png | Bin 17810 -> 0 bytes
.../disable-route-response-templating.png | Bin 5995 -> 0 bytes
.../overview/file-path-templating.png | Bin 3800 -> 0 bytes
.../overview/headers-templating.png | Bin 5058 -> 0 bytes
.../overview/open-route-response-settings.png | Bin 3882 -> 0 bytes
.../template-helper-response-rule-value.png | Bin 4186 -> 0 bytes
.../cloud-sync-menu.png | Bin 0 -> 2151 bytes
.../convert-cloud-to-local.png | Bin 0 -> 5981 bytes
.../create-cloud-environment.png | Bin 0 -> 13166 bytes
.../offline-conflict-warning.png | Bin 0 -> 6264 bytes
.../offline-editing-warning.png | Bin 0 -> 4419 bytes
.../offline-reason-disconnected.png | Bin 0 -> 3509 bytes
.../offline-reason-incompatible-version.png | Bin 0 -> 2985 bytes
.../presence-indicators.png | Bin 0 -> 33158 bytes
.../cloud-sync-menu.png | Bin 0 -> 2151 bytes
.../convert-cloud-to-local.png | Bin 0 -> 5981 bytes
.../create-cloud-environment.png | Bin 0 -> 13166 bytes
.../offline-conflict-warning.png | Bin 0 -> 6264 bytes
.../offline-editing-warning.png | Bin 0 -> 4419 bytes
.../offline-reason-disconnected.png | Bin 0 -> 3509 bytes
.../offline-reason-incompatible-version.png | Bin 0 -> 2985 bytes
.../presence-indicators.png | Bin 0 -> 33158 bytes
.../cloud-sync-menu.png | Bin 0 -> 2151 bytes
.../convert-cloud-to-local.png | Bin 0 -> 5981 bytes
.../create-cloud-environment.png | Bin 0 -> 13166 bytes
.../offline-conflict-warning.png | Bin 0 -> 6264 bytes
.../offline-editing-warning.png | Bin 0 -> 4419 bytes
.../offline-reason-disconnected.png | Bin 0 -> 3509 bytes
.../offline-reason-incompatible-version.png | Bin 0 -> 2985 bytes
.../presence-indicators.png | Bin 0 -> 33158 bytes
.../cloud-sync-menu.png | Bin 0 -> 2151 bytes
.../convert-cloud-to-local.png | Bin 0 -> 5981 bytes
.../create-cloud-environment.png | Bin 0 -> 13166 bytes
.../offline-conflict-warning.png | Bin 0 -> 6264 bytes
.../offline-editing-warning.png | Bin 0 -> 4419 bytes
.../offline-reason-disconnected.png | Bin 0 -> 3509 bytes
.../offline-reason-incompatible-version.png | Bin 0 -> 2985 bytes
.../presence-indicators.png | Bin 0 -> 33158 bytes
.../deploy-environment-dialog.png | Bin
.../deploy-environment-management-dialog.png | Bin 0 -> 6810 bytes
.../deploy-environment-management-menu.png | Bin 0 -> 6838 bytes
.../deploy-environment-menu.png | Bin 0 -> 10016 bytes
.../cloud-sync-menu.png | Bin 0 -> 2151 bytes
.../convert-cloud-to-local.png | Bin 0 -> 5981 bytes
.../create-cloud-environment.png | Bin 0 -> 13166 bytes
.../offline-conflict-warning.png | Bin 0 -> 6264 bytes
.../offline-editing-warning.png | Bin 0 -> 4419 bytes
.../offline-reason-disconnected.png | Bin 0 -> 3509 bytes
.../offline-reason-incompatible-version.png | Bin 0 -> 2985 bytes
.../presence-indicators.png | Bin 0 -> 33158 bytes
.../deploy-environment-dialog.png | Bin 0 -> 5773 bytes
.../deploy-environment-management-dialog.png | Bin 0 -> 6810 bytes
.../deploy-environment-management-menu.png | Bin 0 -> 6838 bytes
.../deploy-environment-menu.png | Bin 0 -> 10016 bytes
.../cloud-sync-menu.png | Bin 0 -> 2151 bytes
.../convert-cloud-to-local.png | Bin 0 -> 5981 bytes
.../create-cloud-environment.png | Bin 0 -> 13166 bytes
.../offline-conflict-warning.png | Bin 0 -> 6264 bytes
.../offline-editing-warning.png | Bin 0 -> 4419 bytes
.../offline-reason-disconnected.png | Bin 0 -> 3509 bytes
.../offline-reason-incompatible-version.png | Bin 0 -> 2985 bytes
.../presence-indicators.png | Bin 0 -> 33158 bytes
.../crud-routes/add-crud-route.png | Bin 0 -> 5641 bytes
.../customize-crud-id-property-key.png | Bin 0 -> 8426 bytes
.../link-data-bucket-crud-route.png | Bin 0 -> 8456 bytes
.../crud-routes/set-crud-route-path.png | Bin 0 -> 7545 bytes
.../folders/routes-nested-folder.png | Bin 0 -> 12802 bytes
.../http-routes/add-http-route.png | Bin 0 -> 5645 bytes
.../http-routes/new-http-route.png | Bin 0 -> 13384 bytes
.../routing/environment-prefix.png | Bin 0 -> 8610 bytes
.../routing/open-environment-settings.png | Bin 0 -> 6236 bytes
.../routing/route-menu-disable-route.png | Bin 0 -> 10326 bytes
.../api-endpoints/routing/route-params.png | Bin 0 -> 1781 bytes
.../api-endpoints/routing/route-patterns.png | Bin 0 -> 1628 bytes
.../api-endpoints/websockets/add-ws-route.png | Bin 0 -> 5644 bytes
.../websockets/set-ws-route-path.png | Bin 0 -> 7480 bytes
.../toggle-ws-broadcast-streaming.png | Bin 0 -> 7623 bytes
.../toggle-ws-unicast-streaming.png | Bin 0 -> 7623 bytes
.../callbacks/overview/add-callback.png | Bin 0 -> 13618 bytes
.../overview/open-callbacks-view.png | Bin 0 -> 6863 bytes
.../link-callback-response.png | Bin 0 -> 4962 bytes
.../open-route-response-callbacks.png | Bin 0 -> 4559 bytes
.../data-buckets/overview/add-data-bucket.png | Bin 0 -> 10436 bytes
.../data-buckets/overview/open-data-view.png | Bin 0 -> 6101 bytes
.../link-data-bucket-response.png | Bin 0 -> 6699 bytes
.../logs-auto-mocking.png | Bin 0 -> 12752 bytes
.../logs-recording-in-progress.png | Bin 0 -> 11514 bytes
.../logs-start-recording.png | Bin 0 -> 12508 bytes
.../requests-logging/logs-metadata.png | Bin 0 -> 12484 bytes
.../requests-logging/logs-request.png | Bin 0 -> 14233 bytes
.../requests-logging/logs-response.png | Bin 0 -> 11588 bytes
.../requests-logging/open-logs.png | Bin 0 -> 6583 bytes
.../deploy-environment-dialog.png | Bin 0 -> 5773 bytes
.../deploy-environment-management-dialog.png | Bin 0 -> 6810 bytes
.../deploy-environment-management-menu.png | Bin 0 -> 6838 bytes
.../deploy-environment-menu.png | Bin 0 -> 10016 bytes
.../cloud-sync-menu.png | Bin 0 -> 2151 bytes
.../convert-cloud-to-local.png | Bin 0 -> 5981 bytes
.../create-cloud-environment.png | Bin 0 -> 13166 bytes
.../offline-conflict-warning.png | Bin 0 -> 6264 bytes
.../offline-editing-warning.png | Bin 0 -> 4419 bytes
.../offline-reason-disconnected.png | Bin 0 -> 3509 bytes
.../offline-reason-incompatible-version.png | Bin 0 -> 2985 bytes
.../presence-indicators.png | Bin 0 -> 33158 bytes
.../ai-assistant-generate-button.png | Bin 0 -> 8830 bytes
.../ai-assistant-generate-endpoint-button.png | Bin 0 -> 10090 bytes
...istant-generate-endpoint-create-button.png | Bin 0 -> 18969 bytes
.../ai-assistant-generate-endpoint-tab.png | Bin 0 -> 10814 bytes
.../ai-assistant-generate-template-tab.png | Bin 0 -> 9480 bytes
.../ai-assistant-template-generate-option.png | Bin 0 -> 9495 bytes
.../pre-generated-templates-modal.png | Bin 0 -> 5619 bytes
.../templates-create-get-route.png | Bin 0 -> 14470 bytes
.../templates-generate-get-route.png | Bin 0 -> 13983 bytes
.../enable-file-watching.png | Bin 0 -> 14509 bytes
.../environment-move-to-folder.png | Bin 0 -> 10777 bytes
.../environment-show-in-folder.png | Bin 0 -> 10660 bytes
.../export-clipboard-env.png | Bin 0 -> 12491 bytes
.../open-environment.png | Bin 0 -> 9761 bytes
.../storage-pretty-printing.png | Bin 0 -> 14444 bytes
.../file-serving/enable-404-fallback.png | Bin 0 -> 6481 bytes
.../environment-show-in-folder.png | Bin 0 -> 10942 bytes
.../file-serving/file-path.png | Bin 0 -> 6922 bytes
.../route-response-disable-templating.png | Bin 0 -> 6001 bytes
.../response-body/body-data-bucket.png | Bin 0 -> 9346 bytes
.../response-body/body-file-serving.png | Bin 0 -> 9393 bytes
.../response-body/body-type-toggle.png | Bin 0 -> 18001 bytes
.../response-body/inline-body-editor.png | Bin 0 -> 10632 bytes
.../add-environment-header.png | Bin 0 -> 5878 bytes
.../response-headers/add-route-header.png | Bin 0 -> 5175 bytes
.../fill-route-header-form.png | Bin 0 -> 5163 bytes
.../open-environment-headers.png | Bin 0 -> 6007 bytes
.../dynamic-rules/add-route-response-rule.png | Bin 0 -> 6658 bytes
.../dynamic-rules/disable-rules.png | Bin 0 -> 8937 bytes
.../route-response-rule-reorder.png | Bin 0 -> 8521 bytes
...ute-response-rules-comparison-operator.png | Bin 0 -> 5284 bytes
.../route-response-rules-invert-operator.png | Bin 0 -> 5175 bytes
.../route-response-rules-operator.png | Bin 0 -> 6793 bytes
.../route-response-rules-property.png | Bin 0 -> 5276 bytes
.../route-response-rules-target.png | Bin 0 -> 5281 bytes
.../route-response-rules-value.png | Bin 0 -> 5281 bytes
.../activate-fallback-mode.png | Bin 0 -> 4210 bytes
.../create-wildcard-route.png | Bin 0 -> 8943 bytes
.../response-rule-header-null.png | Bin 0 -> 6614 bytes
.../response-status-code-401.png | Bin 0 -> 5556 bytes
.../multiple-responses/add-route-response.png | Bin 0 -> 4243 bytes
.../change-route-responses-default.png | Bin 0 -> 5416 bytes
.../duplicate-route-response.png | Bin 0 -> 4691 bytes
.../fallback-mode-responses.png | Bin 0 -> 4314 bytes
.../random-route-responses.png | Bin 0 -> 4637 bytes
.../multiple-responses/reorder-responses.png | Bin 0 -> 5141 bytes
.../sequential-route-responses.png | Bin 0 -> 4494 bytes
.../cors/add-cors-headers.png | Bin 0 -> 6430 bytes
.../server-configuration/cors/enable-cors.png | Bin 0 -> 12814 bytes
.../cors/open-environment-headers.png | Bin 0 -> 7482 bytes
.../cors/open-environment-settings.png | Bin 0 -> 6828 bytes
.../cors/view-cors-headers.png | Bin 0 -> 10909 bytes
.../custom-hostname-setting.png | Bin 0 -> 8117 bytes
.../open-environment-settings.png | Bin 0 -> 6854 bytes
.../port-prefix/environment-custom-port.png | Bin 0 -> 6251 bytes
.../port-prefix/environment-custom-prefix.png | Bin 0 -> 8610 bytes
.../port-prefix/open-environment-settings.png | Bin 0 -> 6236 bytes
.../proxy-mode/enable-proxy.png | Bin 0 -> 8661 bytes
.../proxy-mode/open-proxy-options.png | Bin 0 -> 6715 bytes
.../proxy-mode/proxy-headers.png | Bin 0 -> 10302 bytes
.../proxy-mode/proxy-no-forward.png | Bin 0 -> 6823 bytes
.../enable-tls-custom-certificate.png | Bin 0 -> 15968 bytes
.../serving-over-tls/enable-tls.png | Bin 0 -> 8123 bytes
.../open-environment-settings.png | Bin 0 -> 6833 bytes
.../fakerjs-helpers/settings-faker.png | Bin 0 -> 15352 bytes
.../templating/overview/body-templating.png | Bin 0 -> 18527 bytes
.../disable-route-response-templating.png | Bin 0 -> 5651 bytes
.../overview/file-path-templating.png | Bin 0 -> 3763 bytes
.../overview/headers-templating.png | Bin 0 -> 5240 bytes
.../overview/open-route-response-settings.png | Bin 0 -> 4101 bytes
.../template-helper-response-rule-value.png | Bin 0 -> 4352 bytes
.../settings-environment-variables-prefix.png | Bin 0 -> 15486 bytes
...deployment-subdomain-disable-admin-api.png | Bin 0 -> 18621 bytes
.../9.1.0/data-bucket-state-editor.png | Bin 0 -> 22997 bytes
.../9.1.0/data-bucket-state-indicator.png | Bin 0 -> 28844 bytes
.../9.1.0/rule-targeting-request-path.png | Bin 0 -> 8658 bytes
public/images/sponsors/fern.png | Bin 6224 -> 0 bytes
public/images/sponsors/light/fern.png | Bin 6224 -> 0 bytes
...-validate-requests-payload-json-schema.png | Bin 0 -> 135735 bytes
.../create-sign-up-endpoint.png | Bin 0 -> 11501 bytes
.../default-400-response.png | Bin 0 -> 8777 bytes
.../multiple-json-schemas-rule.png | Bin 0 -> 7509 bytes
.../new-sign-up-data-bucket.png | Bin 0 -> 18177 bytes
.../sign-up-json-schema-assistant.png | Bin 0 -> 16613 bytes
.../success-201-response.png | Bin 0 -> 9973 bytes
.../validate-payload-rule.png | Bin 0 -> 6704 bytes
.../validate-query-parameters-rule.png | Bin 0 -> 7825 bytes
401 files changed, 2862 insertions(+), 1767 deletions(-)
create mode 100644 content/docs/latest/mockoon-data-files/data-files-location.md
delete mode 100644 content/docs/v6.2.0/about.md
delete mode 100644 content/docs/v6.2.0/api-endpoints/templates-and-ai-assistant.md
delete mode 100644 content/docs/v6.2.0/data-buckets/using-data-buckets.md
delete mode 100644 content/docs/v6.2.0/mockoon-data-files/data-storage-location.md
delete mode 100644 content/docs/v6.2.0/mockoon-data-files/environment-clipboard-copy.md
delete mode 100644 content/docs/v6.2.0/response-configuration/xml-support.md
delete mode 100644 content/docs/v6.2.0/route-responses/dynamic-rules.md
delete mode 100644 content/docs/v6.2.0/server-configuration/serving-over-tls.md
create mode 100644 content/docs/v9.0.0/about.md
create mode 100644 content/docs/v9.0.0/admin-api/data-buckets.md
create mode 100644 content/docs/v9.0.0/admin-api/environment-variables.md
create mode 100644 content/docs/v9.0.0/admin-api/global-variables.md
create mode 100644 content/docs/v9.0.0/admin-api/overview.md
create mode 100644 content/docs/v9.0.0/admin-api/server-state.md
create mode 100644 content/docs/v9.0.0/admin-api/transaction-logs.md
rename content/docs/{v6.2.0 => v9.0.0}/api-endpoints/crud-routes.md (69%)
rename content/docs/{v6.2.0 => v9.0.0}/api-endpoints/folders.md (94%)
create mode 100644 content/docs/v9.0.0/api-endpoints/http-routes.md
rename content/docs/{v6.2.0 => v9.0.0}/api-endpoints/routing.md (58%)
create mode 100644 content/docs/v9.0.0/api-endpoints/websockets.md
rename content/docs/{v6.2.0 => v9.0.0}/callbacks/overview.md (91%)
rename content/docs/{v6.2.0 => v9.0.0}/callbacks/using-callbacks.md (62%)
rename content/docs/{v6.2.0 => v9.0.0}/data-buckets/overview.md (72%)
create mode 100644 content/docs/v9.0.0/data-buckets/using-data-buckets.md
rename content/docs/{v6.2.0 => v9.0.0}/gui-cheat-sheet.md (100%)
rename content/docs/{v6.2.0 => v9.0.0}/logging-and-recording/auto-mocking-and-recording.md (86%)
rename content/docs/{v6.2.0 => v9.0.0}/logging-and-recording/requests-logging.md (74%)
create mode 100644 content/docs/v9.0.0/mockoon-cloud/api-mock-cloud-deployments.md
create mode 100644 content/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration.md
create mode 100644 content/docs/v9.0.0/mockoon-cloud/overview.md
create mode 100644 content/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant.md
rename content/docs/{latest => v9.0.0}/mockoon-data-files/data-storage-location.md (100%)
rename content/docs/{latest => v9.0.0}/mockoon-data-files/environment-clipboard-copy.md (100%)
rename content/docs/{v6.2.0 => v9.0.0}/mockoon-data-files/settings-and-logs.md (98%)
rename content/docs/{v6.2.0 => v9.0.0}/mockoon-data-files/sharing-mock-api-files.md (82%)
rename content/docs/{v6.2.0 => v9.0.0}/openapi/import-export-openapi-format.md (99%)
rename content/docs/{v6.2.0 => v9.0.0}/openapi/openapi-specification-compatibility.md (93%)
create mode 100644 content/docs/v9.0.0/requests/query-parameters.md
create mode 100644 content/docs/v9.0.0/requests/supported-body-formats.md
rename content/docs/{v6.2.0 => v9.0.0}/response-configuration/file-serving.md (86%)
rename content/docs/{v6.2.0 => v9.0.0}/response-configuration/response-body.md (81%)
rename content/docs/{v6.2.0 => v9.0.0}/response-configuration/response-headers.md (79%)
create mode 100644 content/docs/v9.0.0/route-responses/dynamic-rules.md
rename content/docs/{v6.2.0 => v9.0.0}/route-responses/global-routes-with-rules.md (90%)
rename content/docs/{v6.2.0 => v9.0.0}/route-responses/multiple-responses.md (96%)
rename content/docs/{v6.2.0 => v9.0.0}/server-configuration/cors.md (84%)
rename content/docs/{v6.2.0 => v9.0.0}/server-configuration/listening-hostname.md (89%)
rename content/docs/{v6.2.0 => v9.0.0}/server-configuration/port-prefix.md (75%)
rename content/docs/{v6.2.0 => v9.0.0}/server-configuration/proxy-mode.md (85%)
create mode 100644 content/docs/v9.0.0/server-configuration/serving-over-tls.md
rename content/docs/{v6.2.0 => v9.0.0}/templating/fakerjs-helpers.md (99%)
create mode 100644 content/docs/v9.0.0/templating/jwt-helpers.md
rename content/docs/{v6.2.0 => v9.0.0}/templating/mockoon-helpers.md (78%)
rename content/docs/{v6.2.0 => v9.0.0}/templating/mockoon-request-helpers.md (71%)
rename content/docs/{v6.2.0 => v9.0.0}/templating/mockoon-response-helpers.md (88%)
create mode 100644 content/docs/v9.0.0/templating/mockoon-variables-helpers.md
rename content/docs/{v6.2.0 => v9.0.0}/templating/overview.md (86%)
create mode 100644 content/docs/v9.0.0/variables/environment-variables.md
rename content/docs/{v6.2.0/global-variables/overview.md => v9.0.0/variables/global-variables.md} (74%)
create mode 100644 content/docs/v9.0.0/variables/local-variables.md
create mode 100644 content/releases/9.1.0.md
create mode 100644 content/tutorials/validate-requests-payload-json-schema.md
create mode 100644 public/images/docs/latest/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-dialog.png
rename public/images/docs/{static => latest}/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-dialog.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-menu.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-menu.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png (100%)
rename public/images/docs/{static => latest}/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png (100%)
rename public/images/docs/latest/mockoon-data-files/{data-storage-location => data-files-location}/enable-file-watching.png (100%)
rename public/images/docs/latest/mockoon-data-files/{data-storage-location => data-files-location}/environment-move-to-folder.png (100%)
rename public/images/docs/latest/mockoon-data-files/{data-storage-location => data-files-location}/environment-show-in-folder.png (100%)
rename public/images/docs/latest/mockoon-data-files/{environment-clipboard-copy => sharing-mock-api-files}/export-clipboard-env.png (100%)
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/crud-routes/add-crud-route.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/crud-routes/customize-crud-id-property-key.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/crud-routes/link-data-bucket-crud-route.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/crud-routes/set-crud-route-path.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/folders/routes-nested-folder.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/routing/environment-prefix.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/routing/open-environment-settings.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/routing/route-params.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/routing/route-patterns.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/templates-and-ai-assistant/ai-assistant-generate-button.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/templates-and-ai-assistant/ai-assistant-generate-template-tab.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/templates-and-ai-assistant/ai-assistant-template-generate-options.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/templates-and-ai-assistant/pre-generated-templates-modal.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/templates-and-ai-assistant/templates-create-get-route.png
delete mode 100644 public/images/docs/v6.2.0/api-endpoints/templates-and-ai-assistant/templates-generate-get-route.png
delete mode 100644 public/images/docs/v6.2.0/callbacks/overview/add-callback.png
delete mode 100644 public/images/docs/v6.2.0/callbacks/overview/open-callbacks-view.png
delete mode 100644 public/images/docs/v6.2.0/callbacks/using-callbacks/link-callback-response.png
delete mode 100644 public/images/docs/v6.2.0/callbacks/using-callbacks/open-route-response-callbacks.png
delete mode 100644 public/images/docs/v6.2.0/data-buckets/overview/add-data-bucket.png
delete mode 100644 public/images/docs/v6.2.0/data-buckets/overview/open-data-view.png
delete mode 100644 public/images/docs/v6.2.0/data-buckets/using-data-buckets/link-data-bucket-response.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/auto-mocking-and-recording/logs-auto-mocking.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/auto-mocking-and-recording/logs-recording-in-progress.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/auto-mocking-and-recording/logs-start-recording.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/requests-logging/logs-metadata.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/requests-logging/logs-request.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/requests-logging/logs-response.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/requests-logging/logs-view-body-modal.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/requests-logging/logs-view-body.png
delete mode 100644 public/images/docs/v6.2.0/logging-and-recording/requests-logging/open-logs.png
delete mode 100644 public/images/docs/v6.2.0/mockoon-data-files/data-storage-location/enable-file-watching.png
delete mode 100644 public/images/docs/v6.2.0/mockoon-data-files/data-storage-location/environment-move-to-folder.png
delete mode 100644 public/images/docs/v6.2.0/mockoon-data-files/data-storage-location/environment-show-in-folder.png
delete mode 100644 public/images/docs/v6.2.0/mockoon-data-files/environment-clipboard-copy/export-clipboard-env.png
delete mode 100644 public/images/docs/v6.2.0/mockoon-data-files/sharing-mock-api-files/open-environment.png
delete mode 100644 public/images/docs/v6.2.0/mockoon-data-files/sharing-mock-api-files/storage-pretty-printing.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/file-serving/enable-404-fallback.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/file-serving/environment-show-in-folder.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/file-serving/file-path.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/file-serving/route-response-disable-templating.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/response-body/body-data-bucket.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/response-body/body-file-serving.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/response-body/body-type-toggle.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/response-body/inline-body-editor.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/response-headers/add-environment-header.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/response-headers/add-route-header.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/response-headers/fill-route-header-form.png
delete mode 100644 public/images/docs/v6.2.0/response-configuration/response-headers/open-environment-headers.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/add-route-response-rule.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/disable-rules.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/route-response-rule-reorder.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/route-response-rules-comparison-operator.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/route-response-rules-invert-operator.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/route-response-rules-operator.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/route-response-rules-property.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/route-response-rules-target.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/dynamic-rules/route-response-rules-value.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/global-routes-with-rules/activate-fallback-mode.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/global-routes-with-rules/create-wildcard-route.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/global-routes-with-rules/response-rule-header-null.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/global-routes-with-rules/response-status-code-401.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/multiple-responses/add-route-response.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/multiple-responses/change-route-responses-default.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/multiple-responses/duplicate-route-response.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/multiple-responses/fallback-mode-responses.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/multiple-responses/random-route-responses.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/multiple-responses/reorder-responses.png
delete mode 100644 public/images/docs/v6.2.0/route-responses/multiple-responses/sequential-route-responses.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/cors/add-cors-headers.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/cors/enable-cors.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/cors/open-environment-headers.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/cors/open-environment-settings.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/cors/view-cors-headers.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/listening-hostname/custom-hostname-setting.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/listening-hostname/open-environment-settings.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/port-prefix/environment-custom-port.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/port-prefix/environment-custom-prefix.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/port-prefix/open-environment-settings.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/proxy-mode/enable-proxy.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/proxy-mode/open-proxy-options.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/proxy-mode/proxy-headers.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/proxy-mode/proxy-no-forward.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/serving-over-tls/enable-tls-custom-certificate.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/serving-over-tls/enable-tls.png
delete mode 100644 public/images/docs/v6.2.0/server-configuration/serving-over-tls/open-environment-settings.png
delete mode 100644 public/images/docs/v6.2.0/templating/fakerjs-helpers/settings-faker.png
delete mode 100644 public/images/docs/v6.2.0/templating/overview/body-templating.png
delete mode 100644 public/images/docs/v6.2.0/templating/overview/disable-route-response-templating.png
delete mode 100644 public/images/docs/v6.2.0/templating/overview/file-path-templating.png
delete mode 100644 public/images/docs/v6.2.0/templating/overview/headers-templating.png
delete mode 100644 public/images/docs/v6.2.0/templating/overview/open-route-response-settings.png
delete mode 100644 public/images/docs/v6.2.0/templating/overview/template-helper-response-rule-value.png
create mode 100644 public/images/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png
create mode 100644 public/images/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png
create mode 100644 public/images/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png
create mode 100644 public/images/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png
create mode 100644 public/images/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png
create mode 100644 public/images/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png
create mode 100644 public/images/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png
create mode 100644 public/images/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png
create mode 100644 public/images/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png
create mode 100644 public/images/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png
create mode 100644 public/images/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png
create mode 100644 public/images/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png
create mode 100644 public/images/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png
create mode 100644 public/images/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png
create mode 100644 public/images/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png
create mode 100644 public/images/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png
create mode 100644 public/images/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png
create mode 100644 public/images/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png
create mode 100644 public/images/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png
create mode 100644 public/images/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png
create mode 100644 public/images/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png
create mode 100644 public/images/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png
create mode 100644 public/images/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png
create mode 100644 public/images/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png
create mode 100644 public/images/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png
create mode 100644 public/images/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png
create mode 100644 public/images/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png
create mode 100644 public/images/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png
create mode 100644 public/images/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png
create mode 100644 public/images/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png
create mode 100644 public/images/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png
create mode 100644 public/images/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png
rename public/images/docs/{static => v8.3.0}/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-dialog.png (100%)
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-dialog.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-menu.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-menu.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png
create mode 100644 public/images/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-dialog.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-dialog.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-menu.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-menu.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png
create mode 100644 public/images/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/crud-routes/add-crud-route.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/crud-routes/customize-crud-id-property-key.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/crud-routes/link-data-bucket-crud-route.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/crud-routes/set-crud-route-path.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/folders/routes-nested-folder.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/http-routes/add-http-route.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/http-routes/new-http-route.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/routing/environment-prefix.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/routing/open-environment-settings.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/routing/route-menu-disable-route.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/routing/route-params.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/routing/route-patterns.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/websockets/add-ws-route.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/websockets/set-ws-route-path.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/websockets/toggle-ws-broadcast-streaming.png
create mode 100644 public/images/docs/v9.0.0/api-endpoints/websockets/toggle-ws-unicast-streaming.png
create mode 100644 public/images/docs/v9.0.0/callbacks/overview/add-callback.png
create mode 100644 public/images/docs/v9.0.0/callbacks/overview/open-callbacks-view.png
create mode 100644 public/images/docs/v9.0.0/callbacks/using-callbacks/link-callback-response.png
create mode 100644 public/images/docs/v9.0.0/callbacks/using-callbacks/open-route-response-callbacks.png
create mode 100644 public/images/docs/v9.0.0/data-buckets/overview/add-data-bucket.png
create mode 100644 public/images/docs/v9.0.0/data-buckets/overview/open-data-view.png
create mode 100644 public/images/docs/v9.0.0/data-buckets/using-data-buckets/link-data-bucket-response.png
create mode 100644 public/images/docs/v9.0.0/logging-and-recording/auto-mocking-and-recording/logs-auto-mocking.png
create mode 100644 public/images/docs/v9.0.0/logging-and-recording/auto-mocking-and-recording/logs-recording-in-progress.png
create mode 100644 public/images/docs/v9.0.0/logging-and-recording/auto-mocking-and-recording/logs-start-recording.png
create mode 100644 public/images/docs/v9.0.0/logging-and-recording/requests-logging/logs-metadata.png
create mode 100644 public/images/docs/v9.0.0/logging-and-recording/requests-logging/logs-request.png
create mode 100644 public/images/docs/v9.0.0/logging-and-recording/requests-logging/logs-response.png
create mode 100644 public/images/docs/v9.0.0/logging-and-recording/requests-logging/open-logs.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-dialog.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-dialog.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-menu.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-menu.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/ai-assistant-generate-button.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/ai-assistant-generate-endpoint-button.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/ai-assistant-generate-endpoint-create-button.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/ai-assistant-generate-endpoint-tab.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/ai-assistant-generate-template-tab.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/ai-assistant-template-generate-option.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/pre-generated-templates-modal.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/templates-create-get-route.png
create mode 100644 public/images/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant/templates-generate-get-route.png
create mode 100644 public/images/docs/v9.0.0/mockoon-data-files/data-storage-location/enable-file-watching.png
create mode 100644 public/images/docs/v9.0.0/mockoon-data-files/data-storage-location/environment-move-to-folder.png
create mode 100644 public/images/docs/v9.0.0/mockoon-data-files/data-storage-location/environment-show-in-folder.png
create mode 100644 public/images/docs/v9.0.0/mockoon-data-files/environment-clipboard-copy/export-clipboard-env.png
create mode 100644 public/images/docs/v9.0.0/mockoon-data-files/sharing-mock-api-files/open-environment.png
create mode 100644 public/images/docs/v9.0.0/mockoon-data-files/sharing-mock-api-files/storage-pretty-printing.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/file-serving/enable-404-fallback.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/file-serving/environment-show-in-folder.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/file-serving/file-path.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/file-serving/route-response-disable-templating.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/response-body/body-data-bucket.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/response-body/body-file-serving.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/response-body/body-type-toggle.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/response-body/inline-body-editor.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/response-headers/add-environment-header.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/response-headers/add-route-header.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/response-headers/fill-route-header-form.png
create mode 100644 public/images/docs/v9.0.0/response-configuration/response-headers/open-environment-headers.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/add-route-response-rule.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/disable-rules.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/route-response-rule-reorder.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/route-response-rules-comparison-operator.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/route-response-rules-invert-operator.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/route-response-rules-operator.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/route-response-rules-property.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/route-response-rules-target.png
create mode 100644 public/images/docs/v9.0.0/route-responses/dynamic-rules/route-response-rules-value.png
create mode 100644 public/images/docs/v9.0.0/route-responses/global-routes-with-rules/activate-fallback-mode.png
create mode 100644 public/images/docs/v9.0.0/route-responses/global-routes-with-rules/create-wildcard-route.png
create mode 100644 public/images/docs/v9.0.0/route-responses/global-routes-with-rules/response-rule-header-null.png
create mode 100644 public/images/docs/v9.0.0/route-responses/global-routes-with-rules/response-status-code-401.png
create mode 100644 public/images/docs/v9.0.0/route-responses/multiple-responses/add-route-response.png
create mode 100644 public/images/docs/v9.0.0/route-responses/multiple-responses/change-route-responses-default.png
create mode 100644 public/images/docs/v9.0.0/route-responses/multiple-responses/duplicate-route-response.png
create mode 100644 public/images/docs/v9.0.0/route-responses/multiple-responses/fallback-mode-responses.png
create mode 100644 public/images/docs/v9.0.0/route-responses/multiple-responses/random-route-responses.png
create mode 100644 public/images/docs/v9.0.0/route-responses/multiple-responses/reorder-responses.png
create mode 100644 public/images/docs/v9.0.0/route-responses/multiple-responses/sequential-route-responses.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/cors/add-cors-headers.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/cors/enable-cors.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/cors/open-environment-headers.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/cors/open-environment-settings.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/cors/view-cors-headers.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/listening-hostname/custom-hostname-setting.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/listening-hostname/open-environment-settings.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/port-prefix/environment-custom-port.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/port-prefix/environment-custom-prefix.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/port-prefix/open-environment-settings.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/proxy-mode/enable-proxy.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/proxy-mode/open-proxy-options.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/proxy-mode/proxy-headers.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/proxy-mode/proxy-no-forward.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/serving-over-tls/enable-tls-custom-certificate.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/serving-over-tls/enable-tls.png
create mode 100644 public/images/docs/v9.0.0/server-configuration/serving-over-tls/open-environment-settings.png
create mode 100644 public/images/docs/v9.0.0/templating/fakerjs-helpers/settings-faker.png
create mode 100644 public/images/docs/v9.0.0/templating/overview/body-templating.png
create mode 100644 public/images/docs/v9.0.0/templating/overview/disable-route-response-templating.png
create mode 100644 public/images/docs/v9.0.0/templating/overview/file-path-templating.png
create mode 100644 public/images/docs/v9.0.0/templating/overview/headers-templating.png
create mode 100644 public/images/docs/v9.0.0/templating/overview/open-route-response-settings.png
create mode 100644 public/images/docs/v9.0.0/templating/overview/template-helper-response-rule-value.png
create mode 100644 public/images/docs/v9.0.0/variables/environment-variables/settings-environment-variables-prefix.png
create mode 100644 public/images/releases/9.1.0/cloud-deployment-subdomain-disable-admin-api.png
create mode 100644 public/images/releases/9.1.0/data-bucket-state-editor.png
create mode 100644 public/images/releases/9.1.0/data-bucket-state-indicator.png
create mode 100644 public/images/releases/9.1.0/rule-targeting-request-path.png
delete mode 100644 public/images/sponsors/fern.png
delete mode 100644 public/images/sponsors/light/fern.png
create mode 100644 public/images/tutorials/tutorial-validate-requests-payload-json-schema.png
create mode 100644 public/images/tutorials/validate-requests-payload-json-schema/create-sign-up-endpoint.png
create mode 100644 public/images/tutorials/validate-requests-payload-json-schema/default-400-response.png
create mode 100644 public/images/tutorials/validate-requests-payload-json-schema/multiple-json-schemas-rule.png
create mode 100644 public/images/tutorials/validate-requests-payload-json-schema/new-sign-up-data-bucket.png
create mode 100644 public/images/tutorials/validate-requests-payload-json-schema/sign-up-json-schema-assistant.png
create mode 100644 public/images/tutorials/validate-requests-payload-json-schema/success-201-response.png
create mode 100644 public/images/tutorials/validate-requests-payload-json-schema/validate-payload-rule.png
create mode 100644 public/images/tutorials/validate-requests-payload-json-schema/validate-query-parameters-rule.png
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 42c27412..34139fb4 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -81,7 +81,6 @@ Some screenshots still need to be created manually:
Some screenshots are not changing between versions:
- `/docs/latest/route-responses/dynamic-rules/`: the rules order schema
-- `/docs/latest/mockoon-data-files/data-storage-location/`: the "old system" screenshot
> Both are located in the `images/docs/shared` folder.
diff --git a/components/footer.tsx b/components/footer.tsx
index 1b27b80b..06a6527c 100644
--- a/components/footer.tsx
+++ b/components/footer.tsx
@@ -145,7 +145,7 @@ const Footer: FunctionComponent<{
{/* Do not use , as routes with a dot inside get rewritten without trailing slash */}
-
+
Releases
diff --git a/components/markdown.tsx b/components/markdown.tsx
index 5ec4b58d..d4c8639a 100644
--- a/components/markdown.tsx
+++ b/components/markdown.tsx
@@ -122,7 +122,7 @@ const Markdown: FunctionComponent<{
src={src as string}
width={width}
height={height}
- className={`img-fluid mx-auto d-block img-shadow mt-8 ${
+ className={`img-fluid mx-auto d-block img-shadow mt-6 ${
hasSub ? 'mb-2' : 'mb-8'
} rounded`}
/>
diff --git a/components/nav.tsx b/components/nav.tsx
index 26cee110..44caf4c3 100644
--- a/components/nav.tsx
+++ b/components/nav.tsx
@@ -320,7 +320,7 @@ const Nav: FunctionComponent = function () {
Blog
🛠️ We created an online tool to help you [**validate your JSON Schema**](/tools/json-schema-validator/) before using it in Mockoon.
diff --git a/content/docs/latest/mockoon-cloud/api-mock-cloud-deployments.md b/content/docs/latest/mockoon-cloud/api-mock-cloud-deployments.md
index 034f9778..702c30fe 100644
--- a/content/docs/latest/mockoon-cloud/api-mock-cloud-deployments.md
+++ b/content/docs/latest/mockoon-cloud/api-mock-cloud-deployments.md
@@ -18,28 +18,31 @@ order: 901
You can **deploy an environment** to the cloud using the context menu in the local or cloud environments list and selecting **"Deploy to the cloud"**:
-![context menus to deploy cloud environments{513x507}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-menu.png)
+![context menus to deploy cloud environments{513x507}](docs-img:deploy-environment-menu.png)
-In the deployment dialog, you can further customize the deployment by selecting the **visibility** of the environment:
+In the deployment dialog, you can further customize your instance:
-- **Public**: The environment will be accessible to anyone with the URL.
-- **Private**: The environment will be accessible only to users with the URL and the **API key**.
+- **Subdomain**: The default subdomain is generated automatically, but you can customize it to a unique value. The subdomain will be part of the instance URL (e.g. `https://{subdomain}.serverid.mockoon.app`).
+- **Visibility**:
+ - **Public**: The environment will be accessible to anyone with the URL.
+ - **Private**: The environment will be accessible only to users with the URL and the **API key** (see [Instance URL and visibility](#instance-url-and-visibility) below).
+- **Enable/disable the admin API**: Enable/disable the [admin API](docs:admin-api/overview) available on a running mock on the `/mockoon-admin` endpoint.
-![deployment dialog{800x225}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-dialog.png)
+![deployment dialog{799x267}](docs-img:deploy-environment-dialog.png)
After clicking the **"Deploy"** button, the environment will be uploaded to the cloud and will be accessible using the provided URL. In the management dialog, you can find the URL and the API key to access the environment. You can also re-deploy the environment or delete the instance:
-![deployment management dialog{799x205}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-dialog.png)
+![deployment management dialog{799x205}](docs-img:deploy-environment-management-dialog.png)
### Re-deploy or delete a cloud instance
In the management dialog, you can **re-deploy** the environment or **delete** the instance using the menu:
-![deployment management dialog re-deploy or delete the instance menu{902x235}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-menu.png)
+![deployment management dialog re-deploy or delete the instance menu{902x235}](docs-img:deploy-environment-management-menu.png)
## Instance URL and visibility
-The instance will be deployed on a shared cloud infrastructure and will be accessible using a unique URL in the form of `https://mock-abcd1234.serverid.mockoon.app`. The URL will be displayed in the management dialog and can be shared with your team, clients, or class.
+The instance will be deployed on a shared cloud infrastructure and will be accessible using a unique URL in the form of `https://mock-abcd1234.serverid.mockoon.app`. The URL will be displayed in the management dialog and can be shared with your team, clients, or class. You can also customize the subdomain part of the URL when deploying the environment.
The visibility of the environment can be set to **public** or **private**. Here are the differences between the two:
diff --git a/content/docs/latest/mockoon-cloud/data-synchronization-team-collaboration.md b/content/docs/latest/mockoon-cloud/data-synchronization-team-collaboration.md
index 4d0fbcc8..5db23392 100644
--- a/content/docs/latest/mockoon-cloud/data-synchronization-team-collaboration.md
+++ b/content/docs/latest/mockoon-cloud/data-synchronization-team-collaboration.md
@@ -14,11 +14,11 @@ order: 902
## Cloud vs local environments
-The **local environment** is the default environment in Mockoon. It is [stored on your local machine](docs:mockoon-data-files/data-storage-location) and not synchronized with the cloud.
+The **local environment** is the default environment in Mockoon. It is [stored on your local machine](docs:mockoon-data-files/data-files-location) and not synchronized with the cloud.
**Cloud environments** are stored on our servers, and a local copy is kept on each client's machine. You can easily **create a cloud copy** of your local environment or **convert an existing cloud environment** back to a local environment.
-![Cloud and local environments menus{200x231}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png)
+![Cloud and local environments menus{200x231}](docs-img:cloud-sync-menu.png)
## Managing your cloud environments
@@ -26,7 +26,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
There are multiple ways to **create a cloud environment**. You can use the context menu in the local environments list to create a cloud environment from a local one using "Duplicate to the cloud" or create a new cloud environment from scratch using "New cloud environment" from the cloud environments menu.
-![context menus to create cloud environments{569x492}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png)
+![context menus to create cloud environments{569x492}](docs-img:create-cloud-environment.png)
The new cloud environment will be created and synchronized with the cloud, together with a local copy. It will be available on all your devices (solo plan) and for all your team members (team/enterprise plans) once they connect to the cloud.
@@ -34,7 +34,7 @@ The new cloud environment will be created and synchronized with the cloud, toget
You can **remove an environment** from the cloud using the context menu in the cloud environments list and selecting "Convert to local" or "Delete from cloud":
-![context menu to convert a cloud environment to local{533x277}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png)
+![context menu to convert a cloud environment to local{533x277}](docs-img:convert-cloud-to-local.png)
After converting an environment to local, it will be **permanently removed from the cloud** and **converted to a local environment** on all your devices (solo plan) and for all your team members (team/enterprise plans).
@@ -54,7 +54,7 @@ However, some parts of the environment definition cannot be edited simultaneousl
**Presence indicators** are displayed in the application to show who is currently **connected** and **editing** an environment. They are visible in the cloud environments list, indicating if a user is editing an environment (left side of the image). Additionally, presence indicators are shown at the top of the application, displaying the users currently connected to the cloud space (right side of the image).
-![Presence indicators{668x157}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/presence-indicators.png)
+![Presence indicators{668x157}](docs-img:presence-indicators.png)
> 💡 You can customize your display name in the [application settings](/account/info/) to make it easier for your team members to identify you.
@@ -64,7 +64,7 @@ Mockoon's synchronization and collaboration features are primarily designed to w
When you are offline, a warning is shown in the cloud environments list:
-![#sub#Warning shown when the application is offline{391x209}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png)
+![#sub#Warning shown when the application is offline{391x209}](docs-img:offline-editing-warning.png)
When you modify an environment while being offline and go back online, three scenarios can happen:
@@ -72,7 +72,7 @@ When you modify an environment while being offline and go back online, three sce
- **You did not make local changes**, but **the cloud version was modified**: the cloud version will be pulled automatically to your local environment.
- **You made local changes**, and **the cloud version was modified**: you will be prompted to **choose** between **keeping** your local changes or **discarding** them.
-![#sub#Dialog shown when the application detected a conflict{504x241}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png)
+![#sub#Dialog shown when the application detected a conflict{504x241}](docs-img:offline-conflict-warning.png)
> ⚠️ If multiple users edit the same environment while offline, **only one version of the environment will be kept** and the others will be discarded.
@@ -80,9 +80,9 @@ When you modify an environment while being offline and go back online, three sce
If you are disconnected from the cloud, the application will display a warning in the cloud environments list in the form of a orange or red cloud icon. Hovering over the icon will display the reason for the disconnection (e.g. incompatible version, etc.). You can also click on the icon to try to reconnect:
-![#sub#Tooltip showing a regular disconnection{287x219}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png)
+![#sub#Tooltip showing a regular disconnection{287x219}](docs-img:offline-reason-disconnected.png)
-![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png)
+![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](docs-img:offline-reason-incompatible-version.png)
## Major versions migrations
diff --git a/content/docs/latest/mockoon-data-files/data-files-location.md b/content/docs/latest/mockoon-data-files/data-files-location.md
new file mode 100644
index 00000000..8edf4b36
--- /dev/null
+++ b/content/docs/latest/mockoon-data-files/data-files-location.md
@@ -0,0 +1,42 @@
+---
+title: Data files
+meta:
+ title: Data files
+ description: Learn where Mockoon's data storage files and application settings are located and how to move them to other folders
+order: 1100
+---
+
+# Data files
+
+---
+
+Mockoon desktop stores each mock API's data in a separate file. These files contain all the information about the environment, routes, and responses. They are stored in a JSON format and can be easily [shared](docs:mockoon-data-files/sharing-mock-api-files) with other Mockoon users, [used with the CLI](https://github.com/mockoon/mockoon/blob/main/packages/cli/README.md#use-your-mockoon-environment-file), or stored in a git repository.
+
+## Data files schema
+
+Each environment file contains information about the environment, routes, and responses. They are stored in a JSON format following a schema and are validated every time you open an environment. This schema is available in the [repository](https://github.com/mockoon/mockoon/blob/main/packages/commons/src/constants/environment-schema.constants.ts).
+
+## Locating the mock API files
+
+You can locate the folder in which the API data are stored by right-clicking on each environment and selecting **"Show data file in explorer/finder"**:
+
+![click on show in folder in the context menu{551x380}](docs-img:environment-show-in-folder.png)
+
+## Moving the files
+
+You can move the data files to another folder by right-clicking on an environment and selecting **"Move data file to folder"**:
+
+![click on Move data file to folder in folder in the context menu{551x411}](docs-img:environment-move-to-folder.png)
+
+> 💡 Please note that the environment file will be copied to the new folder, and the original file will **not** be deleted. If you want to delete the original file, you will have to do it manually.
+
+## Enabling data file watching
+
+Mockoon can monitor data files' external changes and automatically reload the interface with the new information. This is particularly useful when you are editing the data files with an external editor or pulling changes from a git repository. You can activate this option in the settings:
+
+![enable file monitoring in the settings{860x812}](docs-img:enable-file-watching.png)
+
+## Cloud environments
+
+If you are a Mockoon Cloud user, you can also create cloud environments that are stored in the cloud and synchronized across all your devices. It also allows you to collaborate in real-time with your team members.
+You can learn more about this feature in the [dedicated documentation](/docs/latest/mockoon-cloud/data-synchronization-team-collaboration/).
diff --git a/content/docs/latest/mockoon-data-files/settings-and-logs.md b/content/docs/latest/mockoon-data-files/settings-and-logs.md
index 3442a4e2..fc989e52 100644
--- a/content/docs/latest/mockoon-data-files/settings-and-logs.md
+++ b/content/docs/latest/mockoon-data-files/settings-and-logs.md
@@ -10,7 +10,7 @@ order: 1130
---
-Depending on your operating system, Mockoon's settings and log files are located in different folders.
+Depending on your operating system, Mockoon's desktop application settings and log files are located in different folders.
## Application settings
diff --git a/content/docs/latest/mockoon-data-files/sharing-mock-api-files.md b/content/docs/latest/mockoon-data-files/sharing-mock-api-files.md
index 180c03d5..e34fff30 100644
--- a/content/docs/latest/mockoon-data-files/sharing-mock-api-files.md
+++ b/content/docs/latest/mockoon-data-files/sharing-mock-api-files.md
@@ -12,19 +12,47 @@ order: 1110
> ☁️ **Data synchronization and team collaboration** are available as part of our [Mockoon Cloud subscription](/cloud/). It allows you to share your environments with your team and collaborate in real-time.
-### Sharing a mock API
+## Sharing a mock API
-Each file can be easily shared with other Mockoon's users, "as-is". After [locating your environment file](docs:mockoon-data-files/data-storage-location#locating-the-files), you can share it with your coworkers by using Git for example. You coworkers can then save the file in any folder and open it directly using the "Open environment" button:
+Each file can be easily shared with other Mockoon's users, "as-is". After [locating your environment file](docs:mockoon-data-files/data-files-location#locating-the-files), you can share it with your coworkers by using Git for example. You coworkers can then save the file in any folder and open it directly using the "Open environment" button:
![open an environment{625x299}](docs-img:open-environment.png)
-### Use a Git-tracked folder
+## Use a Git-tracked folder
You can save your environment data files in a Git-tracked folder to make sharing easier. By default, an environment file JSON content is saved pretty-printed to allow comparing changes between two commits.
You can disable pretty printing in the settings:
![disable pretty printing{860x812}](docs-img:storage-pretty-printing.png)
-### Use a mock API with the CLI
+## Use a mock API with the CLI
The CLI is directly [compatible with environment files](https://github.com/mockoon/mockoon/blob/main/packages/cli/README.md#use-your-mockoon-environment-file). After locating your environment file, you run them with the CLI using the following command: `mockoon-cli start -d ./path-to-file/environment-data-file.json`.
+
+## Share JSON setups using the clipboard
+
+Mockoon allows you to easily copy an environment or a route's JSON configuration to the clipboard and create a new environment or route from the clipboard's data.
+
+### Copy an environment or a route JSON to the clipboard
+
+To copy a specific environment or route's JSON data to the clipboard, right-click on the environment or route and select **Copy to clipboard (JSON)**:
+
+![Right click on an environment and click on Copy to clipboard (JSON){751x399}](docs-img:export-clipboard-env.png)
+
+The resulting JSON can be saved in a file and directly opened in the desktop app or used with the CLI.
+
+### Create a new environment from clipboard's data
+
+To create a new environment from data present in the clipboard, open the **File** menu and select **New environment from clipboard**:
+
+![Create new environment from clipboard{802x289}](/images/docs/shared/new-environment-from-clipboard.png)
+
+You will be prompted to choose a save location for your new environment.
+
+### Create a new route from clipboard's data
+
+To create a new route from data present in the clipboard, open the **Routes** menu and select **Add route from clipboard**:
+
+![Create new route from clipboard{802x289}](/images/docs/shared/new-route-from-clipboard.png)
+
+The new route will be added to your active environment's routes.
diff --git a/content/docs/latest/response-configuration/file-serving.md b/content/docs/latest/response-configuration/file-serving.md
index 49e396de..f7b212c4 100644
--- a/content/docs/latest/response-configuration/file-serving.md
+++ b/content/docs/latest/response-configuration/file-serving.md
@@ -22,11 +22,11 @@ To serve a file, you must provide a path in the file input field:
## Absolute or relative paths
-You can either provide an absolute path like `/home/username/file.json` or a relative path. Starting with [v1.16.0](https://github.com/mockoon/mockoon/releases/tag/v1.16.0), relative paths are resolved from the environment's file location. You can check the environment's file location by right-clicking on an environment en select "Show in folder" in the contextual menu:
+You can either provide an absolute path like `/home/username/file.json` or a relative path. Relative paths are resolved from the environment's file location. You can check the environment's file location by right-clicking on an environment en select "Show in folder" in the contextual menu:
![show in folder menu entry{551x380}](docs-img:environment-show-in-folder.png)
-> 💡 Prior to v1.16.0, relative file paths were resolved from the application executable. This is also supported by the CLI since its version [1.2.0](https://github.com/mockoon/cli/releases/tag/v1.2.0).
+> 💡 Relative file paths resolving is also supported by the CLI.
## Templating
diff --git a/content/docs/latest/response-configuration/response-body.md b/content/docs/latest/response-configuration/response-body.md
index 8c7a999f..81a151c5 100644
--- a/content/docs/latest/response-configuration/response-body.md
+++ b/content/docs/latest/response-configuration/response-body.md
@@ -22,7 +22,7 @@ You can use the body editor to directly create your response content. It support
![inline body editor{1254x800}](docs-img:inline-body-editor.png)
-> Mockoon will save the content of the inline body editor directly in your [data file](docs:mockoon-data-files/data-storage-location).
+> Mockoon will save the content of the inline body editor directly in your [data file](docs:mockoon-data-files/data-files-location).
> Using an external file could improve the performance for large content.
## External file
diff --git a/content/docs/latest/route-responses/dynamic-rules.md b/content/docs/latest/route-responses/dynamic-rules.md
index f1096997..072fafd6 100644
--- a/content/docs/latest/route-responses/dynamic-rules.md
+++ b/content/docs/latest/route-responses/dynamic-rules.md
@@ -56,8 +56,8 @@ Rules have five parts:
In the dropdown menu you can choose between:
-- the **request body** value (full raw content or one of its properties if request's `Content-Type` is either `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`).
-- the value of a **request's query parameter**.
+- the **request body** parsed content if the request's `Content-Type` is one of the supported formats (see the [supported requests body formats](docs:requests/supported-body-formats) documentation for more information), or the body as a strnig otherwise.
+- the value of the **request's query parameters** object (see the [query parameters](docs:requests/query-parameters) documentation for more information on how query parameters are parsed).
- the value of a **request header**.
- the value of a **request cookie**.
- the value of a [**route parameter**](docs:api-endpoints/routing#route-parameters).
@@ -75,13 +75,13 @@ In the dropdown menu you can choose between:
This field supports [templating helpers](docs:templating/overview) to dynamically target a specific body property, header name, etc. Depending on the **target**, the way to access properties may be different:
- **request body**:
- - keep empty to match against the full raw body content.
+ - keep empty to match against the full parsed body if the request's `Content-Type` is one of the supported formats (see the [supported requests body formats](docs:requests/supported-body-formats) documentation for more information), or the body as a string otherwise.
- use a path to access one of its properties. Two syntaxes are supported, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
Fetching object properties is compatible with request's bodies of `Content-Type` `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`.
_Please note that XML bodies are parsed using [xml-js](https://www.npmjs.com/package/xml-js) package. Refer to this [page](docs:requests/supported-body-formats#xml-support) or the package documentation for more information on how the XML is parsed and how to fetch specific properties._
_Please also note that `multipart/form-data` only supports fields. Uploaded files will be ignored._
> 📘 Check the [supported requests body formats](docs:requests/supported-body-formats) documentation for more information on how the request body is parsed.
-- **query parameter**: either provide a property name like `filter` or a path if the query parameter is an object `filter.primary`.
+- **query parameter**: keep empty for comparisons against the full query parameters object, or provide a property name like `filter` or a path if the query parameter is an object `filter.primary`.
> 📘 Check the [query parameters](docs:requests/query-parameters) documentation for more information on how they are parsed.
- **headers**: a header name like `Accept` or `Content-Type`.
- **cookies**: the cookie name like `Session-id`.
@@ -140,4 +140,6 @@ The **request number** supports simple entries like `1` or `2` but also regexes,
#### JSON schemas
-The only exception is the **valid JSON schema** comparison operator. In this case, the **value** must point to a data bucket containing a valid JSON schema. The schema will be used to validate the targeted property using [ajv](https://www.npmjs.com/package/ajv). In this case, the **value** field supports the [object-path](https://www.npmjs.com/package/object-path) syntax to access the schema stored in a data bucket. Examples: `bucketNameOrId`, `bucketNameOrId.propertyName`, etc. The [data bucket documentation](docs:data-buckets/using-data-buckets#storing-json-schemas) provides more information on how to create and use JSON schemas.
+The only exception is the **valid JSON schema** comparison operator. In this case, the **value** must point to a data bucket containing a valid JSON schema. The schema will be used to validate the targeted property using [ajv](https://www.npmjs.com/package/ajv). In this case, the **value** field supports the [object-path](https://www.npmjs.com/package/object-path) syntax to access the schema stored in a data bucket or one of its properties. Examples: `bucketNameOrId`, `bucketNameOrId.schema`, etc. The [data bucket documentation](docs:data-buckets/using-data-buckets#storing-json-schemas) provides more information on how to create and use JSON schemas.
+
+> 🛠️ We created an online tool to help you [**validate your JSON Schema**](/tools/json-schema-validator/) before using it in Mockoon.
diff --git a/content/docs/latest/templating/mockoon-helpers.md b/content/docs/latest/templating/mockoon-helpers.md
index 5f288f94..0adc17c6 100644
--- a/content/docs/latest/templating/mockoon-helpers.md
+++ b/content/docs/latest/templating/mockoon-helpers.md
@@ -18,15 +18,15 @@ In addition to Handlebars' built-in helpers (`if`, `each`, etc., for more inform
| [`switch`](#switch) | [`dataRaw`](#dataraw) |
| | [`setData`](#setdata) |
-| Arrays | | Objects |
-| ------------------- | --------------------- | ------------------- |
-| [`array`](#array) | [`sort`](#sort) | [`object`](#object) |
-| [`oneOf`](#oneof) | [`sortBy`](#sortby) | |
-| [`someOf`](#someof) | [`reverse`](#reverse) | |
-| [`join`](#join) | | |
-| [`slice`](#slice) | | |
-| [`len`](#len) | | |
-| [`filter`](#filter) | | |
+| Arrays | | Objects |
+| ------------------- | --------------------- | ----------------------------- |
+| [`array`](#array) | [`sort`](#sort) | [`object`](#object) |
+| [`oneOf`](#oneof) | [`sortBy`](#sortby) | [`objectMerge`](#objectmerge) |
+| [`someOf`](#someof) | [`reverse`](#reverse) | |
+| [`join`](#join) | [`concat`](#concat) | |
+| [`slice`](#slice) | | |
+| [`len`](#len) | | |
+| [`filter`](#filter) | | |
| Math | |
| ----------------------- | --------------------- |
@@ -178,23 +178,28 @@ Set or modify the value at a given path in a [data bucket](docs:data-buckets/ove
- The full data bucket content (array, object, etc.) can be modified when the `path` is omitted (`{{setData 'operation' 'ID' '' 'value'}}`).
- Available operations are `set`, `push`, `del`, `inc`, `dec`, and `invert`:
- `set`: Set a new value at the root level (path omitted) or at the specified path. Requires a new value.
+ - `merge`: If the value at the specified path is an object, merge the new value with the existing one. Requires a new value of type object.
- `push`: Push a new value to an array at the root level (path omitted) or at the specified path. Requires a new value and the target to be an array.
- `del`: Delete a value at the root level (path omitted) or at the specified path. No new value required.
- `inc`: Increment a number at the root level (path omitted) or at the specified path. Requires a number to increment by. If the value is omitted, the increment will be by 1.
- `dec`: Decrement a number at the root level (path omitted) or at the specified path. Requires a number to decrement by. If the value is omitted, the decrement will be by 1.
- `invert`: Invert a boolean at the root level (path omitted) or at the specified path. No new value required.
-| Arguments (ordered) | Type | Description |
-| ------------------- | ------ | ------------------------------------------------------------------- |
-| 0 | string | Operation to perform (`set`, `push`, `del`, `inc`, `dec`, `invert`) |
-| 1 | string | ID or name of the data bucket |
-| 2 | string | Path to the data bucket property (optional) |
-| 3 | any | New value (optional for `invert`, `inc`, `dec` and `del`) |
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | ---------------------------------------------------------------------------- |
+| 0 | string | Operation to perform (`set`, `merge`, `push`, `del`, `inc`, `dec`, `invert`) |
+| 1 | string | ID or name of the data bucket |
+| 2 | string | Path to the data bucket property (optional) |
+| 3 | any | New value (optional for `invert`, `inc`, `dec` and `del`) |
**Examples**
```handlebars
{{setData 'set' 'bucketNameOrId' 'path.to.property' 'newValue'}}
+
+{{setData 'merge' 'bucketNameOrId' 'path.to.property' (object key='value')}}
+
+{{setData 'merge' 'bucketNameOrId' 'path.to.property' (bodyRaw)}}
{{setData 'push' 'bucketNameOrId' 'path.to.array' 'newValue'}}
{{setData 'del' 'bucketNameOrId' 'path.to.property'}}
{{setData 'inc' 'bucketNameOrId' 'path.to.property' 2}}
@@ -403,6 +408,24 @@ result: {type: [1,2,3]}
result: {type: [1,3]}
```
+## objectMerge
+
+Merge two objects. The second object's properties will overwrite the first object's properties if they have the same key.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | -------- | ---------------- |
+| 0..n | object[] | Objects to merge |
+
+**Examples**
+
+```handlebars
+{{objectMerge (object key1='value1') (object key2='value2')}}
+
+
+
+{{objectMerge (object id=uuid) (bodyRaw)}}
+```
+
## sort
Return a sorted array of strings or numbers. To sort array of objects, use the [sortBy](#sortby) helper.
@@ -952,11 +975,12 @@ result: test
## concat
-Concatenate multiple strings/numbers together. This helper can concatenate results from other helpers, or be used as a parameter of another helper (see examples below).
+Concatenate multiple primitive values into a single string, or multiple arrays into a single array.
+This helper can concatenate results from other helpers, or be used as a parameter of another helper (see examples below).
-| Arguments (ordered) | Type | Description |
-| ------------------- | ---- | --------------------- |
-| 0..n | any | Values to concatenate |
+| Arguments (ordered) | Type | Description |
+| ------------------- | ---- | ------------------------------- |
+| 0..n | any | Values or arrays to concatenate |
**Examples**
@@ -964,6 +988,8 @@ Concatenate multiple strings/numbers together. This helper can concatenate resul
{{concat 'value1' 2 'value3'}}
{{concat @index (body 'id') 'value3'}}
{{#repeat (concat 1 2 3)}}...{{/repeat}}
+{{concat (array 1 2) (bodyRaw 'list')}}
+{{#each (concat (array 1 2) (array 3 4))}}...{{/each}}
```
## indexOf
diff --git a/content/docs/v6.2.0/about.md b/content/docs/v6.2.0/about.md
deleted file mode 100644
index f69ba4f7..00000000
--- a/content/docs/v6.2.0/about.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: About the documentation
-meta:
- title: Learn about Mockoon's documentation
- description: Discover Mockoon's features and options, explore advanced topics and learn how to create fast and free mock API JSON servers.
-order: 10
----
-
-# About the documentation
-
----
-
-This documentation covers Mockoon's most used features and options to help you create the best mock APIs. These topics apply to the [desktop application](/download/), [CLI](/cli/), and [serverless package](/serverless/) which supports the same features.
-We maintain a documentation for the five latest desktop versions. Head over to our [releases section](/releases/) for more details about the changes in each version.
-
-If you find a mistake in the documentation, you can open an issue on the [website's repository](https://github.com/mockoon/mockoon.com).
-
-## CLI documentation
-
-You will find the [CLI documentation](https://github.com/mockoon/mockoon/blob/main/packages/cli/README.md) in its dedicated readme file on the repository. It covers the CLI's specific features, like the available flags or how to use the Docker file.
-
-## Serverless documentation
-
-You will find the [serverless package documentation](https://github.com/mockoon/mockoon/blob/main/packages/serverless/README.md) in its dedicated readme file on the repository. It covers the package usage instructions and specific features.
diff --git a/content/docs/v6.2.0/api-endpoints/templates-and-ai-assistant.md b/content/docs/v6.2.0/api-endpoints/templates-and-ai-assistant.md
deleted file mode 100644
index a6e0f861..00000000
--- a/content/docs/v6.2.0/api-endpoints/templates-and-ai-assistant.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-title: Templates and AI assistant
-meta:
- title: Mockoon templates and AI assistant documentation
- description: All you need to know about Mockoon's mock API ready to use JSON templates and AI assistant to generate your own dynamic and realistic templates.
-order: 220
----
-
-# Templates and AI assistant
-
----
-
-## Overview
-
-Mockoon **templates** are pieces of JSON, often with [templating helpers](docs:templating/overview), that can be used in Mockoon to quickly prototype your mock APIs. They can be used in your [HTTP route's](docs:api-endpoints/routing#api-routes) body or as [data bucket](docs:data-buckets/overview) content to create realistic and dynamic data.
-
-Two types of templates are available: **pre-generated** and **AI-generated**.
-
-## Use the pre-generated templates
-
-The pre-generated templates can be found in the desktop application.
-
-To use a template in your routes, click on the "From template" entry in the route creation menu to open the templates dialog:
-
-![modal with templates list{390x304}](docs-img:pre-generated-templates-modal.png)
-
-Then, select the template you want to use and either copy-paste its content manually or click on one of the two buttons to create a new **GET endpoint** or a **CRUD endpoint with a data bucket**.
-
-![create get route from template{860x801}](docs-img:templates-create-get-route.png)
-
-The "GET route" button will create a new HTTP GET route and copy the template content as the body. The "CRUD + data" button will create a new CRUD endpoint with a linked data bucket and copy the template content as the data bucket content.
-
-> Some templates are offered for free, while most of them require a subscription to [Mockoon Cloud](/cloud/). The templates part of the Cloud plans are marked with a small yellow corner.
-
-## Use the AI assistant to generate realistic data
-
-You can also use our AI assistant to generate realistic mock data for your various endpoints by providing a custom prompt. This feature is available in the desktop application and is part of the [Mockoon Cloud](/cloud/) plans.
-
-To generate a new template, click the "From template" button in the route creation menu (see above), and select the "Generate" tab:
-
-![AI assistant generate tab{860x801}](docs-img:ai-assistant-generate-template-tab.png)
-
-Then, write a prompt (e.g. "list of users") and click the "Generate" button.
-
-![AI assistant generate button click{860x801}](docs-img:ai-assistant-generate-button.png)
-
-Finally, you can copy-paste the generated template manually or click on one of the two buttons to create a new **GET endpoint** or a **CRUD endpoint with a data bucket**.
-
-![create get route from template{860x801}](docs-img:templates-generate-get-route.png)
-
-### Writing prompts
-
-Mockoon AI assistant wraps your prompt with various instructions to help you generate the most relevant template for your needs. It has been optimized for the JSON format but can also generate templates in XML, CSV, etc.
-Several options are available to fine-tune the generated templates:
-
-- **JSON**: the generated template will be a valid JSON object.
-- **array**: the generated template root level will be a JSON array (usually used with the **JSON** option).
-- **templating**: the generated template will contain Handlebars [templating helpers](docs:templating/overview) (e.g. `{{faker 'person.firstName'}}`). Please note that disabling this option usually results in longer templates.
-
-![prompt options buttons{860x801}](docs-img:ai-assistant-template-generate-options.png)
-
-You will obtain best results with shorter prompts: "list of users", "JSON configuration for library X", etc.
-
-If you want more freedom when generating templates (using a different data format, etc.), you can disable the various options. Our system will still manage your prompt to increase the relevance of the generated template.
-
-### AI assistant quota
-
-Each use of the AI assistant will count as one credit towards your monthly quota. You can check your quota in your [account page](https://mockoon.com/account/info/).
diff --git a/content/docs/v6.2.0/data-buckets/using-data-buckets.md b/content/docs/v6.2.0/data-buckets/using-data-buckets.md
deleted file mode 100644
index ef7020da..00000000
--- a/content/docs/v6.2.0/data-buckets/using-data-buckets.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Using data buckets
-meta:
- title: Using data buckets
- description: Learn how to use Mockoon's data buckets, using the two data and dataRaw helpers, or by directly linking the bucket to a route response
-order: 610
----
-
-# Using data buckets
-
----
-
-After [creating data buckets](docs:data-buckets/overview), you can use them through the `data` templating helpers or by directly referencing them in a route response.
-
-## Using data helpers
-
-Two helpers are available: [`data`](docs:templating/mockoon-helpers#data) and [`dataRaw`](docs:templating/mockoon-helpers#dataraw). They work in a similar way to the [`body`](docs:templating/mockoon-request-helpers#body) and [`bodyRaw`](docs:templating/mockoon-request-helpers#bodyraw) helpers.
-
-They can be used [anywhere templating helpers are supported](docs:templating/overview): body editor, files, headers keys and values, etc., and allow you to partially reuse your data bucket content and compose dynamic responses body easily.
-
-Both helpers support retrieving the data bucket by its unique ID or name. It also allows you to retrieve only part of the data bucket using an optional object path:
-
-```handlebars
-{{data 'ID_or_name' 'object.path'}}
-```
-
-> Retrieving data at a specific object path requires that the data bucket content is a valid JSON.
-
-Head over to the [data helpers' documentation](docs:templating/mockoon-helpers#data) to see more examples.
-
-## Referencing in a route response
-
-A data bucket can also be directly linked to a route response. Linking a data bucket will serve the generated data bucket content "as-is".
-
-To link a data bucket to a route response, choose "Data" in the body selector and select your data bucket.
-
-![Using data bucket in a route response{1002x464}](docs-img:link-data-bucket-response.png)
diff --git a/content/docs/v6.2.0/mockoon-data-files/data-storage-location.md b/content/docs/v6.2.0/mockoon-data-files/data-storage-location.md
deleted file mode 100644
index 35d95152..00000000
--- a/content/docs/v6.2.0/mockoon-data-files/data-storage-location.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Data storage location
-meta:
- title: Data storage location
- description: Learn where Mockoon's data storage files and application settings are located and how to move them to other folders
-order: 900
----
-
-# Data storage location
-
----
-
-## Locating the files
-
-Since [v1.16.0](https://github.com/mockoon/mockoon/releases/tag/v1.16.0), Mockoon is storing each mock API's data in a separate file.
-
-You can locate the folder in which the API data are stored by right-clicking on each environment and selecting **"Show data file in explorer/finder"**:
-
-![click on show in folder in the context menu{490x309}](docs-img:environment-show-in-folder.png)
-
-## Moving the files
-
-You can move the data files to another folder by right-clicking on an environment and selecting **"Move data file to folder"**:
-
-![click on Move data file to folder in folder in the context menu{490x340}](docs-img:environment-move-to-folder.png)
-
-> Please note that the environment file will be copied to the new folder, and the original file will **not** be deleted. If you want to delete the original file, you will have to do it manually.
-
-## Enabling data file watching
-
-Mockoon can monitor data files' external changes and automatically reload the interface with the new information. This is particularly useful when you are editing the data files with an external editor or pulling changes from a git repository. You can activate this option in the settings:
-
-![enable file monitoring in the settings{860x812}](docs-img:enable-file-watching.png)
-
-## Old system (pre v1.16.0)
-
-Before version 1.16.0, all of your environments were stored in the same `environments.json` file in the **application data folder**. The file was located in your operating system's user folder:
-
-- Windows: `c:/Users/xxx/AppData/Roaming/mockoon/storage`
-- Linux: `~/.config/mockoon/storage`
-- macOS: `~/Library/Application Support/mockoon/storage`
-
-When updating to version 1.16.0, Mockoon automatically migrated the old `environments.json` file (see below) and split it into as many files as you had environments. These files were created in the same `storage` folder with incremental names: `environment-0.json`, `environment-1.json`, etc.
-
-![one file vs multiple files after the migration{600x252}](/images/docs/shared/storage-migration.png)
-
-> ⚠️ The automatic migration was dropped in [version 5.0.0](/releases/5.0.0/). If you are updating from v1.15.0, please first update to any version between v1.16.0 and v4.1.0, then to v5.0.0.
diff --git a/content/docs/v6.2.0/mockoon-data-files/environment-clipboard-copy.md b/content/docs/v6.2.0/mockoon-data-files/environment-clipboard-copy.md
deleted file mode 100644
index 850e843c..00000000
--- a/content/docs/v6.2.0/mockoon-data-files/environment-clipboard-copy.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: Copy data to the clipboard
-meta:
- title: Copy data to the clipboard
- description: Learn how to easily share your Mockoon's mock API JSON definitions with your team by copying them to the clipboard and importing them in the application
-order: 920
----
-
-# Copy data to the clipboard
-
----
-
-## Copy an environment or a route JSON to the clipboard
-
-To copy a specific environment or route's JSON data to the clipboard, right-click on the environment or route and select **Copy to clipboard (JSON)**:
-
-![Right click on an environment and click on Copy to clipboard (JSON){690x328}](docs-img:export-clipboard-env.png)
-
-The resulting JSON can be saved in a file and directly opened in the desktop app or used with the CLI.
-
-## Create a new environment from clipboard's data
-
-To create a new environment from data present in the clipboard, open the **File** menu and select **New environment from clipboard**:
-
-![Create new environment from clipboard{802x289}](/images/docs/shared/new-environment-from-clipboard.png)
-
-You will be prompted to choose a save location for your new environment.
-
-## Create a new route from clipboard's data
-
-To create a new route from data present in the clipboard, open the **Routes** menu and select **Add route from clipboard**:
-
-![Create new route from clipboard{802x289}](/images/docs/shared/new-environment-from-clipboard.png)
-
-The new route will be added to your active environment's routes.
diff --git a/content/docs/v6.2.0/response-configuration/xml-support.md b/content/docs/v6.2.0/response-configuration/xml-support.md
deleted file mode 100644
index 964babb9..00000000
--- a/content/docs/v6.2.0/response-configuration/xml-support.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: XML support
-meta:
- title: XML support for entering requests
- description: Create realistic mock APIs and generate fake data with Mockoon's templating and rules system supporting the XML format
-order: 430
----
-
-# XML support
-
----
-
-When sending a request containing a valid XML body and an `application/xml` or `text/xml` `Content-Type`, Mockoon will parse the XML and allow you to create [body response rules](docs:route-responses/dynamic-rules) or use the [`body` and `bodyRaw` templating helpers](docs:templating/mockoon-request-helpers#body). Mockoon uses the [**xml-js** NPM package](https://www.npmjs.com/package/xml-js) to convert the entering XML. Please note that the **xml-js** package converts XML into JSON in a particular way, as shown below:
-
-Entering XML body:
-
-```xml
-
-
-John
-Doe
-
-```
-
-JSON equivalent (compacted):
-
-```json
-{
- "_declaration": {
- "_attributes": {
- "version": "1.0",
- "encoding": "utf-8"
- }
- },
- "user": {
- "_attributes": {
- "userID": "123"
- },
- "firstname": {
- "_text": "John"
- },
- "lastname": {
- "_text": "Doe"
- }
- }
-}
-```
-
-> 📘 Please refer to [xml-js documentation](https://www.npmjs.com/package/xml-js) for more detail on how the XML is parsed.
-
-> 🛠️ Use our [XML to JSON converter](/tools/xml-to-json/) to get a preview of how Mockoon will convert your XML to JSON. You can also use our [XML validator](/tools/xml-validator/) to make sure your XML is valid.
diff --git a/content/docs/v6.2.0/route-responses/dynamic-rules.md b/content/docs/v6.2.0/route-responses/dynamic-rules.md
deleted file mode 100644
index f5f74bc0..00000000
--- a/content/docs/v6.2.0/route-responses/dynamic-rules.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-title: Responses rules
-meta:
- title: Serve different responses based on rules
- description: Learn how to define multiple route responses for each route and triggered them with rules based on the entering request parameters.
-order: 310
----
-
-# Adding response rules
-
----
-
-After creating [multiple responses](docs:route-responses/multiple-responses) for each route, you can create more complex scenarios and serve the responses depending on the fulfillment of rules.
-
-## Defining rules
-
-You can define an unlimited number of rules for each route. At each request, Mockoon will assert each response's rules and serve the response which contains the first matching rule(s). The rules are interpreted in the order they are declared: `[rule OR|AND rule] OR [rule OR|AND rule]`, the brackets symbolizing each route response.
-
-![Rules interpretation order{455x395}](/images/docs/shared/dynamic-rules-schema.png)
-
-To add a new rule to a response, go to the route response's **Rules tab**, click on "Add rule" and fill the fields:
-
-![Click on add and fill the fields{987x304}](docs-img:add-route-response-rule.png)
-
-### Reordering rules
-
-By default, rules are interpreted in the order you added them. You can change their interpretation order by drag and dropping them:
-
-![Drag and drop rules to reorder them{1195x326}](docs-img:route-response-rule-reorder.png)
-
-### Disabling rules
-
-You can temporarily disable the rules and serve the default response only. To activate this option, click on the "rules" icon next to the response list:
-
-![Disable rules{1220x244}](docs-img:disable-rules.png)
-
-> When this option is active, the default response will be always served and all the rules defined on this route will be ignored. Also, this option cannot be selected in addition to the random or sequential responses.
-
-### Rules logical operator
-
-Inside a route response, rules are interpreted by default with the OR logical operator. When you have more than one rule in a route response, you can easily switch the operator applied when interpreting the rules, by clicking on the `OR|AND` buttons at the left of the rules:
-
-![Choose the rule operator OR AND{982x214}](docs-img:route-response-rules-operator.png)
-
-Rules have four parts:
-
-- a **target**
-- a **property name or path**
-- an **invert operator** toggle
-- a comparison **operator**
-- a **value**
-
-### 1. Target
-
-![Rule target{1007x204}](docs-img:route-response-rules-target.png)
-
-In the dropdown menu you can choose between:
-
-- the **body** value (full raw content or one of its properties if request's `Content-Type` is either `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`).
-- the value of a **query string field**.
-- the value of a **header**.
-- the value of a **cookie**.
-- the value of a **route parameter**.
-- the value of a **global variable**.
-- the **request number** index starting at 1.
-
-### 2. Property name or path
-
-![Rule property{1007x204}](docs-img:route-response-rules-property.png)
-
-Depending on the **target**, the way to access properties may be different:
-
-- **body**:
- - keep empty to match against the full raw body content.
- - use a path to access one of its properties. Two syntaxes are supported, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
- Fetching object properties is compatible with request's bodies of `Content-Type` `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`.
- _Please note that XML bodies are parsed using [xml-js](https://www.npmjs.com/package/xml-js) package. Refer to this [page](docs:response-configuration/xml-support) or the package documentation for more information on how the XML is parsed and how to fetch specific properties._
- _Please also note that `multipart/form-data` only supports fields. Uploaded files will be ignored._
-- **query string**: either provide a property name like `filter` or a path if the query string field is an object `filter.primary`.
-- **headers**: a header name like `Accept` or `Content-Type`.
-- **cookies**: the cookie name like `Session-id`.
-- **route param**: a route param name without the colon (":"), `:userId` becoming `userId`.
-- **global variable**: a [global variable](docs:global-variables/overview) name like `myVar`. You can use a path to access one of its properties if the variable is storing arrays or objects. Two syntaxes are supported, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`. Examples: `myVar.property.subProperty`, `myVar.property.0.subProperty` or `$.myVar.property`.
-- **request number**: _nothing has to be provided here for the request number_.
-
-For **body** and **query string**, if the property is an array, Mockoon will automatically check in the array if at least one item matches the value.
-
-### 3. Invert operator
-
-You can invert the **comparison operator** (**!** equals, **!** regex match, etc.) by toggling on the exclamation mark button:
-
-![Rule comparison operator{1007x204}](docs-img:route-response-rules-invert-operator.png)
-
-### 4. Comparison operator
-
-![Rule comparison operator{1007x204}](docs-img:route-response-rules-comparison-operator.png)
-
-Multiple comparison operators are available in each rule:
-
-- **equals**: asserts that the targeted property is equal to the **value**.
-- **regex match**: asserts that the targeted property matches the regex **value**.
-- **null**: asserts that the targeted property is null or absent (for **headers** or **cookies**).
-- **empty array**: asserts that the targeted property is an empty array.
-
-### 5. Value
-
-![Rule value{1007x204}](docs-img:route-response-rules-value.png)
-
-Depending on the comparison operator chosen, **equals** or **regex match**, you can either set a simple text value like "expected value" or any kind of regex. To use a regex, you must write it without the leading and trailing slashes.
-
-Regex examples:
-`primary|secondary`, `^user1-9`, `UTF-.*`.
-You can also test for empty values with the following regex: `^$|\s+`.
-
-The **request number** supports simple entries like `1` or `2` but also regexes, allowing you to return a different response for the first 3 calls `^[1-3]$` or failing on odd request indexes `[13579]$`.
-
-> 💡 The response rule values also support templating helpers to create dynamic rules. See the [templating helpers](docs:templating/overview) documentation for more information.
diff --git a/content/docs/v6.2.0/server-configuration/serving-over-tls.md b/content/docs/v6.2.0/server-configuration/serving-over-tls.md
deleted file mode 100644
index 52fcf79e..00000000
--- a/content/docs/v6.2.0/server-configuration/serving-over-tls.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: TLS
-meta:
- title: Serve a mock API over TLS
- description: Need to mock a secured REST API server? Mockoon can also do this by serving over TLS with a self-signed certificate
-order: 120
----
-
-# TLS
-
----
-
-Mockoon supports serving your mock API over TLS with a self-signed certificate by default. You can also provide your certificate and trusted CA certificates.
-
-## Activate the TLS option
-
-You can activate the TLSoption for each environment independently. Open the **Environment Settings** by clicking on the tab at the top of the window:
-
-![click on the settings tab{1148x160}](docs-img:open-environment-settings.png)
-
-Enable the **TLS option** by ticking the checkbox. The option was successfully activated if a yellow lock is displayed next to the environment name.
-
-![tick the TLS checkbox{804x343}](docs-img:enable-tls.png)
-
-> You may need to restart your environment for the change to take effect.
-
-Your mock API will now be available on `https://localhost:port` instead of `http://localhost:port`.
-
-Please note that Mockoon is using a self-signed certificate to serve your environment over TLS.
-
-## Provide your own certificate
-
-You can also provide your certificate in both PKCS12 or PEM formats by filling out the input fields with the path to the file(s).
-
-![add certificate path{1264x612}](docs-img:enable-tls-custom-certificate.png)
-
-Mockoon also supports passphrase-protected keys and custom-trusted CA certificates. As Mockoon is using Node.js' `tls`, you can refer to the [`tls.createSecureContext()` documentation](https://nodejs.org/dist/latest-v16.x/docs/api/tls.html#tlscreatesecurecontextoptions) for a full description of the available options.
-
-> All the path fields support both absolute and relative paths. Relative paths are resolved from the environment's file location.
diff --git a/content/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration.md b/content/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration.md
index cd2568b5..52f77026 100644
--- a/content/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration.md
+++ b/content/docs/v8.0.0/mockoon-cloud/data-synchronization-team-collaboration.md
@@ -18,7 +18,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
**Cloud environments** are stored on our servers, and a local copy is kept on each client's machine. You can easily **create a cloud copy** of your local environment or **convert an existing cloud environment** back to a local environment.
-![Cloud and local environments menus{200x231}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png)
+![Cloud and local environments menus{200x231}](docs-img:cloud-sync-menu.png)
## Managing your cloud environments
@@ -26,7 +26,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
There are multiple ways to **create a cloud environment**. You can use the context menu in the local environments list to create a cloud environment from a local one using "Duplicate to the cloud" or create a new cloud environment from scratch using "New cloud environment" from the cloud environments menu.
-![context menus to create cloud environments{569x492}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png)
+![context menus to create cloud environments{569x492}](docs-img:create-cloud-environment.png)
The new cloud environment will be created and synchronized with the cloud, together with a local copy. It will be available on all your devices (solo plan) and for all your team members (team/enterprise plans) once they connect to the cloud.
@@ -34,7 +34,7 @@ The new cloud environment will be created and synchronized with the cloud, toget
You can **remove an environment** from the cloud using the context menu in the cloud environments list and selecting "Convert to local" or "Delete from cloud":
-![context menu to convert a cloud environment to local{533x277}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png)
+![context menu to convert a cloud environment to local{533x277}](docs-img:convert-cloud-to-local.png)
After converting an environment to local, it will be **permanently removed from the cloud** and **converted to a local environment** on all your devices (solo plan) and for all your team members (team/enterprise plans).
@@ -58,7 +58,7 @@ Mockoon's synchronization and collaboration features are primarily designed to w
When you are offline, a warning is shown in the cloud environments list:
-![#sub#Warning shown when the application is offline{391x209}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png)
+![#sub#Warning shown when the application is offline{391x209}](docs-img:offline-editing-warning.png)
When you modify an environment while being offline and go back online, three scenarios can happen:
@@ -66,7 +66,7 @@ When you modify an environment while being offline and go back online, three sce
- **You did not make local changes**, but **the cloud version was modified**: the cloud version will be pulled automatically to your local environment.
- **You made local changes**, and **the cloud version was modified**: you will be prompted to **choose** between **keeping** your local changes or **discarding** them.
-![#sub#Dialog shown when the application detected a conflict{504x241}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png)
+![#sub#Dialog shown when the application detected a conflict{504x241}](docs-img:offline-conflict-warning.png)
> ⚠️ If multiple users edit the same environment while offline, **only one version of the environment will be kept** and the others will be discarded.
@@ -74,9 +74,9 @@ When you modify an environment while being offline and go back online, three sce
If you are disconnected from the cloud, the application will display a warning in the cloud environments list in the form of a orange or red cloud icon. Hovering over the icon will display the reason for the disconnection (e.g. incompatible version, etc.). You can also click on the icon to try to reconnect:
-![#sub#Tooltip showing a regular disconnection{287x219}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png)
+![#sub#Tooltip showing a regular disconnection{287x219}](docs-img:offline-reason-disconnected.png)
-![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png)
+![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](docs-img:offline-reason-incompatible-version.png)
## Major versions migrations
diff --git a/content/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration.md b/content/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration.md
index cd2568b5..52f77026 100644
--- a/content/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration.md
+++ b/content/docs/v8.1.0/mockoon-cloud/data-synchronization-team-collaboration.md
@@ -18,7 +18,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
**Cloud environments** are stored on our servers, and a local copy is kept on each client's machine. You can easily **create a cloud copy** of your local environment or **convert an existing cloud environment** back to a local environment.
-![Cloud and local environments menus{200x231}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png)
+![Cloud and local environments menus{200x231}](docs-img:cloud-sync-menu.png)
## Managing your cloud environments
@@ -26,7 +26,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
There are multiple ways to **create a cloud environment**. You can use the context menu in the local environments list to create a cloud environment from a local one using "Duplicate to the cloud" or create a new cloud environment from scratch using "New cloud environment" from the cloud environments menu.
-![context menus to create cloud environments{569x492}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png)
+![context menus to create cloud environments{569x492}](docs-img:create-cloud-environment.png)
The new cloud environment will be created and synchronized with the cloud, together with a local copy. It will be available on all your devices (solo plan) and for all your team members (team/enterprise plans) once they connect to the cloud.
@@ -34,7 +34,7 @@ The new cloud environment will be created and synchronized with the cloud, toget
You can **remove an environment** from the cloud using the context menu in the cloud environments list and selecting "Convert to local" or "Delete from cloud":
-![context menu to convert a cloud environment to local{533x277}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png)
+![context menu to convert a cloud environment to local{533x277}](docs-img:convert-cloud-to-local.png)
After converting an environment to local, it will be **permanently removed from the cloud** and **converted to a local environment** on all your devices (solo plan) and for all your team members (team/enterprise plans).
@@ -58,7 +58,7 @@ Mockoon's synchronization and collaboration features are primarily designed to w
When you are offline, a warning is shown in the cloud environments list:
-![#sub#Warning shown when the application is offline{391x209}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png)
+![#sub#Warning shown when the application is offline{391x209}](docs-img:offline-editing-warning.png)
When you modify an environment while being offline and go back online, three scenarios can happen:
@@ -66,7 +66,7 @@ When you modify an environment while being offline and go back online, three sce
- **You did not make local changes**, but **the cloud version was modified**: the cloud version will be pulled automatically to your local environment.
- **You made local changes**, and **the cloud version was modified**: you will be prompted to **choose** between **keeping** your local changes or **discarding** them.
-![#sub#Dialog shown when the application detected a conflict{504x241}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png)
+![#sub#Dialog shown when the application detected a conflict{504x241}](docs-img:offline-conflict-warning.png)
> ⚠️ If multiple users edit the same environment while offline, **only one version of the environment will be kept** and the others will be discarded.
@@ -74,9 +74,9 @@ When you modify an environment while being offline and go back online, three sce
If you are disconnected from the cloud, the application will display a warning in the cloud environments list in the form of a orange or red cloud icon. Hovering over the icon will display the reason for the disconnection (e.g. incompatible version, etc.). You can also click on the icon to try to reconnect:
-![#sub#Tooltip showing a regular disconnection{287x219}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png)
+![#sub#Tooltip showing a regular disconnection{287x219}](docs-img:offline-reason-disconnected.png)
-![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png)
+![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](docs-img:offline-reason-incompatible-version.png)
## Major versions migrations
diff --git a/content/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration.md b/content/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration.md
index cd2568b5..52f77026 100644
--- a/content/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration.md
+++ b/content/docs/v8.1.1/mockoon-cloud/data-synchronization-team-collaboration.md
@@ -18,7 +18,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
**Cloud environments** are stored on our servers, and a local copy is kept on each client's machine. You can easily **create a cloud copy** of your local environment or **convert an existing cloud environment** back to a local environment.
-![Cloud and local environments menus{200x231}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png)
+![Cloud and local environments menus{200x231}](docs-img:cloud-sync-menu.png)
## Managing your cloud environments
@@ -26,7 +26,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
There are multiple ways to **create a cloud environment**. You can use the context menu in the local environments list to create a cloud environment from a local one using "Duplicate to the cloud" or create a new cloud environment from scratch using "New cloud environment" from the cloud environments menu.
-![context menus to create cloud environments{569x492}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png)
+![context menus to create cloud environments{569x492}](docs-img:create-cloud-environment.png)
The new cloud environment will be created and synchronized with the cloud, together with a local copy. It will be available on all your devices (solo plan) and for all your team members (team/enterprise plans) once they connect to the cloud.
@@ -34,7 +34,7 @@ The new cloud environment will be created and synchronized with the cloud, toget
You can **remove an environment** from the cloud using the context menu in the cloud environments list and selecting "Convert to local" or "Delete from cloud":
-![context menu to convert a cloud environment to local{533x277}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png)
+![context menu to convert a cloud environment to local{533x277}](docs-img:convert-cloud-to-local.png)
After converting an environment to local, it will be **permanently removed from the cloud** and **converted to a local environment** on all your devices (solo plan) and for all your team members (team/enterprise plans).
@@ -58,7 +58,7 @@ Mockoon's synchronization and collaboration features are primarily designed to w
When you are offline, a warning is shown in the cloud environments list:
-![#sub#Warning shown when the application is offline{391x209}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png)
+![#sub#Warning shown when the application is offline{391x209}](docs-img:offline-editing-warning.png)
When you modify an environment while being offline and go back online, three scenarios can happen:
@@ -66,7 +66,7 @@ When you modify an environment while being offline and go back online, three sce
- **You did not make local changes**, but **the cloud version was modified**: the cloud version will be pulled automatically to your local environment.
- **You made local changes**, and **the cloud version was modified**: you will be prompted to **choose** between **keeping** your local changes or **discarding** them.
-![#sub#Dialog shown when the application detected a conflict{504x241}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png)
+![#sub#Dialog shown when the application detected a conflict{504x241}](docs-img:offline-conflict-warning.png)
> ⚠️ If multiple users edit the same environment while offline, **only one version of the environment will be kept** and the others will be discarded.
@@ -74,9 +74,9 @@ When you modify an environment while being offline and go back online, three sce
If you are disconnected from the cloud, the application will display a warning in the cloud environments list in the form of a orange or red cloud icon. Hovering over the icon will display the reason for the disconnection (e.g. incompatible version, etc.). You can also click on the icon to try to reconnect:
-![#sub#Tooltip showing a regular disconnection{287x219}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png)
+![#sub#Tooltip showing a regular disconnection{287x219}](docs-img:offline-reason-disconnected.png)
-![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png)
+![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](docs-img:offline-reason-incompatible-version.png)
## Major versions migrations
diff --git a/content/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration.md b/content/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration.md
index cd2568b5..52f77026 100644
--- a/content/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration.md
+++ b/content/docs/v8.2.0/mockoon-cloud/data-synchronization-team-collaboration.md
@@ -18,7 +18,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
**Cloud environments** are stored on our servers, and a local copy is kept on each client's machine. You can easily **create a cloud copy** of your local environment or **convert an existing cloud environment** back to a local environment.
-![Cloud and local environments menus{200x231}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png)
+![Cloud and local environments menus{200x231}](docs-img:cloud-sync-menu.png)
## Managing your cloud environments
@@ -26,7 +26,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
There are multiple ways to **create a cloud environment**. You can use the context menu in the local environments list to create a cloud environment from a local one using "Duplicate to the cloud" or create a new cloud environment from scratch using "New cloud environment" from the cloud environments menu.
-![context menus to create cloud environments{569x492}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png)
+![context menus to create cloud environments{569x492}](docs-img:create-cloud-environment.png)
The new cloud environment will be created and synchronized with the cloud, together with a local copy. It will be available on all your devices (solo plan) and for all your team members (team/enterprise plans) once they connect to the cloud.
@@ -34,7 +34,7 @@ The new cloud environment will be created and synchronized with the cloud, toget
You can **remove an environment** from the cloud using the context menu in the cloud environments list and selecting "Convert to local" or "Delete from cloud":
-![context menu to convert a cloud environment to local{533x277}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png)
+![context menu to convert a cloud environment to local{533x277}](docs-img:convert-cloud-to-local.png)
After converting an environment to local, it will be **permanently removed from the cloud** and **converted to a local environment** on all your devices (solo plan) and for all your team members (team/enterprise plans).
@@ -58,7 +58,7 @@ Mockoon's synchronization and collaboration features are primarily designed to w
When you are offline, a warning is shown in the cloud environments list:
-![#sub#Warning shown when the application is offline{391x209}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png)
+![#sub#Warning shown when the application is offline{391x209}](docs-img:offline-editing-warning.png)
When you modify an environment while being offline and go back online, three scenarios can happen:
@@ -66,7 +66,7 @@ When you modify an environment while being offline and go back online, three sce
- **You did not make local changes**, but **the cloud version was modified**: the cloud version will be pulled automatically to your local environment.
- **You made local changes**, and **the cloud version was modified**: you will be prompted to **choose** between **keeping** your local changes or **discarding** them.
-![#sub#Dialog shown when the application detected a conflict{504x241}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png)
+![#sub#Dialog shown when the application detected a conflict{504x241}](docs-img:offline-conflict-warning.png)
> ⚠️ If multiple users edit the same environment while offline, **only one version of the environment will be kept** and the others will be discarded.
@@ -74,9 +74,9 @@ When you modify an environment while being offline and go back online, three sce
If you are disconnected from the cloud, the application will display a warning in the cloud environments list in the form of a orange or red cloud icon. Hovering over the icon will display the reason for the disconnection (e.g. incompatible version, etc.). You can also click on the icon to try to reconnect:
-![#sub#Tooltip showing a regular disconnection{287x219}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png)
+![#sub#Tooltip showing a regular disconnection{287x219}](docs-img:offline-reason-disconnected.png)
-![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png)
+![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](docs-img:offline-reason-incompatible-version.png)
## Major versions migrations
diff --git a/content/docs/v8.3.0/mockoon-cloud/api-mock-cloud-deployments.md b/content/docs/v8.3.0/mockoon-cloud/api-mock-cloud-deployments.md
index cd0d419b..dba64855 100644
--- a/content/docs/v8.3.0/mockoon-cloud/api-mock-cloud-deployments.md
+++ b/content/docs/v8.3.0/mockoon-cloud/api-mock-cloud-deployments.md
@@ -18,24 +18,24 @@ order: 903
You can **deploy an environment** to the cloud using the context menu in the local or cloud environments list and selecting **"Deploy to the cloud"**:
-![context menus to deploy cloud environments{513x507}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-menu.png)
+![context menus to deploy cloud environments{513x507}](docs-img:deploy-environment-menu.png)
In the deployment dialog, you can further customize the deployment by selecting the **visibility** of the environment:
- **Public**: The environment will be accessible to anyone with the URL.
- **Private**: The environment will be accessible only to users with the URL and the **API key**.
-![deployment dialog{800x225}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-dialog.png)
+![deployment dialog{800x225}](docs-img:deploy-environment-dialog.png)
After clicking the **"Deploy"** button, the environment will be uploaded to the cloud and will be accessible using the provided URL. In the management dialog, you can find the URL and the API key to access the environment. You can also re-deploy the environment or delete the instance:
-![deployment management dialog{799x205}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-dialog.png)
+![deployment management dialog{799x205}](docs-img:deploy-environment-management-dialog.png)
### Re-deploy or delete a cloud instance
In the management dialog, you can **re-deploy** the environment or **delete** the instance using the menu:
-![deployment management dialog re-deploy or delete the instance menu{902x235}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-menu.png)
+![deployment management dialog re-deploy or delete the instance menu{902x235}](docs-img:deploy-environment-management-menu.png)
## Instance URL and visibility
diff --git a/content/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration.md b/content/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration.md
index 35934621..0a584baa 100644
--- a/content/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration.md
+++ b/content/docs/v8.3.0/mockoon-cloud/data-synchronization-team-collaboration.md
@@ -18,7 +18,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
**Cloud environments** are stored on our servers, and a local copy is kept on each client's machine. You can easily **create a cloud copy** of your local environment or **convert an existing cloud environment** back to a local environment.
-![Cloud and local environments menus{200x231}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png)
+![Cloud and local environments menus{200x231}](docs-img:cloud-sync-menu.png)
## Managing your cloud environments
@@ -26,7 +26,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
There are multiple ways to **create a cloud environment**. You can use the context menu in the local environments list to create a cloud environment from a local one using "Duplicate to the cloud" or create a new cloud environment from scratch using "New cloud environment" from the cloud environments menu.
-![context menus to create cloud environments{569x492}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png)
+![context menus to create cloud environments{569x492}](docs-img:create-cloud-environment.png)
The new cloud environment will be created and synchronized with the cloud, together with a local copy. It will be available on all your devices (solo plan) and for all your team members (team/enterprise plans) once they connect to the cloud.
@@ -34,7 +34,7 @@ The new cloud environment will be created and synchronized with the cloud, toget
You can **remove an environment** from the cloud using the context menu in the cloud environments list and selecting "Convert to local" or "Delete from cloud":
-![context menu to convert a cloud environment to local{533x277}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png)
+![context menu to convert a cloud environment to local{533x277}](docs-img:convert-cloud-to-local.png)
After converting an environment to local, it will be **permanently removed from the cloud** and **converted to a local environment** on all your devices (solo plan) and for all your team members (team/enterprise plans).
@@ -58,7 +58,7 @@ Mockoon's synchronization and collaboration features are primarily designed to w
When you are offline, a warning is shown in the cloud environments list:
-![#sub#Warning shown when the application is offline{391x209}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png)
+![#sub#Warning shown when the application is offline{391x209}](docs-img:offline-editing-warning.png)
When you modify an environment while being offline and go back online, three scenarios can happen:
@@ -66,7 +66,7 @@ When you modify an environment while being offline and go back online, three sce
- **You did not make local changes**, but **the cloud version was modified**: the cloud version will be pulled automatically to your local environment.
- **You made local changes**, and **the cloud version was modified**: you will be prompted to **choose** between **keeping** your local changes or **discarding** them.
-![#sub#Dialog shown when the application detected a conflict{504x241}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png)
+![#sub#Dialog shown when the application detected a conflict{504x241}](docs-img:offline-conflict-warning.png)
> ⚠️ If multiple users edit the same environment while offline, **only one version of the environment will be kept** and the others will be discarded.
@@ -74,9 +74,9 @@ When you modify an environment while being offline and go back online, three sce
If you are disconnected from the cloud, the application will display a warning in the cloud environments list in the form of a orange or red cloud icon. Hovering over the icon will display the reason for the disconnection (e.g. incompatible version, etc.). You can also click on the icon to try to reconnect:
-![#sub#Tooltip showing a regular disconnection{287x219}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png)
+![#sub#Tooltip showing a regular disconnection{287x219}](docs-img:offline-reason-disconnected.png)
-![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png)
+![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](docs-img:offline-reason-incompatible-version.png)
## Major versions migrations
diff --git a/content/docs/v8.4.0/mockoon-cloud/api-mock-cloud-deployments.md b/content/docs/v8.4.0/mockoon-cloud/api-mock-cloud-deployments.md
index 5761e459..7704b2c0 100644
--- a/content/docs/v8.4.0/mockoon-cloud/api-mock-cloud-deployments.md
+++ b/content/docs/v8.4.0/mockoon-cloud/api-mock-cloud-deployments.md
@@ -18,24 +18,24 @@ order: 901
You can **deploy an environment** to the cloud using the context menu in the local or cloud environments list and selecting **"Deploy to the cloud"**:
-![context menus to deploy cloud environments{513x507}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-menu.png)
+![context menus to deploy cloud environments{513x507}](docs-img:deploy-environment-menu.png)
In the deployment dialog, you can further customize the deployment by selecting the **visibility** of the environment:
- **Public**: The environment will be accessible to anyone with the URL.
- **Private**: The environment will be accessible only to users with the URL and the **API key**.
-![deployment dialog{800x225}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-dialog.png)
+![deployment dialog{800x225}](docs-img:deploy-environment-dialog.png)
After clicking the **"Deploy"** button, the environment will be uploaded to the cloud and will be accessible using the provided URL. In the management dialog, you can find the URL and the API key to access the environment. You can also re-deploy the environment or delete the instance:
-![deployment management dialog{799x205}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-dialog.png)
+![deployment management dialog{799x205}](docs-img:deploy-environment-management-dialog.png)
### Re-deploy or delete a cloud instance
In the management dialog, you can **re-deploy** the environment or **delete** the instance using the menu:
-![deployment management dialog re-deploy or delete the instance menu{902x235}](/images/docs/static/mockoon-cloud/api-mock-cloud-deployments/deploy-environment-management-menu.png)
+![deployment management dialog re-deploy or delete the instance menu{902x235}](docs-img:deploy-environment-management-menu.png)
## Instance URL and visibility
diff --git a/content/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration.md b/content/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration.md
index 35934621..0a584baa 100644
--- a/content/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration.md
+++ b/content/docs/v8.4.0/mockoon-cloud/data-synchronization-team-collaboration.md
@@ -18,7 +18,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
**Cloud environments** are stored on our servers, and a local copy is kept on each client's machine. You can easily **create a cloud copy** of your local environment or **convert an existing cloud environment** back to a local environment.
-![Cloud and local environments menus{200x231}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/cloud-sync-menu.png)
+![Cloud and local environments menus{200x231}](docs-img:cloud-sync-menu.png)
## Managing your cloud environments
@@ -26,7 +26,7 @@ The **local environment** is the default environment in Mockoon. It is [stored o
There are multiple ways to **create a cloud environment**. You can use the context menu in the local environments list to create a cloud environment from a local one using "Duplicate to the cloud" or create a new cloud environment from scratch using "New cloud environment" from the cloud environments menu.
-![context menus to create cloud environments{569x492}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/create-cloud-environment.png)
+![context menus to create cloud environments{569x492}](docs-img:create-cloud-environment.png)
The new cloud environment will be created and synchronized with the cloud, together with a local copy. It will be available on all your devices (solo plan) and for all your team members (team/enterprise plans) once they connect to the cloud.
@@ -34,7 +34,7 @@ The new cloud environment will be created and synchronized with the cloud, toget
You can **remove an environment** from the cloud using the context menu in the cloud environments list and selecting "Convert to local" or "Delete from cloud":
-![context menu to convert a cloud environment to local{533x277}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/convert-cloud-to-local.png)
+![context menu to convert a cloud environment to local{533x277}](docs-img:convert-cloud-to-local.png)
After converting an environment to local, it will be **permanently removed from the cloud** and **converted to a local environment** on all your devices (solo plan) and for all your team members (team/enterprise plans).
@@ -58,7 +58,7 @@ Mockoon's synchronization and collaboration features are primarily designed to w
When you are offline, a warning is shown in the cloud environments list:
-![#sub#Warning shown when the application is offline{391x209}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-editing-warning.png)
+![#sub#Warning shown when the application is offline{391x209}](docs-img:offline-editing-warning.png)
When you modify an environment while being offline and go back online, three scenarios can happen:
@@ -66,7 +66,7 @@ When you modify an environment while being offline and go back online, three sce
- **You did not make local changes**, but **the cloud version was modified**: the cloud version will be pulled automatically to your local environment.
- **You made local changes**, and **the cloud version was modified**: you will be prompted to **choose** between **keeping** your local changes or **discarding** them.
-![#sub#Dialog shown when the application detected a conflict{504x241}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-conflict-warning.png)
+![#sub#Dialog shown when the application detected a conflict{504x241}](docs-img:offline-conflict-warning.png)
> ⚠️ If multiple users edit the same environment while offline, **only one version of the environment will be kept** and the others will be discarded.
@@ -74,9 +74,9 @@ When you modify an environment while being offline and go back online, three sce
If you are disconnected from the cloud, the application will display a warning in the cloud environments list in the form of a orange or red cloud icon. Hovering over the icon will display the reason for the disconnection (e.g. incompatible version, etc.). You can also click on the icon to try to reconnect:
-![#sub#Tooltip showing a regular disconnection{287x219}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-disconnected.png)
+![#sub#Tooltip showing a regular disconnection{287x219}](docs-img:offline-reason-disconnected.png)
-![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](/images/docs/static/mockoon-cloud/data-synchronization-team-collaboration/offline-reason-incompatible-version.png)
+![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](docs-img:offline-reason-incompatible-version.png)
## Major versions migrations
diff --git a/content/docs/v9.0.0/about.md b/content/docs/v9.0.0/about.md
new file mode 100644
index 00000000..ffabb5ca
--- /dev/null
+++ b/content/docs/v9.0.0/about.md
@@ -0,0 +1,39 @@
+---
+title: About the documentation
+meta:
+ title: Learn about Mockoon's documentation
+ description: Discover Mockoon's features and options, explore advanced topics and learn how to create fast and free mock API JSON servers.
+order: 10
+---
+
+# About the documentation
+
+---
+
+This documentation covers Mockoon's most used features and options to help you create the best mock APIs. These topics apply to the [desktop application](/download/), [CLI](/cli/), and [serverless package](/serverless/) which supports the same features.
+
+You will find a documentation for the most recent releases of Mockoon. Head over to our [releases section](/releases/) for more details about the changes in each version.
+
+If you find a mistake in the documentation, you can open an issue on the [website's repository](https://github.com/mockoon/mockoon.com).
+
+## CLI-specific documentation (flags, etc.)
+
+You will find the [CLI documentation](https://github.com/mockoon/mockoon/blob/main/packages/cli/README.md) in its dedicated readme file on the repository. It covers the CLI's specific features, like the available flags or how to use the Docker file.
+
+## Serverless-specific documentation (options, etc.)
+
+You will find the [serverless package documentation](https://github.com/mockoon/mockoon/blob/main/packages/serverless/README.md) in its dedicated readme file on the repository. It covers the package usage instructions and specific features.
+
+## Versioning
+
+Even if Mockoon is primarily a desktop application, we are following [semantic versioning](https://semver.org/). All the applications and packages **share the same version number** for each release.
+
+This allows you to migrate from one version to another without worrying about compatibility issues between the desktop application and the CLI or serverless package.
+
+### Major versions
+
+While the desktop application can easily **migrate from one version to another** (including major versions), this is not the case for the CLI or serverless package. When you are using one of your [data files](docs:mockoon-data-files/data-storage-location) with the CLI or serverless package, or sharing it with your team, you need to make sure that the data file schema is compatible with the version you or your team is using.
+
+Every time we introduce a **breaking change** in the data file schema (e.g. new feature) we release a **new major version**. We recommend that you always migrate simultaneously to the same major version for all the desktop applications and packages you are using.
+
+> 📝 Note to our Cloud users: the same recommendation applies when you are using our **Cloud features**. Please have a look at the [team collaboration](docs:mockoon-cloud/data-synchronization-team-collaboration#major-versions-migrations) and [cloud deployments](docs:mockoon-cloud/api-mock-cloud-deployments#major-versions-migrations) documentations for more information.
diff --git a/content/docs/v9.0.0/admin-api/data-buckets.md b/content/docs/v9.0.0/admin-api/data-buckets.md
new file mode 100644
index 00000000..6b509fe6
--- /dev/null
+++ b/content/docs/v9.0.0/admin-api/data-buckets.md
@@ -0,0 +1,49 @@
+---
+title: Data Buckets
+meta:
+ title: 'Admin API: Data buckets management'
+ description: 'Learn how to manage the data buckets of a running environment using the admin API: retrieve their values and reset them to their initial state'
+order: 801
+---
+
+# Admin API: Data Buckets
+
+> 🔌 **Base endpoint:** `/mockoon-admin/data-buckets`
+
+---
+
+This endpoint allows you to manage the [data buckets](docs:data-buckets/overview) without restarting the server.
+
+## Get a data bucket value
+
+To get the value of a data bucket, call the `/mockoon-admin/data-buckets` endpoint with the following parameters:
+
+- **Method:** `GET`
+- **URL:** `/mockoon-admin/data-buckets/:nameOrId`, where `:nameOrId` is the name or unique id of the data bucket.
+
+**Example request:**
+
+```http
+GET /mockoon-admin/data-buckets/myData
+```
+
+**Example response:**
+
+```json
+{
+ "name": "myData",
+ "id": "abcd",
+ "value": { "property": "value" }
+}
+```
+
+The value of the data bucket is returned as a JSON object in the `value` property. This allows you to check if the data bucket was correctly parsed from the JSON string content initially provided.
+
+## Reset the data buckets
+
+To **reset** the data buckets to their **initial state**, call one of the following endpoints without payload:
+
+- `POST /mockoon-admin/data-buckets/purge`.
+- `PURGE /mockoon-admin/data-buckets`.
+
+> ⚠️ The data buckets containing request helpers will be [generated again during the next request](docs:data-buckets/overview#data-buckets-generation).
diff --git a/content/docs/v9.0.0/admin-api/environment-variables.md b/content/docs/v9.0.0/admin-api/environment-variables.md
new file mode 100644
index 00000000..faee2e04
--- /dev/null
+++ b/content/docs/v9.0.0/admin-api/environment-variables.md
@@ -0,0 +1,61 @@
+---
+title: Environment Variables
+meta:
+ title: 'Admin API: Manage the environment variables'
+ description: 'Learn how to manage your running mocks environment variables using the admin API: add, update and delete environment variables'
+order: 802
+---
+
+# Admin API: Environment variables
+
+> 🔌 **Base endpoint:** `/mockoon-admin/env-vars`
+
+---
+
+This endpoint allows you to manage the [environment variables](docs:variables/environment-variables), without restarting the mock server or the application.
+
+## Get an environment variable value
+
+To get the value of an environment variable, call the `/mockoon-admin/env-vars` endpoint with the following parameters:
+
+- **Method:** `GET`
+- **URL:** `/mockoon-admin/env-vars/:key`, where `:key` is the name of the variable, including or not the `MOCKOON_` prefix, or the [custom prefix](docs:variables/environment-variables#changing-or-removing-the-prefix) defined in the application settings.
+
+**Example request:**
+
+```http
+GET /mockoon-admin/env-vars/MOCKOON_ENV_VAR
+```
+
+**Example response:**
+
+```json
+{
+ "key": "MOCKOON_ENV_VAR",
+ "value": "variableValue"
+}
+```
+
+## Set or update an environment variable
+
+To set or update an environment variable, call the `/mockoon-admin/env-vars` endpoint with the following parameters:
+
+- **Method:** `POST`, `PUT` or `PATCH`
+- **URL:** `/mockoon-admin/env-vars`
+- **Body:** JSON object with the following properties:
+ - `key`: the name of the variable, including the `MOCKOON_` prefix, or the [custom prefix](docs:variables/environment-variables#changing-or-removing-the-prefix) defined in the application settings.
+ - `value`: the value of the variable.
+
+**Example request:**
+
+```http
+POST /mockoon-admin/env-vars
+Content-Type: application/json
+
+{
+ "key": "MOCKOON_ENV_VAR",
+ "value": "myValue"
+}
+```
+
+> ⚠️ This will only create or update the environment variable for the running mock server. It will **not** modify your system environment variables.
diff --git a/content/docs/v9.0.0/admin-api/global-variables.md b/content/docs/v9.0.0/admin-api/global-variables.md
new file mode 100644
index 00000000..75649769
--- /dev/null
+++ b/content/docs/v9.0.0/admin-api/global-variables.md
@@ -0,0 +1,66 @@
+---
+title: Global Variables
+meta:
+ title: 'Admin API: Manage and Purge Global Variables'
+ description: 'Learn how to manage and purge global variables using the admin API: add, update and delete global variables'
+order: 802
+---
+
+# Admin API: Global variables
+
+> 🔌 **Base endpoint:** `/mockoon-admin/global-vars`
+
+---
+
+This endpoint allows you to manage and purge [global variables](docs:variables/global-variables), without restarting the server.
+
+## Get a global variable value
+
+To get the value of a global variable, call the `/mockoon-admin/global-vars` endpoint with the following parameters:
+
+- **Method:** `GET`
+- **URL:** `/mockoon-admin/global-vars/:key`, where `:key` is the name of the variable.
+
+**Example request:**
+
+```http
+GET /mockoon-admin/global-vars/my_var
+```
+
+**Example response:**
+
+```json
+{
+ "key": "my_var",
+ "value": "variableValue"
+}
+```
+
+## Set or update a global variable
+
+To set or update a global variable, call the `/mockoon-admin/global-vars` endpoint with the following parameters:
+
+- **Method:** `POST`, `PUT` or `PATCH`
+- **URL:** `/mockoon-admin/global-vars`
+- **Body:** JSON object with the following properties:
+ - `key`: the name of the variable.
+ - `value`: the value of the variable.
+
+**Example request:**
+
+```http
+POST /mockoon-admin/global-vars
+Content-Type: application/json
+
+{
+ "key": "myGlobalVar",
+ "value": "myValue"
+}
+```
+
+## Purge all global variables
+
+To delete all global variables, call one of the following endpoints without payload:
+
+- `POST /mockoon-admin/global-vars/purge`.
+- `PURGE /mockoon-admin/global-vars`.
diff --git a/content/docs/v9.0.0/admin-api/overview.md b/content/docs/v9.0.0/admin-api/overview.md
new file mode 100644
index 00000000..c65a8971
--- /dev/null
+++ b/content/docs/v9.0.0/admin-api/overview.md
@@ -0,0 +1,59 @@
+---
+title: Overview
+meta:
+ title: Admin API overview
+ description: Learn how to use the admin API exposed by Mockoon to manage your environments, routes, and responses
+order: 800
+---
+
+# Admin API overview
+
+---
+
+Each running mock server **exposes an admin API** that allows you to manage your environment. This API can be used to automate the management of your mock server, especially in a remote environment, without having to restart the application.
+
+## Admin API base endpoint
+
+The admin API **base endpoint** is the same as the mock server URL with the `/mockoon-admin` path appended.
+
+For example, if your mock server is running on `http://localhost:3000`, the admin API base endpoint will be `http://localhost:3000/mockoon-admin`.
+
+> 💡 The [API prefix](docs:server-configuration/port-prefix) is not applied to the admin API base endpoint. If your API endpoints are accessible on `http://localhost:3000/myprefix/{endpoint}`, the admin API base endpoint will still be `http://localhost:3000/mockoon-admin`.
+
+## Disable the admin API
+
+The admin API is **enabled by default**.
+
+In the desktop application, the admin API cannot be disabled. However, you can disable it when running your mock with the [CLI](/cli/) or the [serverless library](/serverless/).
+
+### Disable the admin API with the CLI
+
+To **disable** the admin API when running your mock with the CLI, use the `--disable-admin-api` flag:
+
+```bash
+mockoon-cli start --disable-admin-api -d ./mock.json
+```
+
+> 📘 Check the [CLI dedicated documentation](https://github.com/mockoon/mockoon/tree/main/packages/cli#readme)
+
+### Disable the admin API with the serverless library
+
+To **disable** the admin API when running your mock with the serverless library, set the `enableAdminApi` option to `false` when building the `MockoonServerless` instance:
+
+```javascript
+const mockoonServerless = new mockoon.MockoonServerless(mockEnv, {
+ enableAdminApi: false
+});
+```
+
+> 📘 Check the [serverless library dedicated documentation](https://github.com/mockoon/mockoon/tree/main/packages/serverless#readme)
+
+## Admin API capabilities
+
+Currently, the admin API allows you to:
+
+- [Reset the state of a running environment](docs:admin-api/server-state)
+- [Manage the global variables](docs:admin-api/global-variables)
+- [Manage the environment variables](docs:admin-api/environment-variables)
+- [Manage the transaction logs](docs:admin-api/transaction-logs)
+- [Manage the data buckets](docs:admin-api/data-buckets)
diff --git a/content/docs/v9.0.0/admin-api/server-state.md b/content/docs/v9.0.0/admin-api/server-state.md
new file mode 100644
index 00000000..297ff6fd
--- /dev/null
+++ b/content/docs/v9.0.0/admin-api/server-state.md
@@ -0,0 +1,29 @@
+---
+title: Server state
+meta:
+ title: 'Admin API: Server state'
+ description: Learn how to purge the state of a running environment using the admin API, resetting the request count and regenerating the data buckets
+order: 804
+---
+
+# Admin API: Server state
+
+> 🔌 **Base endpoint:** `/mockoon-admin/state`
+
+---
+
+The `/mockoon-admin/state` endpoint allows you to purge the state of a running environment. This include **resetting the request count**, **regenerating the data buckets**, **clearing the global variables**, and **resetting the transaction logs**.
+
+### Purging the state of a running environment
+
+To purge the state of a running environment is done by calling one of the following endpoints:
+
+- `PURGE /mockoon-admin/state`.
+- `POST /mockoon-admin/state/purge`.
+
+**Effects:**
+
+- Resets the [request counter](docs:route-responses/dynamic-rules#1-target) to 1 for each route.
+- Regenerates the [data buckets](docs:data-buckets/overview) for the environment. The data buckets containing request helpers will be [generated again during the next request](docs:data-buckets/overview#data-buckets-generation).
+- Clears all the [global variables](docs:variables/global-variables).
+- Clears the [transaction logs](docs:logging-and-recording/requests-logging) for the environment.
diff --git a/content/docs/v9.0.0/admin-api/transaction-logs.md b/content/docs/v9.0.0/admin-api/transaction-logs.md
new file mode 100644
index 00000000..1cbd778d
--- /dev/null
+++ b/content/docs/v9.0.0/admin-api/transaction-logs.md
@@ -0,0 +1,76 @@
+---
+title: Logs
+meta:
+ title: 'Admin API: fetch and purge transaction logs'
+ description: 'Learn how to fetch and purge your mock API transaction logs using the Mockoon admin API endpoints'
+order: 803
+---
+
+# Admin API: transaction logs
+
+> 🔌 **Base endpoint:** `/mockoon-admin/logs`
+
+---
+
+This endpoint allows you to fetch and purge the application's [transaction logs](docs:logging-and-recording/requests-logging) when using the desktop application, the CLI or the serverless library.
+
+## Retrieve the transaction logs
+
+To retrieve the transaction logs, call the following endpoint:
+
+- **Method:** `GET`
+- **URL:** `/mockoon-admin/logs`
+- **Query parameters:**
+ - `page` (optional): the page number to retrieve. Default is 1.
+ - `limit` (optional): the number of logs to retrieve per page. Default is 10.
+
+**Example request:**
+
+```http
+GET /mockoon-admin/logs
+GET /mockoon-admin/logs?page=2
+GET /mockoon-admin/logs?page=2&limit=20
+```
+
+**Example response ([data model](https://github.com/mockoon/mockoon/blob/main/packages/commons/src/models/server.model.ts#L27-L47)):**
+
+```json
+[
+ {
+ "request": {
+ "method": "get",
+ "urlPath": "/users/5",
+ "route": "/users/:id",
+ "params": [
+ {
+ "name": "id",
+ "value": "5"
+ }
+ ],
+ "query": "",
+ "queryParams": {},
+ "body": "",
+ "headers": [{ "key": "host", "value": "localhost:3000" }]
+ },
+ "response": {
+ "statusCode": 200,
+ "statusMessage": "OK",
+ "headers": [{ "key": "content-type", "value": "application/json; charset=utf-8" }],
+ "body": "ok"
+ },
+ "routeResponseUUID": "c0a61351-c542-4d80-902d-4305047aff17",
+ "routeUUID": "7e950e12-dc21-425a-930c-e84a381281ee",
+ "proxied": false,
+ "timestampMs": 1714399178682
+ }
+]
+```
+
+## Purge the transaction logs
+
+To purge the transaction logs, call one of the following endpoints:
+
+- `POST /mockoon-admin/logs/purge`.
+- `PURGE /mockoon-admin/logs`.
+
+> ⚠️ This action will only purge the transaction logs stored in the memory of the running mock server. It will not update the [Logs view](docs:logging-and-recording/requests-logging) in the desktop application.
diff --git a/content/docs/v6.2.0/api-endpoints/crud-routes.md b/content/docs/v9.0.0/api-endpoints/crud-routes.md
similarity index 69%
rename from content/docs/v6.2.0/api-endpoints/crud-routes.md
rename to content/docs/v9.0.0/api-endpoints/crud-routes.md
index e5743828..721af945 100644
--- a/content/docs/v6.2.0/api-endpoints/crud-routes.md
+++ b/content/docs/v9.0.0/api-endpoints/crud-routes.md
@@ -3,7 +3,7 @@ title: CRUD routes
meta:
title: Mockoon CRUD routes documentation
description: All you need to know about Mockoon's mock API CRUD routes creation, behavior, data bucket operations and data manipulation.
-order: 210
+order: 220
---
# CRUD routes
@@ -12,25 +12,25 @@ order: 210
## Overview
-Where Mockoon routes are independent and stateless, CRUD routes can generate multiple endpoints to perform CRUD operations (Create, Read, Update, Delete) on [data buckets](docs:data-buckets/overview). Data buckets are generated when the server start, their state persisting between calls. It makes them the perfect tool to simulate small databases.
+Where Mockoon routes are [independent and stateless](docs:api-endpoints/http-routes), CRUD routes can generate multiple endpoints to perform CRUD operations (Create, Read, Update, Delete) on [data buckets](docs:data-buckets/overview). Data buckets are generated when the server start, their state persisting between calls. It makes them the perfect tool to simulate small databases.
A CRUD endpoint will automatically create a series of routes during runtime, allowing you to perform actions on your data bucket. A typical example is an array of resources (users, invoices, etc.) you can update through a PUT request and see the result in a subsequent GET request.
To create a CRUD route, click on the "CRUD route" entry in the add route menu:
-![Add a new CRUD route{390x304}](docs-img:add-crud-route.png)
+![Add a new CRUD route{498x335}](docs-img:add-crud-route.png)
Then, set its path, usually a [resource name](/articles/api-guide-rest-api-components/#resource-url-request):
-![Set the CRUD route path{1264x176}](docs-img:set-crud-route-path.png)
+![Set the CRUD route path{1484x176}](docs-img:set-crud-route-path.png)
-> Your path can be more complex, and contains parameters or multiple sections. Remember that this will be the "prefix" of the different endpoints (see below).
+> 💡 Your path can be more complex, and contains parameters or multiple sections. Remember that this will be the "prefix" of the different endpoints (see below).
## Data bucket link
After creating a CRUD endpoint, you need to link it to a data bucket:
-![Link a data bucket to a CRUD route{1264x334}](docs-img:link-data-bucket-crud-route.png)
+![Link a data bucket to a CRUD route{1484x334}](docs-img:link-data-bucket-crud-route.png)
> Head over to our [data buckets](docs:data-buckets/overview) documentation to learn how to create a new data bucket.
@@ -60,17 +60,17 @@ Also, CRUD routes are still compatible with creating [multiple responses and rul
Mockoon will automatically translate a CRUD endpoint to multiple routes allowing for a wide range of behaviors. The system is very flexible and allows for any content, storing and updating primitives to simulate a flag or environment variable system, updating and sorting an array of objects, etc.
-| | | Array of objects | Array of primitives (`id` parameter is acting like an index) | Object, primitive or non-valid JSON |
-| ---------- | ---------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------- |
-| **GET** | `/resources` | Returns the entire array \* | Returns the entire array \* | Returns the content |
-| **GET** | `/resources/:id` | Returns an object by its `id` property | Returns an item by its index | Returns the content |
-| **POST** | `/resources` | Inserts a new object in the array (autogenerate the `id` (UUID) if not provided) | Inserts a new item in the array | Overwrites the content |
-| **PUT** | `/resources` | Replaces the whole data bucket content | Replaces the whole data bucket content | Overwrites the content |
-| **PUT** | `/resources/:id` | Performs a full object update by its `id` (replace) | Replaces the item at index | Overwrites the content |
-| **PATCH** | `/resources` | Concatenates the arrays | Concatenates the arrays | Overwrites the content (merge if objects) |
-| **PATCH** | `/resources/:id` | Performs a partial object update by its `id` (merge) | Replaces the item at index | Overwrites the content (merge if objects) |
-| **DELETE** | `/resources` | Deletes the data bucket content | Deletes the data bucket content | Deletes the content |
-| **DELETE** | `/resources/:id` | Deletes an object by its `id` | Deletes an item at index | Deletes the content |
+| | | Array of objects | Array of primitives (`id` parameter is acting like an index) | Object, primitive or non-valid JSON |
+| ---------- | ---------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------- |
+| **GET** | `/resources` | Returns the entire array \* | Returns the entire array \* | Returns the content |
+| **GET** | `/resources/:id` | Returns an object by its `id` property | Returns an item by its index | Returns the content |
+| **POST** | `/resources` | Inserts a new object in the array ([autogenerated](#customizing-the-id-property) if not provided) | Inserts a new item in the array | Overwrites the content |
+| **PUT** | `/resources` | Replaces the whole data bucket content | Replaces the whole data bucket content | Overwrites the content |
+| **PUT** | `/resources/:id` | Performs a full object update by its `id` (replace) | Replaces the item at index | Overwrites the content |
+| **PATCH** | `/resources` | Concatenates the arrays | Concatenates the arrays | Overwrites the content (merge if objects) |
+| **PATCH** | `/resources/:id` | Performs a partial object update by its `id` (merge) | Replaces the item at index | Overwrites the content (merge if objects) |
+| **DELETE** | `/resources` | Deletes the data bucket content | Deletes the data bucket content | Deletes the content |
+| **DELETE** | `/resources/:id` | Deletes an object by its `id` | Deletes an item at index | Deletes the content |
\* Supports [filtering, sorting and pagination](#filtering-sorting-and-pagination-on-the-main-get-route)
@@ -78,9 +78,17 @@ Mockoon will automatically translate a CRUD endpoint to multiple routes allowing
## Customizing the "id" property
-By default, CRUD endpoints will use the `id` property to identify objects in an array in all the routes manipulating a single resource (e.g. GET `/resource/:id`). However, you can change this property to anything you want, like `uuid`, `custom_id`, etc:
+## Changing the property name
-![Customize the CRUD id property{1264x334}](docs-img:customize-crud-id-property-key.png)
+By default, CRUD endpoints will use the `id` property to identify objects in an array in all the routes manipulating a single resource (e.g. GET `/resource/:id`). However, you can change this property to anything you want, like `uuid`, `custom_id`, etc. The crud key also supports the dot notation, allowing you to perform CRUD operations based on nested properties (e.g. `data.id`).
+
+![Customize the CRUD id property{1484x334}](docs-img:customize-crud-id-property-key.png)
+
+## Autogenerated IDs and numeric IDs
+
+The "id" property is **autogenerated** during a `POST /resources` request if not provided in the request's body. It will be a random UUID v4 string by default. The system will also detect if existing objects in the data bucket have numeric IDs and automatically increment the ID of the inserted object instead of generating a UUID.
+
+> 💡 The only constraint for using numeric IDs is the presence of at least one object with a numeric ID in the data bucket. If no object has a numeric ID, the system will default to UUIDs.
## Overriding a route
diff --git a/content/docs/v6.2.0/api-endpoints/folders.md b/content/docs/v9.0.0/api-endpoints/folders.md
similarity index 94%
rename from content/docs/v6.2.0/api-endpoints/folders.md
rename to content/docs/v9.0.0/api-endpoints/folders.md
index 5e4691e2..5e9e8869 100644
--- a/content/docs/v6.2.0/api-endpoints/folders.md
+++ b/content/docs/v9.0.0/api-endpoints/folders.md
@@ -3,7 +3,7 @@ title: Folders
meta:
title: Mockoon folders documentation
description: Everything about Mockoon API endpoint folder and sub-folders organization, reordering, auto repair and route precedence
-order: 230
+order: 240
---
# Folders
@@ -14,7 +14,7 @@ order: 230
You can organize your routes into folders and sub-folders:
-![routes organized in folders and sub-folders{799x518}](docs-img:routes-nested-folder.png)
+![routes organized in folders and sub-folders{849x521}](docs-img:routes-nested-folder.png)
This new feature allows you to better organize your routes and make your APIs more readable and easier to navigate, with a clearer hierarchy.
You can drag and drop to move or reorganize your routes and folders.
diff --git a/content/docs/v9.0.0/api-endpoints/http-routes.md b/content/docs/v9.0.0/api-endpoints/http-routes.md
new file mode 100644
index 00000000..8dd8bf32
--- /dev/null
+++ b/content/docs/v9.0.0/api-endpoints/http-routes.md
@@ -0,0 +1,41 @@
+---
+title: HTTP routes
+meta:
+ title: Mockoon HTTP routes documentation
+ description: All you need to know about Mockoon's mock API HTTP routes creation, behavior, custom body, headers and more.
+order: 210
+---
+
+# HTTP routes
+
+---
+
+## Overview
+
+**HTTP routes** are the most basic **endpoints** you can create in Mockoon. They are flexible and can be used to mock any type of API. They support many customizations like [headers](docs:response-configuration/response-headers) and [body](docs:response-configuration/response-body) and can have [multiple responses](docs:route-responses/multiple-responses) and [rules](docs:route-responses/dynamic-rules) to handle different scenarios.
+
+To create a new HTTP route, click on the "HTTP route" entry in the add route menu:
+
+![Add a new HTTP route{498x335}](docs-img:add-http-route.png)
+
+A new route will be created with a default 200 status code and an empty body. You can then customize it to fit your needs.
+
+![view of a new HTTP route{1484x476}](docs-img:new-http-route.png)
+
+## Independence and statelessness
+
+All HTTP routes are **independent** of each other and **stateless**. It means that HTTP routes will **not share any data** with other routes and that the route will **not remember any information** between requests. This is important to keep in mind when creating complex APIs with multiple routes.
+
+Some exceptions to this rule are:
+
+- [**Global variables**](docs:variables/global-variables) that can be used to store and share data between routes in the templating engine.
+- [**Rules based on the request number**](docs:route-responses/dynamic-rules#1-target) that can be used to answer differently based on the index of the requests.
+- [**Data buckets**](docs:data-buckets/overview) that can be used to serve data from a shared source. However, the data bucket cannot be modified by an HTTP route, see below.
+
+## Relation with data buckets
+
+HTTP routes can use [**data buckets**](docs:data-buckets/overview) to serve data from a **shared source** and avoid duplication. By selecting ["Data bucket" in the route response body type](docs:response-configuration/response-body#data-bucket), you can choose a data bucket to serve data from for any of your routes.
+
+However, the **data bucket cannot be modified** by an HTTP route. Example: an HTTP route with a PUT method won't be able to update a data bucket. It ensures that the data bucket remains a shared source of truth and that the HTTP routes remain stateless.
+
+If you want a data bucket to act as a **simple JSON database** and be **manipulated** by your endpoints, you can create [**CRUD routes**](docs:api-endpoints/crud-routes) that will be able to interact with the data bucket by creating, reading, filtering, updating, and deleting data, in a RESTful way.
diff --git a/content/docs/v6.2.0/api-endpoints/routing.md b/content/docs/v9.0.0/api-endpoints/routing.md
similarity index 58%
rename from content/docs/v6.2.0/api-endpoints/routing.md
rename to content/docs/v9.0.0/api-endpoints/routing.md
index 5580080f..f30667ac 100644
--- a/content/docs/v6.2.0/api-endpoints/routing.md
+++ b/content/docs/v9.0.0/api-endpoints/routing.md
@@ -16,11 +16,11 @@ In order to prefix all your mock API routes,
Open the **Environment Settings** by clicking on the tab at the top of the window:
-![click on the settings tab{871x160}](docs-img:open-environment-settings.png)
+![click on the settings tab{921x160}](docs-img:open-environment-settings.png)
Then, fill the **API prefix** input at the top of the **environment Settings**:
-![fill the prefix input{993x298}](docs-img:environment-prefix.png)
+![fill the prefix input{1128x298}](docs-img:environment-prefix.png)
The prefix will appear under your environment name in the environments list. All your environment's routes will now be prefixed and available at the following address `http://localhost:port/myprefix/myroute` instead of `http://localhost:port/myroute`.
@@ -45,36 +45,42 @@ Routes support certain patterns and a subset of regular expressions. Here are so
- `/ab+cd` will match `abcd`, `abbcd`, `abbbcd`, and so on.
- `/ab(cd)?e` will match `/abe` and `/abcde`.
-![route pattern{995x74}](docs-img:route-patterns.png)
+![route pattern{1123x74}](docs-img:route-patterns.png)
For a complete overview of the patterns available, please refer to Express' [route paths documentation](https://expressjs.com/en/guide/routing.html#route-paths).
-> To use parentheses in your path as a normal character, you can escape them by either using a backslashe `\` or square brackets `[]`:
+> 💡 To use parentheses in your path as a normal character, you can escape them by either using a backslashe `\` or square brackets `[]`:
> `/part1[(]part2[)]` > `/part1\(part2\)`
### Route parameters
Route parameters can be defined in routes by using a colon `:`. The name of a parameter can only contains the following characters `A-Za-z0-9_`.
-![route parameter{995x74}](docs-img:route-params.png)
+![route parameter{1123x74}](docs-img:route-params.png)
For a complete overview on how to use and declare route parameters, please refer to Express' [route parameters documentation](https://expressjs.com/en/guide/routing.html#route-parameters).
You can also retrieve the route parameters by using the `{{urlParam 'paramName'}}` [templating helper](docs:templating/mockoon-request-helpers#urlparam).
-> To use a colon `:` in your route path as a normal character, you can escape it by either using double backslashes `\\` or square brackets `[]`:
+> 💡 To use a colon `:` in your route path as a normal character, you can escape it by either using double backslashes `\\` or square brackets `[]`:
> `/part1[:]part2` > `/part1\\:part2`
### Query parameters
Routes **must** be declared without query parameters as they are not part of the route path. They can only be added to the request when calling an endpoint.
-Query parameters can be retrieved by using the `{{queryParam 'paramName'}}` [templating helper](docs:templating/mockoon-request-helpers#queryparam).
+Query parameters can be retrieved with the **[`queryParam`](docs:/docs/latest/templating/mockoon-request-helpers/#queryparam) and [`queryParamRaw`](docs:/docs/latest/templating/mockoon-request-helpers/#queryparamraw) helpers** and are available in the **[response rules](docs:route-responses/dynamic-rules)** to check their content and serve different responses based on them.
-#### Query parameters arrays and objects
+**Arrays and objects are supported** in the query string. For more information, please refer to the [query parameters documentation](docs:requests/query-parameters).
-Mockoon is using [qs](https://www.npmjs.com/package/qs) to parse the query string in a object usable in our templating or rules systems. It supports both arrays and objects.
-To pass arrays and objects in the query string of a request, you must use the following syntax:
+### Temporarily disable a route
-- for objects: `?param1=test&obj[prop1]=value`.
-- for arrays: `?param1=test&array[]=value1&array[]=value2` or `?param1=test&array[0]=value1&array[1]=value2` or `?param1=test&array=value1,value2`.
+You can **disable a route** by clicking on the **Toggle route** entry in the route dropdown menu. The route will be marked with a red border and will not be accessible until you enable it again.
+
+![disable route entry in the route dropdown menu{651x322}](docs-img:route-menu-disable-route.png)
+
+You can also disable all routes in a folder by using the **Toggle direct child routes** entry in the folder dropdown menu.
+
+When running your mock API using the [CLI](/cli/), you can [disable routes using the `--disable-routes` flag](https://github.com/mockoon/mockoon/tree/main/packages/cli#disabling-routes) followed by a route UUID or keyword/name or a folder keyword/name: `mockoon start --disable-routes myroute folder2`.
+
+When using the [serverless package](/serverless/), you can [disable routes using the `disabledRoutes` option](https://github.com/mockoon/mockoon/tree/main/packages/serverless#disabling-routes).
diff --git a/content/docs/v9.0.0/api-endpoints/websockets.md b/content/docs/v9.0.0/api-endpoints/websockets.md
new file mode 100644
index 00000000..51303154
--- /dev/null
+++ b/content/docs/v9.0.0/api-endpoints/websockets.md
@@ -0,0 +1,90 @@
+---
+title: WebSockets
+meta:
+ title: Mockoon WebSockets documentation
+ description: All you need to know about Mockoon's mock WebSocket route creation, behavior, and their response machanisms.
+order: 230
+---
+
+# WebSockets
+
+---
+
+## Overview
+
+While HTTP routes operate on a request-response paradigm, WebSockets offer a different approach. They enable **real-time**, **two-way communication** between a client and server, allowing for more dynamic and interactive applications, such as chats and live event updates.
+
+When a client sends a connection request to a WebSocket endpoint, the server establishes a persistent connection that remains active until either the client or server terminates it. While connected, both the client and server can freely exchange messages.
+
+There are several communication patterns that can be implemented within a WebSocket route in Mockoon, as shown below:
+
+### 1. Conversational mode
+
+This communication style is similar to the HTTP request-response model but operates continuously. The server responds to each message sent by the client, and vice-versa.
+
+### 2. Server Streaming Mode
+
+Unlike the conversational style, one party (typically the server) sends messages at regular intervals after the connection is established. In this mode, the server ignores messages from clients and operates independently. Several streaming modes are available:
+
+- **One-to-One streaming (Unicast)**: In this mode, each client receives a set of streaming messages independent of others. This means messages are not shared with other connected clients. For example, subscription-based streaming services deliver content based on individual user requests.
+
+- **One-to-Many streaming (Multicast)**: In multicast mode, the server sends messages to specific subsets of connected clients. An example is online gaming or chat rooms, where only participants in the room receive the relevant messages.
+
+- **Broadcasting**: In this mode, all clients receive the same messages in the same order at the same intervals. Events are published regardless of whether a client is connected. For example, global live streams, where anyone can subscribe and consume content.
+
+> ⚠️ _A note about Socket.IO_: Mockoon does **not** implement Socket.IO's protocol. It supports native WebSockets using the standard WebSocket protocol (`ws://` or `wss://`). As a result, Socket.IO clients will not be able to connect to WebSocket routes served by Mockoon.
+
+Mockoon introduced support for WebSockets in [v9.0.0](/releases/9.0.0/), offering all of these communication styles.
+
+## Add a WebSockets route
+
+To create a **new WebSocket route**, click on the **"WebSocket"** entry in the add route menu:
+
+![Add a new WebSocket route{498x335}](docs-img:add-ws-route.png)
+
+You can then configure the route's **path** as you would for an HTTP route. The path is the URL that clients will use to connect to the WebSocket endpoint. The path can be any valid URL path, such as `/ws`, `/chat`, or `/messages`. This lets you create multiple WebSocket endpoints within the same API mock instance.
+
+![view of a new WebSocket route{1484x176}](docs-img:set-ws-route-path.png)
+
+By default, a newly created WebSocket endpoint operates in **conversational mode**, where the **server responds to each client message** with an empty message by default, which you can customize. A response is guaranteed for every message sent by the client, unless the client terminates the connection immediately after sending the message.
+
+> 💡 If you have setup **TLS** on your mock server, WebSocket routes will automatically be served via secure endpoints. Instead of `ws://`, use its secure alternative `wss://` when connecting.
+
+## Creating a WebSocket streaming endpoint
+
+Mockoon offers two streaming modes: **One-to-One streaming** and **Broadcast streaming**. These modes allow you to send messages at regular intervals to connected clients. If neither mode is selected (the default), the endpoint operates in **conversational mode**, where the server responds to each client message.
+
+### Choosing a streaming mode
+
+To implement **One-to-One streaming mode**, select the option labeled "One-to-One Streaming" in the route configuration as shown below:
+
+![One-to-One Streaming option{884x237}](docs-img:toggle-ws-unicast-streaming.png)
+
+Similarly, select the option labeled "Broadcast Streaming" to implement a **broadcasting endpoint**:
+
+![Broadcast Streaming option{884x237}](docs-img:toggle-ws-broadcast-streaming.png)
+
+In broadcasting mode, all clients connected to a particular endpoint will receive identical messages, regardless of their accompanying parameters. Practically, **response rules will be disabled** and have no effect on the response contents. In contrast, in One-to-One streaming mode, response rules will be applied to each client message.
+
+> 💡 **Multicasting:** You can currently achieve multicasting by configuring multiple distinct endpoints. Each endpoint should be of the broadcast type, and clients must connect to the appropriate endpoint to receive messages intended for that particular group. All clients connected to a given endpoint will receive the same set of messages.
+
+#### Specifying the message interval in streaming mode
+
+When either "One-to-One" or "Broadcasting" mode is in effect, the **message interval field** becomes enabled. This allows you to specify the interval between streaming messages in milliseconds.
+
+Currently, the minimum interval allowed between two streaming messages is 10 milliseconds. This restriction prevents the server from being overwhelmed by the need to produce a large number of messages within a short timeframe.
+
+## Customizing your WebSocket route
+
+WebSocket endpoints support most of the same customization options as HTTP endpoints. You can use features like [templating](docs:templating/overview), [global variables](docs:variables/global-variables), and [data buckets](docs:data-buckets/overview) to generate dynamic message content. For detailed information, please refer to the respective documentation.
+
+> 💡 Mockoon will honor the `Content-Type` header to access message content sent by the client while processing rules and responses. Depending on the WebSocket client library being used, users may be able to set the headers when connecting to a WebSocket endpoint. If the headers cannot be set during the connection, the server will treat incoming messages as raw strings.
+
+Some response menu tabs are hidden for WebSocket endpoints, as they are not relevant in this context. These include the **Headers**, **Callbacks**, and **Settings** tabs.
+
+## Limitations
+
+Some limitations apply to WebSocket endpoints in Mockoon:
+
+- The [**fallback mode**](docs:route-responses/multiple-responses#fallback-mode) (sending the request to the next endpoint or proxied server when no rules match) is not supported for WebSocket endpoints.
+- The [**logs tab**](docs:logging-and-recording/requests-logging) offers limited recording capabilities for WebSocket requests. Requests sent to unknown routes will not be recorded. Additionally, Mockoon currently does not record subsequent request messages or responses for existing routes. This may change in future releases.
diff --git a/content/docs/v6.2.0/callbacks/overview.md b/content/docs/v9.0.0/callbacks/overview.md
similarity index 91%
rename from content/docs/v6.2.0/callbacks/overview.md
rename to content/docs/v9.0.0/callbacks/overview.md
index b477cc57..5fcd6337 100644
--- a/content/docs/v6.2.0/callbacks/overview.md
+++ b/content/docs/v9.0.0/callbacks/overview.md
@@ -20,11 +20,11 @@ Callbacks are fully configurable and are created at the environment level, like
To create a new callback, open the **Callbacks** options by clicking on the tab at the top of the window:
-![click on the callbacks tab at the top{955x160}](docs-img:open-callbacks-view.png)
+![click on the callbacks tab at the top{1005x160}](docs-img:open-callbacks-view.png)
Add a new callback by clicking on the "plus" button:
-![Add a new callback by clicking on the plus button{1264x578}](docs-img:add-callback.png)
+![Add a new callback by clicking on the plus button{1484x576}](docs-img:add-callback.png)
## Configure a callback
diff --git a/content/docs/v6.2.0/callbacks/using-callbacks.md b/content/docs/v9.0.0/callbacks/using-callbacks.md
similarity index 62%
rename from content/docs/v6.2.0/callbacks/using-callbacks.md
rename to content/docs/v9.0.0/callbacks/using-callbacks.md
index b64f3429..ce598ea6 100644
--- a/content/docs/v6.2.0/callbacks/using-callbacks.md
+++ b/content/docs/v9.0.0/callbacks/using-callbacks.md
@@ -2,7 +2,7 @@
title: Using callbacks
meta:
title: Using callbacks
- description: Learn how to use Mockoon's callbacks, link them to your route responses and delay their execution
+ description: Learn how to use Mockoon's callbacks or webhooks, link them to your route responses and delay their execution
order: 651
---
@@ -16,10 +16,10 @@ After [creating callbacks](docs:callbacks/overview), you can link them in your r
To link a callback to a route response, choose "Callbacks" in the route response menu:
-![click on the callbacks tab in the route response menu{997x153}](docs-img:open-route-response-callbacks.png)
+![click on the callbacks tab in the route response menu{1174x174}](docs-img:open-route-response-callbacks.png)
Then, click on the "plus" button to add a new callback, and select the callback you want to link:
-![click on the plus button to add a new callback{977x234}](docs-img:link-callback-response.png)
+![click on the plus button to add a new callback{1147x234}](docs-img:link-callback-response.png)
> 💡 You can **delay a callback execution** by adding a delay in milliseconds in the "Callback latency" field.
diff --git a/content/docs/v6.2.0/data-buckets/overview.md b/content/docs/v9.0.0/data-buckets/overview.md
similarity index 72%
rename from content/docs/v6.2.0/data-buckets/overview.md
rename to content/docs/v9.0.0/data-buckets/overview.md
index 6ecf2efa..156738e7 100644
--- a/content/docs/v6.2.0/data-buckets/overview.md
+++ b/content/docs/v9.0.0/data-buckets/overview.md
@@ -20,11 +20,11 @@ The data buckets are defined at the **environment level** and are **generated wh
To create a new data bucket, open the **Data** options by clicking on the tab at the top of the window:
-![Open data bucket view{745x160}](docs-img:open-data-view.png)
+![Open data bucket view{795x160}](docs-img:open-data-view.png)
Add a new data bucket by clicking on the "plus" button:
-![Add a data bucket{1264x578}](docs-img:add-data-bucket.png)
+![Add a data bucket{1484x576}](docs-img:add-data-bucket.png)
You can change the data bucket title and content on the right part of the screen.
Mockoon will automatically attribute a new **unique ID** to your data bucket. You can use this ID to reference the data using the [`data` helpers](docs:data-buckets/using-data-buckets#using-data-helpers). To retrieve a bucket's unique ID, look in the footer under the data bucket content or right-click on a bucket name in the list and click on "Copy ID to clipboard".
@@ -52,6 +52,10 @@ You can easily combine your data bucket contents by referencing other data bucke
## Data buckets generation
-Data buckets are generated when the server starts in the order they are defined in the environment. Their state persist during all mock API calls. To regenerate a data bucket's content, restart the mock server.
+Data buckets are generated when the **server starts** in the order they are defined in the environment. Their state persist during all mock API calls and are shared between all routes.
-If a data bucket contains [request helpers](docs:templating/mockoon-request-helpers), Mockoon will generate the bucket content only after the first call made to a route using this data bucket (by referencing it directly or using a data helper). It allows you to create bucket "configuration" routes that you can call programmatically with the content you want to reuse in your bucket using the request helpers (`body`, `queryParams`, etc.).
+If a data bucket contains [request helpers](docs:templating/mockoon-request-helpers), Mockoon will generate the bucket content only **after the first call** made to a route using this data bucket (by referencing it directly or using a data helper). It allows you to create bucket "configuration" routes that you can call programmatically with the content you want to reuse in your bucket using the request helpers (`body`, `queryParams`, etc.).
+
+## Resetting data buckets
+
+To regenerate a data bucket's content, you can restart the mock server or you can also use the [admin API state purge endpoint](docs:admin-api/server-state) or specific [data buckets endpoint](docs:admin-api/data-buckets).
diff --git a/content/docs/v9.0.0/data-buckets/using-data-buckets.md b/content/docs/v9.0.0/data-buckets/using-data-buckets.md
new file mode 100644
index 00000000..1c18b6b0
--- /dev/null
+++ b/content/docs/v9.0.0/data-buckets/using-data-buckets.md
@@ -0,0 +1,83 @@
+---
+title: Using data buckets
+meta:
+ title: Using data buckets
+ description: Learn how to use Mockoon's data buckets, using the two data and dataRaw helpers, or by directly linking the bucket to a route response
+order: 610
+---
+
+# Using data buckets
+
+---
+
+After [creating data buckets](docs:data-buckets/overview), you can use them through the `data` templating helpers or by directly referencing them in a route response or CRUD route.
+
+## Using data helpers
+
+### Retrieving data
+
+Two helpers are available: [`data`](docs:templating/mockoon-helpers#data) and [`dataRaw`](docs:templating/mockoon-helpers#dataraw). They work in a similar way to the [`body`](docs:templating/mockoon-request-helpers#body) and [`bodyRaw`](docs:templating/mockoon-request-helpers#bodyraw) helpers.
+
+They can be used [anywhere templating helpers are supported](docs:templating/overview): body editor, files, headers keys and values, etc., and allow you to partially reuse your data bucket content and compose dynamic responses body easily.
+
+Both helpers support retrieving the data bucket by its unique ID or name. It also allows you to retrieve only part of the data bucket using an optional object path:
+
+```handlebars
+{{data 'ID_or_name' 'object.path'}}
+```
+
+> 💡 To retrieve data at a specific path, the content of the data bucket must be valid JSON.
+
+Head over to the [data helpers' documentation](docs:templating/mockoon-helpers#data) to see more examples.
+
+### Setting data programmatically
+
+A [`setData`](docs:templating/mockoon-helpers#setdata) helper is available to set the content of a data bucket programmatically. It can be used [anywhere templating helpers are supported](docs:templating/overview).
+
+This helper is useful when you want to update the content of a data bucket, push a new value to an array, delete a property, increment or decrement a number, or invert a boolean:
+
+```handlebars
+{{setData 'set' 'bucketNameOrId' 'path.to.property' 'newValue'}}
+{{setData 'push' 'bucketNameOrId' 'path.to.array' 'newValue'}}
+{{setData 'del' 'bucketNameOrId' 'path.to.property'}}
+{{setData 'inc' 'bucketNameOrId' 'path.to.property' 2}}
+{{setData 'dec' 'bucketNameOrId' 'path.to.property' 2}}
+{{setData 'invert' 'bucketNameOrId' 'path.to.property'}}
+```
+
+> 💡 To set data at a specific path, the content of the data bucket must be valid JSON.
+
+Head over to the [`setData` helper documentation](docs:templating/mockoon-helpers#setdata) to see more examples.
+
+## Link a bucket to a CRUD route
+
+When creating a **CRUD route** you must link a data bucket. This feature allows you to **serve** and **manipulate** the **data bucket content** depending on the **CRUD operations**. The CRUD routes follow usual REST conventions: `GET /resources`, `POST /resources`, `PUT /resources/:id`, `DELETE /resources/:id`, etc.
+
+Head over to the dedicated [CRUD routes documentation](docs:api-endpoints/crud-routes) to learn more about this feature.
+
+## Referencing a bucket in a route response
+
+A data bucket can also be directly **linked** to a route response. Linking a data bucket will serve the generated data bucket content "as-is".
+
+To link a data bucket to a route response, choose "Data" in the body selector and select your data bucket.
+
+![Using data bucket in a route response{1172x464}](docs-img:link-data-bucket-response.png)
+
+## Storing JSON schemas
+
+A data bucket can also store a **JSON schema**. This schema can be used in the [rules system](docs:route-responses/dynamic-rules#5-value), using the **"valid JSON schema"** operator to validate the targeted property using [ajv](https://www.npmjs.com/package/ajv).
+
+To store a JSON schema in a data bucket, create a new data bucket and paste your JSON schema in the content editor. The schema must be a valid JSON object:
+
+```json
+{
+ "type": "object",
+ "properties": {
+ "name": { "type": "string" },
+ "age": { "type": "number" }
+ },
+ "required": ["name", "age"]
+}
+```
+
+You will then be able to reference this full schema in a rule's value field (e.g. `dataBucketNameOrId`), or a specific schema's property using the [object-path](https://www.npmjs.com/package/object-path) syntax (e.g. `dataBucketNameOrId.name`).
diff --git a/content/docs/v6.2.0/gui-cheat-sheet.md b/content/docs/v9.0.0/gui-cheat-sheet.md
similarity index 100%
rename from content/docs/v6.2.0/gui-cheat-sheet.md
rename to content/docs/v9.0.0/gui-cheat-sheet.md
diff --git a/content/docs/v6.2.0/logging-and-recording/auto-mocking-and-recording.md b/content/docs/v9.0.0/logging-and-recording/auto-mocking-and-recording.md
similarity index 86%
rename from content/docs/v6.2.0/logging-and-recording/auto-mocking-and-recording.md
rename to content/docs/v9.0.0/logging-and-recording/auto-mocking-and-recording.md
index 61b0e836..43098d17 100644
--- a/content/docs/v6.2.0/logging-and-recording/auto-mocking-and-recording.md
+++ b/content/docs/v9.0.0/logging-and-recording/auto-mocking-and-recording.md
@@ -3,7 +3,7 @@ title: Auto-mocking and recording
meta:
title: Automatic API mock creation
description: Learn how to automatically mock your API endpoints manually or by recording all the entering requests made to an existing API
-order: 710
+order: 701
---
# Automatically create mock routes
@@ -16,17 +16,17 @@ You can automatically create mock routes from HTTP transactions (request/respons
Mockoon offers the possibility to automatically create mocks for entering requests. Click on the "plus" icon on a record to create a route containing the same information (headers, body, etc.):
-![create a route from a log{1214x633}](docs-img:logs-auto-mocking.png)
+![create a route from a log{1384x633}](docs-img:logs-auto-mocking.png)
## Record your API calls
Mockoon can also automatically create mock API endpoints every time a request is logged. To activate this feature, click on the "Record" button at the top of the logs view:
-![click on the record button{1214x633}](docs-img:logs-start-recording.png)
+![click on the record button{1384x633}](docs-img:logs-start-recording.png)
You can record in multiple environments at the same time. A red blinking recording icon will appear next to the environment name to indicate that the recording is active:
-![recording icon{964x433}](docs-img:logs-recording-in-progress.png)
+![recording icon{1184x433}](docs-img:logs-recording-in-progress.png)
The recording will only create a route once, based on the path and HTTP method.
diff --git a/content/docs/v6.2.0/logging-and-recording/requests-logging.md b/content/docs/v9.0.0/logging-and-recording/requests-logging.md
similarity index 74%
rename from content/docs/v6.2.0/logging-and-recording/requests-logging.md
rename to content/docs/v9.0.0/logging-and-recording/requests-logging.md
index 5650ec92..f1ac94b9 100644
--- a/content/docs/v6.2.0/logging-and-recording/requests-logging.md
+++ b/content/docs/v9.0.0/logging-and-recording/requests-logging.md
@@ -12,9 +12,11 @@ order: 700
## Accessing the logs
-For easier debugging, Mockoon records all entering requests and all the corresponding outgoing responses for each of your mock API. To access an environment's log, click on the "Logs" tab at the top of the window:
+For easier debugging, Mockoon **records all entering requests** and all the corresponding **outgoing responses** for each of your mock API. To access an environment's log, click on the "Logs" tab at the top of the window:
-![click the logs tab{913x160}](docs-img:open-logs.png)
+![click the logs tab{963x160}](docs-img:open-logs.png)
+
+> 💡 You can also **retrieve the logs programmatically** using the [admin API](docs:admin-api/transaction-logs) when running your mock with the desktop application, the CLI or the serverless library.
## Logs content
@@ -22,21 +24,15 @@ The list shows all intercepted requests and how Mockoon answered to them.
Please note that all requests are intercepted, even the `/favicon` request made by the browser.
Each record contains the entering request and the outgoing response information. This includes the complete list of headers, route params, query params, and body in raw format.
-![view the request{1214x633}](docs-img:logs-request.png)
-
-![view the response{1214x633}](docs-img:logs-response.png)
-
-The interface is showing truncated bodies for both the request and the response (the truncation length can be adjusted in the settings). You can still view them in full in a separated editor by clicking on **View full body in editor**:
-
-![click on view full body in editor link{1214x633}](docs-img:logs-view-body.png)
+![view the request{1384x633}](docs-img:logs-request.png)
-![body content is showed in a modal{860x696}](docs-img:logs-view-body-modal.png)
+![view the response{1384x633}](docs-img:logs-response.png)
## Logs metadata
You can also easily see if a request has been caught by Mockoon (record shows a green tick) or has been passed to another URL if the [proxy mode](docs:server-configuration/proxy-mode) is activated (record shows a shield icon):
-![view logs metadata{1214x633}](docs-img:logs-metadata.png)
+![view logs metadata{1384x633}](docs-img:logs-metadata.png)
## File logging
@@ -87,9 +83,7 @@ When using this option, logs will contain the full transaction (request and resp
},
"response": {
"body": "{}",
- "headers": [
- { "key": "content-type", "value": "application/json; charset=utf-8" }
- ],
+ "headers": [{ "key": "content-type", "value": "application/json; charset=utf-8" }],
"statusCode": 200,
"statusMessage": "OK"
},
diff --git a/content/docs/v9.0.0/mockoon-cloud/api-mock-cloud-deployments.md b/content/docs/v9.0.0/mockoon-cloud/api-mock-cloud-deployments.md
new file mode 100644
index 00000000..185cfd21
--- /dev/null
+++ b/content/docs/v9.0.0/mockoon-cloud/api-mock-cloud-deployments.md
@@ -0,0 +1,87 @@
+---
+title: Cloud API mock deployments
+meta:
+ title: Cloud API mock deployments
+ description: Learn how to deploy your mock APIs in the cloud and share them with your team, clients, or class, using Mockoon Cloud
+order: 901
+---
+
+# Cloud API mock deploymentsCloud
+
+---
+
+[Mockoon Cloud](/cloud/) allows you to **deploy your mock APIs in the cloud** and share them with your team, clients, or class. This feature is available in the desktop application and is part of the Mockoon Cloud paid plans. Read on to learn how to use it and the different features it offers.
+
+## Managing your cloud deployments
+
+### Deploy an environment to the cloud
+
+You can **deploy an environment** to the cloud using the context menu in the local or cloud environments list and selecting **"Deploy to the cloud"**:
+
+![context menus to deploy cloud environments{513x507}](docs-img:deploy-environment-menu.png)
+
+In the deployment dialog, you can further customize the deployment by selecting the **visibility** of the environment:
+
+- **Public**: The environment will be accessible to anyone with the URL.
+- **Private**: The environment will be accessible only to users with the URL and the **API key**.
+
+![deployment dialog{800x225}](docs-img:deploy-environment-dialog.png)
+
+After clicking the **"Deploy"** button, the environment will be uploaded to the cloud and will be accessible using the provided URL. In the management dialog, you can find the URL and the API key to access the environment. You can also re-deploy the environment or delete the instance:
+
+![deployment management dialog{799x205}](docs-img:deploy-environment-management-dialog.png)
+
+### Re-deploy or delete a cloud instance
+
+In the management dialog, you can **re-deploy** the environment or **delete** the instance using the menu:
+
+![deployment management dialog re-deploy or delete the instance menu{902x235}](docs-img:deploy-environment-management-menu.png)
+
+## Instance URL and visibility
+
+The instance will be deployed on a shared cloud infrastructure and will be accessible using a unique URL in the form of `https://mock-abcd1234.serverid.mockoon.app`. The URL will be displayed in the management dialog and can be shared with your team, clients, or class.
+
+The visibility of the environment can be set to **public** or **private**. Here are the differences between the two:
+
+- **Public**: The environment is accessible to anyone with the URL.
+- **Private**: The environment is accessible only to users with the URL and the API key. The API key is displayed in the management dialog and must be included in the request `Authorization` header to access the environment.
+
+## Unsupported features
+
+The cloud deployment feature does not support the following features:
+
+- Custom TLS and hostnames are not supported and will be disabled in the cloud environment.
+- External files linked to the environment are not uploaded and served (e.g. environment's certificates or files used in the "File" response body type). File serving is generally not supported in the cloud environment.
+- The proxy mode will be disabled if it points to a local address or IP (e.g. `localhost` or `127.0.0.1`).
+- Callbacks pointing to a local address or IP (e.g. `localhost` or `127.0.0.1`) will be disabled.
+- WebSockets are currently not supported but will be added in a future version.
+
+## Major versions migrations
+
+Future major versions of Mockoon may introduce **breaking changes to the data model** of your environments. When this happens, instances already deployed to the cloud will continue to work with the previous version of Mockoon. However, you will need to **re-deploy** the environment to the cloud to benefit from the new features and improvements.
+
+> ⚠️ We strongly recommend to update your local Mockoon application as soon as possible to the latest version to avoid any compatibility issues.
+
+## Plans quotas and limits
+
+Some **quotas and limits apply** to the cloud deployment feature. Here are the main ones:
+
+- **Solo plan**:
+ - 1 cloud deployment.
+ - 50 000 requests per month.
+ - 3 requests per second (1 request per second during trial).
+- **Team plan**:
+ - 3 cloud deployments.
+ - 100 000 requests per month.
+ - 5 requests per second (1 request per second during trial).
+
+These quotas and limits are subject to change. Please refer to your [account settings](/account/subscription/) for the latest information.
+
+## Future improvements
+
+The cloud deployment feature is still in its early stages. Here are some improvements we are working on:
+
+- Support for [**environment variables**](docs:admin-api/environment-variables).
+- Offer more instance locations and the ability to choose the closest one.
+- Possibility to customize the instance URL or link a custom domain to the instance.
+- Possibility to renew the API key.
diff --git a/content/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration.md b/content/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration.md
new file mode 100644
index 00000000..14aa6caa
--- /dev/null
+++ b/content/docs/v9.0.0/mockoon-cloud/data-synchronization-team-collaboration.md
@@ -0,0 +1,120 @@
+---
+title: Data synchronization and team collaboration
+meta:
+ title: Data synchronization and team collaboration
+ description: Learn how to use Mockoon Cloud to synchronize your data across your team and collaborate on your mock API projects
+order: 902
+---
+
+# Data synchronization and team collaborationCLOUD
+
+---
+
+[Mockoon Cloud](/cloud/) allows you to **synchronize your mock APIs in the cloud**, share them with your team, and **collaborate in real time**. This feature is available in the desktop application and is part of the Mockoon Cloud paid plans. Read on to learn how to use it and the different features it offers.
+
+## Cloud vs local environments
+
+The **local environment** is the default environment in Mockoon. It is [stored on your local machine](docs:mockoon-data-files/data-storage-location) and not synchronized with the cloud.
+
+**Cloud environments** are stored on our servers, and a local copy is kept on each client's machine. You can easily **create a cloud copy** of your local environment or **convert an existing cloud environment** back to a local environment.
+
+![Cloud and local environments menus{200x231}](docs-img:cloud-sync-menu.png)
+
+## Managing your cloud environments
+
+### Create a cloud environment
+
+There are multiple ways to **create a cloud environment**. You can use the context menu in the local environments list to create a cloud environment from a local one using "Duplicate to the cloud" or create a new cloud environment from scratch using "New cloud environment" from the cloud environments menu.
+
+![context menus to create cloud environments{569x492}](docs-img:create-cloud-environment.png)
+
+The new cloud environment will be created and synchronized with the cloud, together with a local copy. It will be available on all your devices (solo plan) and for all your team members (team/enterprise plans) once they connect to the cloud.
+
+### Remove an environment from the cloud
+
+You can **remove an environment** from the cloud using the context menu in the cloud environments list and selecting "Convert to local" or "Delete from cloud":
+
+![context menu to convert a cloud environment to local{533x277}](docs-img:convert-cloud-to-local.png)
+
+After converting an environment to local, it will be **permanently removed from the cloud** and **converted to a local environment** on all your devices (solo plan) and for all your team members (team/enterprise plans).
+
+## Team collaboration and conflict handling
+
+This feature is designed to allow multiple users (Team and Enterprise plans) to work on the same environment at the same time. The application will handle conflicts on a **last-write-wins** basis, but many changes can be made simultaneously without conflicts, for example:
+
+- Editing different properties of the same entity (route, response, etc.).
+- Adding the same kind of entity (route, response, etc.) or reordering them.
+- Deleting different entities.
+
+However, some parts of the environment definition cannot be edited simultaneously and are considered as a single entity that cannot be merged and will be synchronized as a whole. Here are some examples:
+
+- The environment's or route response's headers list.
+- The route response's rules or callbacks list.
+- The various editors content (inline body, data bucket, callback, etc.).
+
+**Presence indicators** are displayed in the application to show who is currently **connected** and **editing** an environment. They are visible in the cloud environments list, indicating if a user is editing an environment (left side of the image). Additionally, presence indicators are shown at the top of the application, displaying the users currently connected to the cloud space (right side of the image).
+
+![Presence indicators{668x157}](docs-img:presence-indicators.png)
+
+> 💡 You can customize your display name in the [application settings](/account/info/) to make it easier for your team members to identify you.
+
+## Offline editing
+
+Mockoon's synchronization and collaboration features are primarily designed to work while being **online**. Offline editing works to some extent, but it is **not recommended to simultaneously edit** the same environment while being offline.
+
+When you are offline, a warning is shown in the cloud environments list:
+
+![#sub#Warning shown when the application is offline{391x209}](docs-img:offline-editing-warning.png)
+
+When you modify an environment while being offline and go back online, three scenarios can happen:
+
+- **You made local changes**, but **the cloud version was not modified**: your local changes will be automatically **pushed** to the cloud.
+- **You did not make local changes**, but **the cloud version was modified**: the cloud version will be pulled automatically to your local environment.
+- **You made local changes**, and **the cloud version was modified**: you will be prompted to **choose** between **keeping** your local changes or **discarding** them.
+
+![#sub#Dialog shown when the application detected a conflict{504x241}](docs-img:offline-conflict-warning.png)
+
+> ⚠️ If multiple users edit the same environment while offline, **only one version of the environment will be kept** and the others will be discarded.
+
+## Disconnection reasons
+
+If you are disconnected from the cloud, the application will display a warning in the cloud environments list in the form of a orange or red cloud icon. Hovering over the icon will display the reason for the disconnection (e.g. incompatible version, etc.). You can also click on the icon to try to reconnect:
+
+![#sub#Tooltip showing a regular disconnection{287x219}](docs-img:offline-reason-disconnected.png)
+
+![#sub#Tooltip showing a disconnection due to an incompatible version{288x221}](docs-img:offline-reason-incompatible-version.png)
+
+## Major versions migrations
+
+Future major versions of Mockoon may introduce **breaking changes to the data model** of your environments. When this happens, the **first device (or user) to connect to the cloud storage will trigger the migration process**. The migration will update the data model of the cloud environments to the new version. Once the migration is complete, older versions of Mockoon will no longer be able to synchronize with your cloud space and will have to be updated.
+
+Here are the steps to follow to migrate your environments to a new major version when working in a team:
+
+1. **Coordinate** with your team to ensure that all users are aware of the upcoming migration.
+2. **Update** Mockoon desktop on one device to the new major version. This will trigger the migration process in you cloud space.
+3. **Update** Mockoon desktop on all other devices.
+
+> ⚠️ We strongly recommend that major updates installations are **coordinated** across your team to avoid any disruption.
+
+## Plans quotas and limits
+
+The data synchronization feature is available in the Solo and Team/Enterprise plans. The feature's behaviors are similar in all plans, but some **quotas and limits apply**. Here are the main ones:
+
+- **Solo plan**:
+ - 5 environments synchronized.
+ - 5MB per environment.
+- **Team plan**:
+ - 10 environments synchronized.
+ - 10MB per environment.
+
+For all users (Solo, Team, and Enterprise), the environments can be synchronized across an unlimited number of devices with a limit of 2 simultaneous devices per user.
+
+These quotas and limits are subject to change. Please refer to your [account settings](/account/subscription/) for the latest information.
+
+## Limitations
+
+Here is a list of limitations of the current version of the data synchronization feature:
+
+- External files linked to the environment are not synchronized (e.g. environment's certificates or files used in the "File" response body type).
+- The CLI and serverless package do not support access to cloud environments yet.
+- Team and Enterprise plans are currently not offering a personal cloud space for each user. All environments are shared across the team.
diff --git a/content/docs/v9.0.0/mockoon-cloud/overview.md b/content/docs/v9.0.0/mockoon-cloud/overview.md
new file mode 100644
index 00000000..412d7232
--- /dev/null
+++ b/content/docs/v9.0.0/mockoon-cloud/overview.md
@@ -0,0 +1,27 @@
+---
+title: Overview
+meta:
+ title: Discover Mockoon Cloud
+ description: Deploy your mock APIs in the cloud, synchronize your data across your team, and collaborate on your mock API projects using Mockoon Cloud
+order: 900
+---
+
+# Discover Mockoon Cloud
+
+---
+
+[Mockoon Cloud](/cloud/) is a set of features that allows you to **deploy your mock APIs in the cloud**, **synchronize your data across your team**, and **collaborate on your mock API projects**.
+
+Mockoon Cloud features are available in the [desktop application](/download/) and are part of the Mockoon Cloud paid plans. Read on to learn how to use it and the different features it offers.
+
+## Features
+
+- **[API mock deployments](docs:mockoon-cloud/api-mock-cloud-deployments)**: Deploy your mock APIs in the cloud and share them with your team, clients, or class.
+- **[Data synchronization and team collaboration](docs:mockoon-cloud/data-synchronization-team-collaboration)**: Synchronize your mock APIs in the cloud, share them with your team, and collaborate in real time.
+- **[AI assistants](docs:mockoon-cloud/templates-and-ai-assistant)**: Use our AI assistants to generate realistic mock data and HTTP endpoints.
+
+## Getting started
+
+To use Mockoon Cloud features, you need to **create a Mockoon Cloud account** and [**subscribe to a paid plan**](/cloud/). You can then **log in** to the desktop application and start using the features.
+
+Follow our [getting started guide](/tutorials/getting-started-with-mockoon-cloud/) to learn how to setup your account and start using Mockoon Cloud.
diff --git a/content/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant.md b/content/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant.md
new file mode 100644
index 00000000..cd5ab3cb
--- /dev/null
+++ b/content/docs/v9.0.0/mockoon-cloud/templates-and-ai-assistant.md
@@ -0,0 +1,79 @@
+---
+title: AI assistants
+meta:
+ title: Mockoon templates and AI assistants documentation
+ description: All you need to know about Mockoon's mock API ready to use JSON templates and AI assistants to generate your own dynamic and realistic templates.
+order: 903
+---
+
+# Templates and AI assistantsCloud
+
+---
+
+## JSON templates assistant
+
+Mockoon **templates** are pieces of JSON, often with [templating helpers](docs:templating/overview), that can be used in Mockoon to quickly prototype your mock APIs. They can be used in your [HTTP route's](docs:api-endpoints/routing#api-routes) body or as [data bucket](docs:data-buckets/overview) content to create realistic and dynamic data.
+
+Two types of templates are available: **pre-generated** and **AI-generated**.
+
+### Use the pre-generated templates
+
+The pre-generated templates can be found in the desktop application.
+
+To use a template in your routes, click on the **"Assistants and templates"** entry in the route creation menu to open the templates dialog:
+
+![modal with templates list{498x335}](docs-img:pre-generated-templates-modal.png)
+
+Then, select the template you want to use and either copy-paste its content manually or click on one of the two buttons to create a new **GET endpoint** or a **CRUD endpoint with a data bucket**.
+
+![create get route from template{860x801}](docs-img:templates-create-get-route.png)
+
+The "GET route" button will create a new HTTP GET route and copy the template content as the body. The "CRUD + data" button will create a new CRUD endpoint with a linked data bucket and copy the template content as the data bucket content.
+
+> 💡 Starting with version 8.0.0 all the pre-generated templates are available for **free**.
+
+### Use the AI assistant to generate realistic templates
+
+You can also use our AI assistant to generate realistic mock data for your various endpoints by providing a custom prompt. This feature is available in the desktop application and is part of the [Mockoon Cloud](/cloud/) plans.
+
+To generate a new template, click the **"Assistants and templates"** button in the route creation menu (see above), and select the "Generate JSON templates" tab:
+
+![AI assistant generate tab{860x801}](docs-img:ai-assistant-generate-template-tab.png)
+
+Then, **write a prompt** (e.g. "list of users") and click the "Generate" button.
+
+![AI assistant generate button click{860x801}](docs-img:ai-assistant-generate-button.png)
+
+Finally, you can copy-paste the generated template manually or click on one of the two buttons to create a new **GET endpoint** or a **CRUD endpoint with a data bucket**.
+
+![create get route from template{860x801}](docs-img:templates-generate-get-route.png)
+
+### HTTP endpoints assistant
+
+A second AI assistant is available in the [Mockoon Cloud](/cloud/) plans to generate **realistic HTTP endpoints**. This feature works similarly to the JSON templates assistant but generates a full HTTP route with a **response body**, a **path**, a **method** and a **documentation**, based on your prompt.
+
+To generate a new HTTP endpoint, click the **"Assistants and templates"** button in the route creation menu (see above), and select the "Generate HTTP endpoints" tab:
+
+![AI assistant generate endpoint tab{860x801}](docs-img:ai-assistant-generate-endpoint-tab.png)
+
+Then, **write a prompt** (e.g. "Get a list of users") and click the "Generate" button.
+
+![AI assistant generate endpoint button click{860x801}](docs-img:ai-assistant-generate-endpoint-button.png)
+
+Finally, you can click on the **"Create HTTP route"** button to create a new endpoint from the generated data.
+
+![create full route from generated result{860x801}](docs-img:ai-assistant-generate-endpoint-create-button.png)
+
+## Writing prompts
+
+Mockoon AI assistants wrap your prompt with various instructions to help you generate the most relevant JSON templates or endpoints for your needs. It will **infer the structure** of the JSON you want to generate from your prompt (e.g. single object, array, etc.). You can enable or disable the use of Handlebars [templating helpers](docs:templating/overview) (e.g. `{{faker 'person.firstName'}}`) using the option next to the "Generate" button.
+
+![prompt templating option button{860x801}](docs-img:ai-assistant-template-generate-option.png)
+
+You will obtain best results with shorter prompts: "list of users", "JSON configuration for library X", etc.
+
+We put a lot of effort into making the AI assistants as accurate as possible, but it may not always generate the expected results. If you encounter any issues, please let us know by [contacting us](/contact/).
+
+## AI assistants quota
+
+Each use of the AI assistants will count as one credit towards your monthly quota. You can check your quota in your [account page](/account/subscription/).
diff --git a/content/docs/latest/mockoon-data-files/data-storage-location.md b/content/docs/v9.0.0/mockoon-data-files/data-storage-location.md
similarity index 100%
rename from content/docs/latest/mockoon-data-files/data-storage-location.md
rename to content/docs/v9.0.0/mockoon-data-files/data-storage-location.md
diff --git a/content/docs/latest/mockoon-data-files/environment-clipboard-copy.md b/content/docs/v9.0.0/mockoon-data-files/environment-clipboard-copy.md
similarity index 100%
rename from content/docs/latest/mockoon-data-files/environment-clipboard-copy.md
rename to content/docs/v9.0.0/mockoon-data-files/environment-clipboard-copy.md
diff --git a/content/docs/v6.2.0/mockoon-data-files/settings-and-logs.md b/content/docs/v9.0.0/mockoon-data-files/settings-and-logs.md
similarity index 98%
rename from content/docs/v6.2.0/mockoon-data-files/settings-and-logs.md
rename to content/docs/v9.0.0/mockoon-data-files/settings-and-logs.md
index 4dc4b640..3442a4e2 100644
--- a/content/docs/v6.2.0/mockoon-data-files/settings-and-logs.md
+++ b/content/docs/v9.0.0/mockoon-data-files/settings-and-logs.md
@@ -3,7 +3,7 @@ title: Settings and logs
meta:
title: Settings and logs
description: Learn where Mockoon's desktop application settings and log files are located for each operating system
-order: 930
+order: 1130
---
# Settings and logs
diff --git a/content/docs/v6.2.0/mockoon-data-files/sharing-mock-api-files.md b/content/docs/v9.0.0/mockoon-data-files/sharing-mock-api-files.md
similarity index 82%
rename from content/docs/v6.2.0/mockoon-data-files/sharing-mock-api-files.md
rename to content/docs/v9.0.0/mockoon-data-files/sharing-mock-api-files.md
index cf4c67d0..30d28a03 100644
--- a/content/docs/v6.2.0/mockoon-data-files/sharing-mock-api-files.md
+++ b/content/docs/v9.0.0/mockoon-data-files/sharing-mock-api-files.md
@@ -3,20 +3,20 @@ title: Sharing your mock API files
meta:
title: Sharing your mock API files
description: Learn how to easily share your mock API files with other mockoon users, or use them with the CLI, and setup a git repository
-order: 910
+order: 1110
---
# Sharing your mock API files
---
-> 🆕 Be among the first to experience our new cloud offering with **data synchronization** capabilities by [signing up for our waiting list](/cloud/).
+> ☁️ **Data synchronization and team collaboration** are available as part of our [Mockoon Cloud subscription](/cloud/). It allows you to share your environments with your team and collaborate in real-time.
### Sharing a mock API
Each file can be easily shared with other Mockoon's users, "as-is". After [locating your environment file](docs:mockoon-data-files/data-storage-location#locating-the-files), you can share it with your coworkers by using Git for example. You coworkers can then save the file in any folder and open it directly using the "Open environment" button:
-![open an environment{449x235}](docs-img:open-environment.png)
+![open an environment{625x299}](docs-img:open-environment.png)
### Use a Git-tracked folder
diff --git a/content/docs/v6.2.0/openapi/import-export-openapi-format.md b/content/docs/v9.0.0/openapi/import-export-openapi-format.md
similarity index 99%
rename from content/docs/v6.2.0/openapi/import-export-openapi-format.md
rename to content/docs/v9.0.0/openapi/import-export-openapi-format.md
index ab3b4e37..e8ef62b9 100644
--- a/content/docs/v6.2.0/openapi/import-export-openapi-format.md
+++ b/content/docs/v9.0.0/openapi/import-export-openapi-format.md
@@ -3,7 +3,7 @@ title: Import/export in OpenAPI format
meta:
title: Import/export in OpenAPI format
description: Learn how to easily import and export or share with your team your mock API servers and routes using the OpenAPI specification
-order: 800
+order: 1000
---
# Import/export in OpenAPI format
diff --git a/content/docs/v6.2.0/openapi/openapi-specification-compatibility.md b/content/docs/v9.0.0/openapi/openapi-specification-compatibility.md
similarity index 93%
rename from content/docs/v6.2.0/openapi/openapi-specification-compatibility.md
rename to content/docs/v9.0.0/openapi/openapi-specification-compatibility.md
index 070b4cd6..78815bf0 100644
--- a/content/docs/v6.2.0/openapi/openapi-specification-compatibility.md
+++ b/content/docs/v9.0.0/openapi/openapi-specification-compatibility.md
@@ -3,7 +3,7 @@ title: OpenAPI specification compatibility
meta:
title: OpenAPI specification compatibility
description: Learn more about Mockoon compatibility with the OpenAPI specification and how to easily share your API definitions with your team
-order: 810
+order: 1010
---
# OpenAPI specification compatibility
@@ -17,7 +17,7 @@ Importing an OpenAPI specification file in Mockoon can be a good starting point
- when importing an OpenAPI specification file, not all properties have equivalents in Mockoon, or some may not be implemented yet. See below for the list of imported information.
Importing from or exporting to an OpenAPI specification file is a good starting point but not a way to share your mock APIs created with Mockoon. For sharing, we recommend that you directly [share Mockoon's data files](docs:mockoon-data-files/sharing-mock-api-files).
-Also, if you want to run your mock API with the [CLI](/cli/), you must use [Mockoon's data files directly](/tutorials/self-host-mock-api-server-cli/), or you may lose part of your mock's behavior.
+Also, if you want to run your mock API with the [CLI](/cli/), you must use [Mockoon's data files directly](/tutorials/run-mock-api-anywhere-cli/), or you may lose part of your mock's behavior.
### Supported information
diff --git a/content/docs/v9.0.0/requests/query-parameters.md b/content/docs/v9.0.0/requests/query-parameters.md
new file mode 100644
index 00000000..50b6405d
--- /dev/null
+++ b/content/docs/v9.0.0/requests/query-parameters.md
@@ -0,0 +1,57 @@
+---
+title: Query parameters
+meta:
+ title: Query parameters usage and parsing
+ description: Learn how Mockoon parses query parameters and how to use them in your mock API responses.
+order: 155
+---
+
+# Query parameters
+
+---
+
+## Query parameters parsing
+
+Routes must be **declared without query parameters** as they are not part of the route path. They can only be added to the request when calling an endpoint.
+Mockoon is using the [qs NPM package](https://www.npmjs.com/package/qs) to parse query parameters in the URL. `qs` supports **nested objects and arrays** in the query string.
+
+As Mockoon is based on JavaScript, the body will be converted into a JSON object internally, which you can manipulate as you would any JSON object using dot notation or array notation.
+
+Example URL with query parameters:
+
+```text
+http://localhost:3000/route?param1=test¶m2=test2&array[]=value1&array[]=value2&obj[prop1]=value
+
+// alternative array syntaxes
+array[0]=value1&array[1]=value2
+array=value1,value2
+```
+
+Parsed query parameters:
+
+```json
+{
+ "param1": "test",
+ "param2": "test2",
+ "array": ["value1", "value2"],
+ "obj": {
+ "prop1": "value"
+ }
+}
+```
+
+## Where can I access the query parameters?
+
+The parsed query parameters will be available **everywhere [templating helpers](docs:templating/overview) are supported**: response body, headers, rules, data buckets, callbacks, etc. You will be able to use the [`queryParam`](docs:templating/mockoon-request-helpers#queryparam) and [`queryParamRaw`](docs:/docs/latest/templating/mockoon-request-helpers/#queryparamraw) to access the parsed parameters and create dynamic responses based on it.
+
+The parameters will also be **available in the [response rules](docs:route-responses/dynamic-rules)** to check their content and serve different responses based on them.
+
+Example `queryParam` templating helper usage:
+
+```handlebars
+{{queryParam 'param1'}}
+
+{{queryParam 'obj.prop1'}}
+
+{{queryParam '$.obj.prop1'}}
+```
diff --git a/content/docs/v9.0.0/requests/supported-body-formats.md b/content/docs/v9.0.0/requests/supported-body-formats.md
new file mode 100644
index 00000000..4594d06b
--- /dev/null
+++ b/content/docs/v9.0.0/requests/supported-body-formats.md
@@ -0,0 +1,164 @@
+---
+title: Supported body formats
+meta:
+ title: Supported request body formats
+ description: Learn about the supported request body formats in Mockoon, including JSON, form data, and URL-encoded data. How to use them and related options.
+order: 150
+---
+
+# Supported request body formats
+
+---
+
+## Request body parsing
+
+Mockoon supports the following **request body formats**, provided that the request's **`Content-Type` header** is correctly set:
+
+- [`application/json`](#json-support)
+- [`application/x-www-form-urlencoded`](#x-www-form-urlencoded-support)
+- [`multipart/form-data`](#multipart-form-data-support)
+- [`application/xml`](#xml-support)
+
+Invalid bodies will be parsed as strings.
+
+## What can I do with the parsed body?
+
+The parsed body will be available **everywhere [templating helpers](docs:templating/overview) are supported**: response body, headers, rules, data buckets, callbacks, etc. You will be able to use helpers like [`body`](docs:/docs/latest/templating/mockoon-request-helpers/#body) and [`bodyRaw`](docs:/docs/latest/templating/mockoon-request-helpers/#bodyraw) to access the parsed body content and create dynamic responses based on it.
+
+The body will also be **available in the [response rules](docs:route-responses/dynamic-rules)** to check its content and serve different responses based on it.
+
+As Mockoon is based on JavaScript, the body will be converted into a JSON object internally, which you can manipulate as you would any JSON object using dot notation or array notation.
+
+## JSON support
+
+JSON bodies will be parsed if the request Content-Type is set to `application/json` with or without extra parameters like `charset=utf-8` or vendor-specific subtypes like `application/vnd.com.example.object+json`.
+
+Example JSON body:
+
+```json
+{
+ "key": "value",
+ "nested": {
+ "key": "value"
+ }
+}
+```
+
+Example `body` templating helper usage:
+
+```handlebars
+{{body 'key'}}
+
+{{body 'nested.key'}}
+
+{{body '$.nested.key'}}
+```
+
+> 📘 Please refer to the [templating](docs:templating/overview) documentation for more information on how to use the `body` helper.
+
+> 🛠️ Use our [JSON validator tool](/tools/json-validator/) to validate your JSON body before using it in Mockoon.
+
+## X-WWW-Form-Urlencoded support
+
+When sending a request containing a **valid URL-encoded body and an `application/x-www-form-urlencoded` `Content-Type`**, Mockoon will parse the URL-encoded body using the [qs NPM package](https://www.npmjs.com/package/qs). qs supports nested objects and arrays in the URL-encoded body.
+
+Example URL-encoded body:
+
+```plaintext
+key1=value1&key2=value2&array[]=value1&array[]=value2
+
+// alternative array syntaxes
+array[0]=value1&array[1]=value2
+array=value1,value2
+```
+
+> 💡 The same syntax applies to the [parsing of query strings](docs:api-endpoints/routing#query-parameters-arrays-and-objects).
+
+Parsed body:
+
+```json
+{
+ "key1": "value1",
+ "key2": "value2",
+ "array": ["value1", "value2"]
+}
+```
+
+## Multipart form data support
+
+When sending a request containing a **valid multipart form data body** and a `multipart/form-data` `Content-Type`, Mockoon will parse the form data using the [busboy NPM package](https://www.npmjs.com/package/busboy). Fields will be parsed as strings, and files, while not saved to disk, will be processed and their metadata will be available in the parsed body.
+
+Example multipart form data body:
+
+```plaintext
+--X-BOUNDARY
+Content-Disposition: form-data; name="key1"
+
+value1
+--X-BOUNDARY
+Content-Disposition: form-data; name="key2"
+
+value2
+--X-BOUNDARY
+Content-Disposition: form-data; name="file"; filename="file.txt"
+Content-Type: text/plain
+
+file content
+--X-BOUNDARY--
+```
+
+Parsed body:
+
+```json
+{
+ "key1": "value1",
+ "key2": "value2",
+ "file": {
+ "filename": "file.txt",
+ "mimetype": "text/plain",
+ "size": 11
+ }
+}
+```
+
+## XML support
+
+When sending a request containing a valid XML body and an `application/xml`, `text/xml` or `application/soap+xml` `Content-Type`, Mockoon will parse the XML using the [**xml-js** NPM package](https://www.npmjs.com/package/xml-js) to convert the entering XML. Please note that the **xml-js** package converts XML into JSON in a particular way, as shown below:
+
+Entering XML body:
+
+```xml
+
+
+John
+Doe
+
+```
+
+JSON equivalent (compacted):
+
+```json
+{
+ "_declaration": {
+ "_attributes": {
+ "version": "1.0",
+ "encoding": "utf-8"
+ }
+ },
+ "user": {
+ "_attributes": {
+ "userID": "123"
+ },
+ "firstname": {
+ "_text": "John"
+ },
+ "lastname": {
+ "_text": "Doe"
+ }
+ }
+}
+```
+
+> 📘 Please refer to [xml-js documentation](https://www.npmjs.com/package/xml-js) for more detail on how the XML is parsed.
+
+> 🛠️ Use our [XML to JSON converter](/tools/xml-to-json/) to get a preview of how Mockoon will convert your XML to JSON. You can also use our [XML validator](/tools/xml-validator/) to make sure your XML is valid.
diff --git a/content/docs/v6.2.0/response-configuration/file-serving.md b/content/docs/v9.0.0/response-configuration/file-serving.md
similarity index 86%
rename from content/docs/v6.2.0/response-configuration/file-serving.md
rename to content/docs/v9.0.0/response-configuration/file-serving.md
index 4f09517c..49e396de 100644
--- a/content/docs/v6.2.0/response-configuration/file-serving.md
+++ b/content/docs/v9.0.0/response-configuration/file-serving.md
@@ -16,17 +16,17 @@ Besides using the body editor, Mockoon allows you to serve different files for e
To serve a file, you must provide a path in the file input field:
-![fill the file input field{987x354}](docs-img:file-path.png)
+![fill the file input field{1157x354}](docs-img:file-path.png)
-> When a file path is provided, the body editor content will be ignored.
+> 💡 When a file path is provided, the body editor content will be ignored.
## Absolute or relative paths
You can either provide an absolute path like `/home/username/file.json` or a relative path. Starting with [v1.16.0](https://github.com/mockoon/mockoon/releases/tag/v1.16.0), relative paths are resolved from the environment's file location. You can check the environment's file location by right-clicking on an environment en select "Show in folder" in the contextual menu:
-![show in folder menu entry{490x309}](docs-img:environment-show-in-folder.png)
+![show in folder menu entry{551x380}](docs-img:environment-show-in-folder.png)
-> Prior to v1.16.0, relative file paths were resolved from the application executable. This is also supported by the CLI since its version [1.2.0](https://github.com/mockoon/cli/releases/tag/v1.2.0).
+> 💡 Prior to v1.16.0, relative file paths were resolved from the application executable. This is also supported by the CLI since its version [1.2.0](https://github.com/mockoon/cli/releases/tag/v1.2.0).
## Templating
@@ -42,7 +42,7 @@ Templating can be disabled both for the body editor and the file content. Please
>
> Parsing the templating helpers inside big files can be a very intensive task (CPU and memory intensive). All the files in different formats than the one mentioned above will be streamed to improve performances.
> If you need to send big files in one of the above formats but don't need to parse the templating, you can disable it in the route response settings. It will stream the file instead of parsing it and improve the performance.
-> ![disable templating in route response{1066x181}](docs-img:route-response-disable-templating.png)
+> ![disable templating in route response{1236x181}](docs-img:route-response-disable-templating.png)
### File input templating
@@ -52,7 +52,7 @@ Templating is also supported directly in the **file input field**. It allows to
By default, Mockoon will return an error in the body when a file is not found. It will still keep the status code you set up on your route response. You can instead choose to automatically return a 404 by activating an option in the route response settings:
-![tick the 404 fallback checkbox{1066x231}](docs-img:enable-404-fallback.png)
+![tick the 404 fallback checkbox{1236x231}](docs-img:enable-404-fallback.png)
This option will also fall back to use the content present in the body editor.
diff --git a/content/docs/v6.2.0/response-configuration/response-body.md b/content/docs/v9.0.0/response-configuration/response-body.md
similarity index 81%
rename from content/docs/v6.2.0/response-configuration/response-body.md
rename to content/docs/v9.0.0/response-configuration/response-body.md
index f1c2a3b3..8c7a999f 100644
--- a/content/docs/v6.2.0/response-configuration/response-body.md
+++ b/content/docs/v9.0.0/response-configuration/response-body.md
@@ -1,7 +1,7 @@
---
title: Body
meta:
- title: Response body
+ title: Configuring response body
description: Learn how to serve different type of bodies with Mockoon, how to use files or databucket to serve realistic dynamic responses
order: 400
---
@@ -14,13 +14,13 @@ Each [route response](docs:route-responses/multiple-responses) can serve a diffe
You can choose each option using the body selector:
-![body type toggle buttons{1264x540}](docs-img:body-type-toggle.png)
+![body type toggle buttons{1484x547}](docs-img:body-type-toggle.png)
## Body editor (inline)
You can use the body editor to directly create your response content. It supports all the [templating helpers](docs:templating/overview).
-![inline body editor{1169x807}](docs-img:inline-body-editor.png)
+![inline body editor{1254x800}](docs-img:inline-body-editor.png)
> Mockoon will save the content of the inline body editor directly in your [data file](docs:mockoon-data-files/data-storage-location).
> Using an external file could improve the performance for large content.
@@ -29,7 +29,7 @@ You can use the body editor to directly create your response content. It support
You can also choose to serve an external file, using the second option:
-![external file linking input{1169x807}](docs-img:body-file-serving.png)
+![external file linking input{1254x800}](docs-img:body-file-serving.png)
Please refer to the [file serving documentation](docs:response-configuration/file-serving) for more information.
@@ -37,6 +37,6 @@ Please refer to the [file serving documentation](docs:response-configuration/fil
You can finally choose to serve the content of a data bucket using the third option:
-![data bucket linking select menu{1169x807}](docs-img:body-data-bucket.png)
+![data bucket linking select menu{1254x800}](docs-img:body-data-bucket.png)
Please refer to the [data bucket documentation](docs:data-buckets/overview) for more information.
diff --git a/content/docs/v6.2.0/response-configuration/response-headers.md b/content/docs/v9.0.0/response-configuration/response-headers.md
similarity index 79%
rename from content/docs/v6.2.0/response-configuration/response-headers.md
rename to content/docs/v9.0.0/response-configuration/response-headers.md
index 50df4da0..eceac88d 100644
--- a/content/docs/v6.2.0/response-configuration/response-headers.md
+++ b/content/docs/v9.0.0/response-configuration/response-headers.md
@@ -16,11 +16,11 @@ In Mockoon you can easily define **response headers** for **each route** but als
To add response headers like `Content-Type` to your route, go to the route's **Headers tab** and fill the name and value fields:
-![Complete route response header form{997x204}](docs-img:fill-route-header-form.png)
+![Complete route response header form{1167x204}](docs-img:fill-route-header-form.png)
You can add one or more headers by clicking on the "Add header" button at the bottom of the list:
-![Add route response header{977x234}](docs-img:add-route-header.png)
+![Add route response header{1147x234}](docs-img:add-route-header.png)
## Environment level response headers
@@ -28,8 +28,8 @@ You can also add response headers at the environment level. Headers defined in a
Open the **Environment Headers** by clicking on the tab at the top of the window:
-![click on the headers tab{746x160}](docs-img:open-environment-headers.png)
+![click on the headers tab{796x160}](docs-img:open-environment-headers.png)
And add one or more headers by clicking on the "Add header" button at the bottom of the list:
-![Add environment header{1177x137}](docs-img:add-environment-header.png)
+![Add environment header{1347x136}](docs-img:add-environment-header.png)
diff --git a/content/docs/v9.0.0/route-responses/dynamic-rules.md b/content/docs/v9.0.0/route-responses/dynamic-rules.md
new file mode 100644
index 00000000..19464632
--- /dev/null
+++ b/content/docs/v9.0.0/route-responses/dynamic-rules.md
@@ -0,0 +1,143 @@
+---
+title: Responses rules
+meta:
+ title: Server different responses based on rules
+ description: Learn how to define multiple route responses for each route and triggered them with rules based on the entering request parameters.
+order: 310
+---
+
+# Adding response rules
+
+---
+
+After creating [multiple responses](docs:route-responses/multiple-responses) for each route, you can create more complex scenarios and serve the responses depending on the fulfillment of rules.
+
+## Defining rules
+
+You can define an unlimited number of rules for each route. At each request, Mockoon will assert each response's rules and serve the response which contains the first matching rule(s). The rules are interpreted in the order they are declared: `[rule OR|AND rule] OR [rule OR|AND rule]`, the brackets symbolizing each route response.
+
+![Rules interpretation order{455x395}](/images/docs/shared/dynamic-rules-schema.png)
+
+To add a new rule to a response, go to the route response's **Rules tab**, click on "Add rule" and fill the fields:
+
+![Click on add and fill the fields{1157x304}](docs-img:add-route-response-rule.png)
+
+### Reordering rules
+
+By default, rules are interpreted in the order you added them. You can change their interpretation order by drag and dropping them:
+
+![Drag and drop rules to reorder them{1195x326}](docs-img:route-response-rule-reorder.png)
+
+### Disabling rules
+
+You can temporarily disable the rules and serve the default response only. To activate this option, click on the "rules" icon next to the response list:
+
+![Disable rules{1220x244}](docs-img:disable-rules.png)
+
+> When this option is active, the default response will be always served and all the rules defined on this route will be ignored. Also, this option cannot be selected in addition to the random or sequential responses.
+
+### Rules logical operator
+
+Inside a route response, rules are interpreted by default with the OR logical operator. When you have more than one rule in a route response, you can easily switch the operator applied when interpreting the rules, by clicking on the `OR|AND` buttons at the left of the rules:
+
+![Choose the rule operator OR AND{1152x214}](docs-img:route-response-rules-operator.png)
+
+Rules have five parts:
+
+- a **target**
+- a **property name or path**
+- an **invert operator** toggle
+- a comparison **operator**
+- a **value**
+
+### 1. Target
+
+![Rule target{1177x204}](docs-img:route-response-rules-target.png)
+
+In the dropdown menu you can choose between:
+
+- the **request body** value (full raw content or one of its properties if request's `Content-Type` is either `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`).
+- the value of a **request's query parameter**.
+- the value of a **request header**.
+- the value of a **request cookie**.
+- the value of a [**route parameter**](docs:api-endpoints/routing#route-parameters).
+- the value of the **request path**, always starting with a `/` (e.g. /path/section).
+- the value of the **request method** in lowercase (e.g. get, post, put, delete, patch, head, options).
+- the **request number** index starting at 1 (you can reset the request number by using the [state purge admin API](docs:admin-api/server-state)).
+- the value of a [**global variable**](docs:variables/global-variables).
+- the value of a [**data bucket content**](docs:data-buckets/overview).
+- **custom templating** (see the [templating helpers](docs:templating/overview) documentation).
+
+### 2. Target's name or path, or template
+
+![Rule property{1177x204}](docs-img:route-response-rules-property.png)
+
+This field supports [templating helpers](docs:templating/overview) to dynamically target a specific body property, header name, etc. Depending on the **target**, the way to access properties may be different:
+
+- **request body**:
+ - keep empty to match against the full raw body content.
+ - use a path to access one of its properties. Two syntaxes are supported, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
+ Fetching object properties is compatible with request's bodies of `Content-Type` `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`.
+ _Please note that XML bodies are parsed using [xml-js](https://www.npmjs.com/package/xml-js) package. Refer to this [page](docs:requests/supported-body-formats#xml-support) or the package documentation for more information on how the XML is parsed and how to fetch specific properties._
+ _Please also note that `multipart/form-data` only supports fields. Uploaded files will be ignored._
+ > 📘 Check the [supported requests body formats](docs:requests/supported-body-formats) documentation for more information on how the request body is parsed.
+- **query parameter**: either provide a property name like `filter` or a path if the query parameter is an object `filter.primary`.
+ > 📘 Check the [query parameters](docs:requests/query-parameters) documentation for more information on how they are parsed.
+- **headers**: a header name like `Accept` or `Content-Type`.
+- **cookies**: the cookie name like `Session-id`.
+- **route parameter**: a route parameter name without the colon (":"), `:userId` becoming `userId`.
+- **request path**: _no property or path can be provided here_.
+- **request method**: _no property or path can be provided here_.
+- **request number**: _no property or path can be provided here_.
+- **global variable**: a [global variable](docs:variables/global-variables) name like `myVar`. You can use a path to access one of its properties if the variable is storing arrays or objects. Two syntaxes are supported, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `myVar.key\.with\.dot`. Examples: `myVar.property.subProperty`, `myVar.property.0.subProperty` or `$.myVar.property`.
+- **data bucket content**: a [data bucket](docs:data-buckets/overview) name like `myData`. You can use a path to access one of its properties if the bucket is storing arrays or objects. Two syntaxes are supported, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `myData.key\.with\.dot`. Examples: `myData.property.subProperty`, `myData.property.0.subProperty` or `$.myData.property`.
+- **custom templating**: custom templating helpers like `{{urlParam 'param'}}`, `{{header 'x-custom-header'}}`, `{{body 'property'}}`, `{{jwtPayload (header 'Authorization') 'sub'}}`, etc. The result of the templating helper will be a **string** that will be compared to the rule value.
+
+For **body** and **query string**, if the property is an array, Mockoon will automatically check in the array if at least one item matches the value.
+
+> 🛠️ Use our online [JSONPath and object-path evaluator](/tools/json-object-path-evaluator/) to test your JSONPath or object-path syntaxes and view the results in real-time.
+
+> 💡 The **response rule values also support templating helpers** to create dynamic rules. See the [templating helpers](docs:templating/overview) documentation for more information.
+
+### 3. Invert operator
+
+You can invert the **comparison operator** (**!** equals, **!** regex match, etc.) by toggling on the exclamation mark button:
+
+![Rule comparison operator{1177x204}](docs-img:route-response-rules-invert-operator.png)
+
+### 4. Comparison operator
+
+![Rule comparison operator{1177x204}](docs-img:route-response-rules-comparison-operator.png)
+
+Multiple **comparison operators** are available in each rule:
+
+- **equals**: asserts that the targeted property is equal to the **value**.
+- **regex match**: asserts that the targeted property matches the regex **value**.
+- **null**: asserts that the targeted property is null or absent (for **headers** or **cookies**).
+- **empty array**: asserts that the targeted property is an empty array.
+- **array includes**: asserts that the given **value** is present in the targeted property (array).
+- **valid JSON schema**: asserts that the targeted property is a valid JSON schema. The **value** must point to a [data bucket](docs:data-buckets/overview) containing a valid JSON schema (see below).
+
+> 💡 Some comparison operators are not available for all **targets**. For example, the **array includes** operator is not available for **request number** or **request method**. Also, array operators are not available for the "Custom templating" rule type as it always returns a string value.
+
+### 5. Value
+
+The **value** field is the expected value to compare against the targeted property, it can be a simple text value, a regex, or a JSON schema.
+
+It also **support templating helpers** to create dynamic rules. See the [templating helpers](docs:templating/overview) documentation for more information.
+
+![Rule value{1177x204}](docs-img:route-response-rules-value.png)
+
+#### Strings and regexes
+
+Depending on the comparison operator chosen, **equals**, **regex match** or **array includes**, you can either set a simple text value like "expected value" or any kind of regex. To use a regex, you must write it without the leading and trailing slashes.
+
+Regex examples:
+`primary|secondary`, `^user1-9`, `UTF-.*`.
+You can also test for empty values with the following regex: `^$|\s+`.
+
+The **request number** supports simple entries like `1` or `2` but also regexes, allowing you to return a different response for the first 3 calls `^[1-3]$` or failing on odd request indexes `[13579]$`.
+
+#### JSON schemas
+
+The only exception is the **valid JSON schema** comparison operator. In this case, the **value** must point to a data bucket containing a valid JSON schema. The schema will be used to validate the targeted property using [ajv](https://www.npmjs.com/package/ajv). In this case, the **value** field supports the [object-path](https://www.npmjs.com/package/object-path) syntax to access the schema stored in a data bucket. Examples: `bucketNameOrId`, `bucketNameOrId.propertyName`, etc. The [data bucket documentation](docs:data-buckets/using-data-buckets#storing-json-schemas) provides more information on how to create and use JSON schemas.
diff --git a/content/docs/v6.2.0/route-responses/global-routes-with-rules.md b/content/docs/v9.0.0/route-responses/global-routes-with-rules.md
similarity index 90%
rename from content/docs/v6.2.0/route-responses/global-routes-with-rules.md
rename to content/docs/v9.0.0/route-responses/global-routes-with-rules.md
index d48fa9b9..6b50f22c 100644
--- a/content/docs/v6.2.0/route-responses/global-routes-with-rules.md
+++ b/content/docs/v9.0.0/route-responses/global-routes-with-rules.md
@@ -18,7 +18,7 @@ Three parts are required to create a global route:
To create a global route, you first need to create a new HTTP route that will match all the endpoints you want to protect. To do so, create a new route and select "All methods" in the method dropdown:
-![wildcard route on all methods{599x318}](docs-img:create-wildcard-route.png)
+![wildcard route on all methods{649x337}](docs-img:create-wildcard-route.png)
In this example, the wildcard route is placed above the `GET /users` route, which is important as it will be [evaluated first](docs:api-endpoints/routing#routes-order) and catch all the requests. You can create it first or move it up in the routes list with a drag and drop.
@@ -30,11 +30,11 @@ In this example, the wildcard route is placed above the `GET /users` route, whic
The second step is to create one or more responses with rules. For example, you can create a response checking that the request contains an `Authorization` header and returning a `401` error if's not present.
To follow this example, use the existing response or create a new one and set the status code to `401`:
-![create response with status code 401{1006x261}](docs-img:response-status-code-401.png)
+![create response with status code 401{1176x261}](docs-img:response-status-code-401.png)
Add a new rule to this response by clicking on the "add rule" button and selecting the "Header" rule type. Then, set the rule to check that the `Authorization` header is null as we want to return a `401` error if it is not present:
-![create rule to check that the Authorization header is null{987x304}](docs-img:response-rule-header-null.png)
+![create rule to check that the Authorization header is null{1157x304}](docs-img:response-rule-header-null.png)
> 💡 You can create more responses with associated rules to verify more criteria on the request and serve different responses accordingly (errors, etc.).
@@ -42,7 +42,7 @@ Add a new rule to this response by clicking on the "add rule" button and selecti
Once your route is created and your responses customized, activate the fallback mode by clicking on the "fallback" icon next to the response list:
-![Activate fallback mode{1264x174}](docs-img:activate-fallback-mode.png)
+![Activate fallback mode{1289x174}](docs-img:activate-fallback-mode.png)
This will automatically pass the request to the next route when none of the [responses' rules](docs:route-responses/dynamic-rules) match.
diff --git a/content/docs/v6.2.0/route-responses/multiple-responses.md b/content/docs/v9.0.0/route-responses/multiple-responses.md
similarity index 96%
rename from content/docs/v6.2.0/route-responses/multiple-responses.md
rename to content/docs/v9.0.0/route-responses/multiple-responses.md
index a47ff054..7cf87c5d 100644
--- a/content/docs/v6.2.0/route-responses/multiple-responses.md
+++ b/content/docs/v9.0.0/route-responses/multiple-responses.md
@@ -16,7 +16,7 @@ For each route, multiple responses can be defined (status, body, and headers) an
To **add** a new response to your route, click on the "plus" icon next to the responses list:
-![Click on the icon to add a new response{987x164}](docs-img:add-route-response.png)
+![Click on the icon to add a new response{1157x164}](docs-img:add-route-response.png)
You can also **duplicate** an existing route response by clicking on the "copy" icon on the right:
@@ -28,7 +28,7 @@ Everything will be copied to the new response: documentation, file/body, headers
Route responses order define the order in which the [rules are interpreted](docs:route-responses/dynamic-rules). You can easily change the default response by reordering the responses menu with a drag and drop:
-![Reorder route responses{968x214}](docs-img:reorder-responses.png)
+![Reorder route responses{1138x214}](docs-img:reorder-responses.png)
## Default route response
diff --git a/content/docs/v6.2.0/server-configuration/cors.md b/content/docs/v9.0.0/server-configuration/cors.md
similarity index 84%
rename from content/docs/v6.2.0/server-configuration/cors.md
rename to content/docs/v9.0.0/server-configuration/cors.md
index 6c243937..c1afb825 100644
--- a/content/docs/v6.2.0/server-configuration/cors.md
+++ b/content/docs/v9.0.0/server-configuration/cors.md
@@ -18,11 +18,11 @@ For your application to work, you can make Mockoon automatically answer to these
Open the **Environment Settings** by clicking on the tab at the top of the window:
-![click on the settings tab{1148x160}](docs-img:open-environment-settings.png)
+![click on the settings tab{1198x160}](docs-img:open-environment-settings.png)
Enable the **Automatically handle OPTIONS pre-flight requests ** by ticking the checkbox:
-![tick the CORS checkbox{1048x509}](docs-img:enable-cors.png)
+![tick the CORS checkbox{1098x507}](docs-img:enable-cors.png)
You need to restart the environment for the change to take effect.
@@ -42,12 +42,12 @@ You can also add the same CORS headers to all routes of a mock API with one clic
Open the **Environment Headers** by clicking on the tab at the top of the window:
-![click on the headers tab{1264x160}](docs-img:open-environment-headers.png)
+![click on the headers tab{1484x160}](docs-img:open-environment-headers.png)
Then, click on the **Add CORS headers** link:
-![Click on the add CORS headers link{1264x137}](docs-img:add-cors-headers.png)
+![Click on the add CORS headers link{1484x136}](docs-img:add-cors-headers.png)
The above headers will be automatically added to your list of headers:
-![view cors headers in the list{1264x237}](docs-img:view-cors-headers.png)
+![view cors headers in the list{1484x236}](docs-img:view-cors-headers.png)
diff --git a/content/docs/v6.2.0/server-configuration/listening-hostname.md b/content/docs/v9.0.0/server-configuration/listening-hostname.md
similarity index 89%
rename from content/docs/v6.2.0/server-configuration/listening-hostname.md
rename to content/docs/v9.0.0/server-configuration/listening-hostname.md
index c7042e8c..7077d07d 100644
--- a/content/docs/v6.2.0/server-configuration/listening-hostname.md
+++ b/content/docs/v9.0.0/server-configuration/listening-hostname.md
@@ -14,11 +14,11 @@ By default, Mockoon's mock APIs will listen to all available network adapters on
To configure each environment to listen on a specific hostname, open the **Environment Settings** by clicking on the tab at the top of the window:
-![click on the settings tab{1148x160}](docs-img:open-environment-settings.png)
+![click on the settings tab{1198x160}](docs-img:open-environment-settings.png)
Add a **custom hostname** in the input field:
-![field to set a custom hostname{1264x213}](docs-img:custom-hostname-setting.png)
+![field to set a custom hostname{1484x213}](docs-img:custom-hostname-setting.png)
> ⚠️ You may need to restart your environment for the change to take effect.
diff --git a/content/docs/v6.2.0/server-configuration/port-prefix.md b/content/docs/v9.0.0/server-configuration/port-prefix.md
similarity index 75%
rename from content/docs/v6.2.0/server-configuration/port-prefix.md
rename to content/docs/v9.0.0/server-configuration/port-prefix.md
index 36025d2e..f8f44522 100644
--- a/content/docs/v6.2.0/server-configuration/port-prefix.md
+++ b/content/docs/v9.0.0/server-configuration/port-prefix.md
@@ -2,7 +2,7 @@
title: Port and prefix
meta:
title: Change port and API prefix
- description: Learn how you can customize the localhost port and API prefix of your mock server.
+ description: Learn how you can customize the localhost port and API prefix of your running mock server.
order: 100
---
@@ -14,12 +14,12 @@ By default, Mockoon's new environments will listen on port `3000` and will have
You can change the **port number** and the **API prefix** in the **Environment Settings** by clicking on the tab at the top of the window:
-![click on the settings tab{871x160}](docs-img:open-environment-settings.png)
+![click on the settings tab{921x160}](docs-img:open-environment-settings.png)
Then, change the port number and/or the API prefix in the corresponding input fields:
-![field to set a custom port{583x298}](docs-img:environment-custom-port.png)
+![field to set a custom port{661x298}](docs-img:environment-custom-port.png)
-![field to set a custom prefix{993x298}](docs-img:environment-custom-prefix.png)
+![field to set a custom prefix{1128x298}](docs-img:environment-custom-prefix.png)
> 💡 The API prefix can contain multiple sections (e.g. `/api/v1/`) and will be applied to all your routes.
diff --git a/content/docs/v6.2.0/server-configuration/proxy-mode.md b/content/docs/v9.0.0/server-configuration/proxy-mode.md
similarity index 85%
rename from content/docs/v6.2.0/server-configuration/proxy-mode.md
rename to content/docs/v9.0.0/server-configuration/proxy-mode.md
index 46175ff2..c371a804 100644
--- a/content/docs/v6.2.0/server-configuration/proxy-mode.md
+++ b/content/docs/v9.0.0/server-configuration/proxy-mode.md
@@ -16,11 +16,11 @@ Mockoon supports partial mocking of an API endpoints by forwarding the requests
To activate the proxy mode, open the **Environment Proxy** options by clicking on the tab at the top of the window:
-![click on proxy tab{998x160}](docs-img:open-proxy-options.png)
+![click on proxy tab{1048x160}](docs-img:open-proxy-options.png)
Enable the proxy mode by checking the box and enter the server URL to which you want to forward the calls. A small shield icon should appear on the right of your environment name indicating that the proxy mode has been enabled:
-![tick the Proxy checkbox{1264x277}](docs-img:enable-proxy.png)
+![tick the Proxy checkbox{1484x276}](docs-img:enable-proxy.png)
From now on, all routes that have been defined in Mockoon will be intercepted, and any other request not matching any route path will be forwarded to the server URL you entered in the proxy mode setting.
@@ -28,12 +28,12 @@ From now on, all routes that have been defined in Mockoon will be intercepted, a
By default, the API prefix will be part of the path called on the proxied API. You can disable this behavior by ticking the "Remove prefix" checkbox:
-![tick the Proxy no prefix forward checkbox{696x320}](docs-img:proxy-no-forward.png)
+![tick the Proxy no prefix forward checkbox{746x317}](docs-img:proxy-no-forward.png)
## Proxy headers
Proxy specific headers can also be added, both to the forwarded request and the response received from the target API.
-![add proxy headers by filling the keys and values{1264x379}](docs-img:proxy-headers.png)
+![add proxy headers by filling the keys and values{1484x375}](docs-img:proxy-headers.png)
> **Proxy request headers** will be automatically added to the request sent to the proxied server, while **proxy response headers** are added to the response received from the proxied server.
diff --git a/content/docs/v9.0.0/server-configuration/serving-over-tls.md b/content/docs/v9.0.0/server-configuration/serving-over-tls.md
new file mode 100644
index 00000000..bd20c940
--- /dev/null
+++ b/content/docs/v9.0.0/server-configuration/serving-over-tls.md
@@ -0,0 +1,65 @@
+---
+title: TLS
+meta:
+ title: Serve a mock API over TLS
+ description: Need to mock a secured REST API server? Mockoon can also do this by serving over TLS with a self-signed certificate
+order: 120
+---
+
+# TLS
+
+---
+
+Mockoon supports serving your mock API over TLS with a self-signed certificate by default. You can also provide your certificate and trusted CA certificates.
+
+## Activate the TLS option
+
+You can activate the TLS option for each environment independently. Open the **Environment Settings** by clicking on the tab at the top of the window:
+
+![click on the settings tab{1198x160}](docs-img:open-environment-settings.png)
+
+Enable the **TLS option** by ticking the checkbox. The option was successfully activated if a yellow lock is displayed next to the environment name.
+
+![tick the TLS checkbox{854x342}](docs-img:enable-tls.png)
+
+> 💡 You may need to restart your environment for the change to take effect.
+
+Your mock API will now be available on `https://localhost:port` instead of `http://localhost:port`.
+
+Please note that Mockoon is using a self-signed certificate to serve your environment over TLS.
+
+## Provide your own certificate
+
+You can also **provide your certificate in both PKCS12 or PEM formats** by filling out the input fields with the path to the file(s).
+
+![add certificate path{1484x612}](docs-img:enable-tls-custom-certificate.png)
+
+Mockoon also supports passphrase-protected keys and custom-trusted CA certificates. As Mockoon is using Node.js' `tls`, you can refer to the [`tls.createSecureContext()` documentation](https://nodejs.org/dist/latest-v20.x/docs/api/tls.html#tlscreatesecurecontextoptions) for a full description of the available options.
+
+> 💡 All the path fields support both absolute and relative paths. Relative paths are resolved from the environment's file location.
+
+## Disable TLS at runtime with the CLI or serverless library
+
+You can disable TLS when running your mock with the [CLI](/cli/) or the [serverless library](/serverless/).
+
+### Disable TLS with the CLI
+
+To **disable** TLS when running your mock with the CLI, use the `--disable-tls` flag:
+
+```bash
+mockoon-cli start --disable-tls -d ./mock.json
+```
+
+> 📘 Check the [CLI dedicated documentation](https://github.com/mockoon/mockoon/tree/main/packages/cli#readme)
+
+### Disable TLS with the serverless library
+
+To **disable** TLS when running your mock with the serverless library, set the `disableTLS` option to `true` when building the `MockoonServerless` instance:
+
+```javascript
+const mockoonServerless = new mockoon.MockoonServerless(mockEnv, {
+ disableTLS: true
+});
+```
+
+> 📘 Check the [serverless library dedicated documentation](https://github.com/mockoon/mockoon/tree/main/packages/serverless#readme)
diff --git a/content/docs/v6.2.0/templating/fakerjs-helpers.md b/content/docs/v9.0.0/templating/fakerjs-helpers.md
similarity index 99%
rename from content/docs/v6.2.0/templating/fakerjs-helpers.md
rename to content/docs/v9.0.0/templating/fakerjs-helpers.md
index 0c6785d4..026a8607 100644
--- a/content/docs/v6.2.0/templating/fakerjs-helpers.md
+++ b/content/docs/v9.0.0/templating/fakerjs-helpers.md
@@ -3,7 +3,7 @@ title: Faker.js helpers
meta:
title: Create dynamic responses with templating Faker.js helpers
description: Create realistic mock data for your mock API servers with Mockoon's templating system including Faker.js
-order: 504
+order: 506
---
# Faker.js helpers
diff --git a/content/docs/v9.0.0/templating/jwt-helpers.md b/content/docs/v9.0.0/templating/jwt-helpers.md
new file mode 100644
index 00000000..a0915784
--- /dev/null
+++ b/content/docs/v9.0.0/templating/jwt-helpers.md
@@ -0,0 +1,65 @@
+---
+title: JWT helpers
+meta:
+ title: Create dynamic responses with templating helpers
+ description: "Create dynamic fake data for your mock server with Mockoon's templating helpers. All formats are supported: JSON, CSV, HTML, etc."
+order: 503
+---
+
+# JWT helpers
+
+---
+
+Mockoon [templating system](docs:templating/overview) includes various helpers to help you create dynamic responses. This page lists the helpers related to JWT tokens.
+
+## jwtPayload
+
+Extract a property from a JWT token's payload. The full token must be passed as the first argument. It will automatically ignore the `Bearer ` prefix if present, to make it easier to use it with the `Authorization` header.
+If no property is passed, the full payload object will be returned to be used with other helpers like `lookup`.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | ----------- |
+| 0 | string | JWT token |
+| 1 | string | Property |
+
+**Examples**
+
+```handlebars
+
+{{jwtPayload 'abcd...'}}
+
+
+{{lookup (jwtPayload 'abcd...') 'sub'}}
+
+
+{{jwtPayload 'abcd...' 'sub'}}
+
+
+{{jwtPayload (header 'Authorization') 'sub'}}
+```
+
+## jwtHeader
+
+Extract a property from a JWT token's header. The full token must be passed as the first argument. It will automatically ignore the `Bearer ` prefix if present, to make it easier to use it with the `Authorization` header.
+If no property is passed, the full header object will be returned to be used with other helpers like `lookup`.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | ----------- |
+| 0 | string | JWT token |
+| 1 | string | Property |
+
+**Examples**
+
+```handlebars
+
+{{jwtHeader 'abcd...'}}
+
+
+{{lookup (jwtHeader 'abcd...') 'alg'}}
+
+
+{{jwtHeader 'abcd...' 'alg'}}
+
+
+{{jwtHeader (header 'Authorization') 'alg'}}
+```
diff --git a/content/docs/v6.2.0/templating/mockoon-helpers.md b/content/docs/v9.0.0/templating/mockoon-helpers.md
similarity index 78%
rename from content/docs/v6.2.0/templating/mockoon-helpers.md
rename to content/docs/v9.0.0/templating/mockoon-helpers.md
index fcaf72e2..5f288f94 100644
--- a/content/docs/v6.2.0/templating/mockoon-helpers.md
+++ b/content/docs/v9.0.0/templating/mockoon-helpers.md
@@ -1,5 +1,5 @@
---
-title: Custom helpers
+title: Helpers
meta:
title: Create dynamic responses with templating helpers
description: "Create dynamic fake data for your mock server with Mockoon's templating helpers. All formats are supported: JSON, CSV, HTML, etc."
@@ -10,32 +10,33 @@ order: 501
---
-In addition to Handlebars' built-in helpers, Mockoon offers the following helpers:
-
-| Block helpers | Data buckets |
-| ------------------- | --------------------- |
-| [`repeat`](#repeat) | [`data`](#data) |
-| [`switch`](#switch) | [`dataRaw`](#dataraw) |
-
-| Arrays | Objects |
-| ------------------- | ------------------- |
-| [`array`](#array) | [`object`](#object) |
-| [`oneOf`](#oneof) | |
-| [`someOf`](#someof) | |
-| [`join`](#join) | |
-| [`slice`](#slice) | |
-| [`len`](#len) | |
-| [`filter`](#filter) | |
-
-| Math | | Variables |
-| ----------------------- | --------------------- | ------------------------------- |
-| [`add`](#add) | [`eq`](#eq) | [`setVar`](#setvar) |
-| [`subtract`](#subtract) | [`gt`](#gt) | [`getVar`](#getvar) |
-| [`multiply`](#multiply) | [`gte`](#gte) | [`setGlobalVar`](#setglobalvar) |
-| [`divide`](#divide) | [`lt`](#lt) | [`getGlobalVar`](#getglobalvar) |
-| [`modulo`](#modulo) | [`lte`](#lte) | |
-| [`ceil`](#ceil) | [`toFixed`](#tofixed) | |
-| [`floor`](#floor) | [`round`](#round) | |
+In addition to Handlebars' built-in helpers (`if`, `each`, etc., for more information, please have a look at [Handlebars' documentation](https://handlebarsjs.com/guide/builtin-helpers.html#if)), Mockoon offers the following helpers:
+
+| Block helpers | [Data buckets](docs:data-buckets/overview) manipulation |
+| ------------------- | ------------------------------------------------------- |
+| [`repeat`](#repeat) | [`data`](#data) |
+| [`switch`](#switch) | [`dataRaw`](#dataraw) |
+| | [`setData`](#setdata) |
+
+| Arrays | | Objects |
+| ------------------- | --------------------- | ------------------- |
+| [`array`](#array) | [`sort`](#sort) | [`object`](#object) |
+| [`oneOf`](#oneof) | [`sortBy`](#sortby) | |
+| [`someOf`](#someof) | [`reverse`](#reverse) | |
+| [`join`](#join) | | |
+| [`slice`](#slice) | | |
+| [`len`](#len) | | |
+| [`filter`](#filter) | | |
+
+| Math | |
+| ----------------------- | --------------------- |
+| [`add`](#add) | [`eq`](#eq) |
+| [`subtract`](#subtract) | [`gt`](#gt) |
+| [`multiply`](#multiply) | [`gte`](#gte) |
+| [`divide`](#divide) | [`lt`](#lt) |
+| [`modulo`](#modulo) | [`lte`](#lte) |
+| [`ceil`](#ceil) | [`toFixed`](#tofixed) |
+| [`floor`](#floor) | [`round`](#round) |
| Strings | | Dates | Misc |
| ------------------------- | ----------------------- | --------------------------------- | ------------------------------- |
@@ -44,21 +45,21 @@ In addition to Handlebars' built-in helpers, Mockoon offers the following helper
| [`lowercase`](#lowercase) | [`parseInt`](#parseint) | [`date`](#date) | [`base64Decode`](#base64decode) |
| [`uppercase`](#uppercase) | [`padStart`](#padstart) | [`time`](#time) | [`objectId`](#objectid) |
| [`split`](#split) | [`padEnd`](#padend) | [`dateFormat`](#dateformat) | |
-| [`stringify`](#stringify) | [`eq`](#eq) | | |
+| [`stringify`](#stringify) | [`eq`](#eq) | [`isValidDate`](#isvaliddate) | |
| [`jsonParse`](#jsonparse) | | | |
-| [Faker.js](docs:templating/fakerjs-helpers) aliases | | |
-| --------------------------------------------------- | ----------------------------- | ----------------------- |
-| [`int`](#int) | [`street`](#street) | [`hexColor`](#hexcolor) |
-| [`float`](#float) | [`city`](#city) | [`guid`](#guid) |
-| [`boolean`](#boolean) | [`country`](#country) | [`ipv4`](#ipv4) |
-| [`title`](#title) | [`countryCode`](#countrycode) | [`ipv6`](#ipv6) |
-| [`firstName`](#firstname) | [`zipcode`](#zipcode) | [`lorem`](#lorem) |
-| [`lastName`](#lastname) | [`postcode`](#postcode) | |
-| [`company`](#company) | [`lat`](#lat) | |
-| [`domain`](#domain) | [`long`](#long) | |
-| [`tld`](#tld) | [`phone`](#phone) | |
-| [`email`](#email) | [`color`](#color) | |
+| [Faker.js](docs:templating/fakerjs-helpers) aliases | | |
+| --------------------------------------------------- | ----------------------------- | ------------------------ |
+| [`int`](#int) | [`street`](#street) | [`hexColor`](#hexcolor) |
+| [`float`](#float) | [`city`](#city) | [`guid/uuid`](#uuidguid) |
+| [`boolean`](#boolean) | [`country`](#country) | [`ipv4`](#ipv4) |
+| [`title`](#title) | [`countryCode`](#countrycode) | [`ipv6`](#ipv6) |
+| [`firstName`](#firstname) | [`zipcode`](#zipcode) | [`lorem`](#lorem) |
+| [`lastName`](#lastname) | [`postcode`](#postcode) | |
+| [`company`](#company) | [`lat`](#lat) | |
+| [`domain`](#domain) | [`long`](#long) | |
+| [`tld`](#tld) | [`phone`](#phone) | |
+| [`email`](#email) | [`color`](#color) | |
## repeat
@@ -111,6 +112,8 @@ Get the **stringified** value at a given `path` from a [data bucket](docs:data-b
- Full objects or arrays can be retrieved by the helper and will be stringified.
- The full data bucket content can be fetched when the `path` is omitted (`{{data 'ID'}}`).
+> 🛠️ Use our online [JSONPath and object-path evaluator](/tools/json-object-path-evaluator/) to test your JSONPath or object-path syntaxes and view the results in real-time.
+
| Arguments (ordered) | Type | Description |
| ------------------- | ------ | -------------------------------- |
| 0 | string | ID or name of the data bucket |
@@ -138,6 +141,8 @@ Get the **raw** value (array, object, etc.) at a given `path` from a [data bucke
- Primitives and data structures can be retrieved by the helper and reused in other helpers (see example below).
- The full data bucket content (array, object, etc.) can be fetched when the `path` is omitted (`{{dataRaw 'ID'}}`).
+> 🛠️ Use our online [JSONPath and object-path evaluator](/tools/json-object-path-evaluator/) to test your JSONPath or object-path syntaxes and view the results in real-time.
+
| Arguments (ordered) | Type | Description |
| ------------------- | ------ | -------------------------------- |
| 0 | string | ID or name of the data bucket |
@@ -164,6 +169,39 @@ Get the **raw** value (array, object, etc.) at a given `path` from a [data bucke
{{/if}}
```
+## setData
+
+Set or modify the value at a given path in a [data bucket](docs:data-buckets/overview) selected by ID or name. This helper can perform various operations such as setting, pushing, deleting, incrementing, decrementing, and inverting values.
+
+- The `path` supports the [object-path](https://www.npmjs.com/package/object-path) syntax. When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
+ Please note that a value can be set at the path if the data bucket contains valid JSON.
+- The full data bucket content (array, object, etc.) can be modified when the `path` is omitted (`{{setData 'operation' 'ID' '' 'value'}}`).
+- Available operations are `set`, `push`, `del`, `inc`, `dec`, and `invert`:
+ - `set`: Set a new value at the root level (path omitted) or at the specified path. Requires a new value.
+ - `push`: Push a new value to an array at the root level (path omitted) or at the specified path. Requires a new value and the target to be an array.
+ - `del`: Delete a value at the root level (path omitted) or at the specified path. No new value required.
+ - `inc`: Increment a number at the root level (path omitted) or at the specified path. Requires a number to increment by. If the value is omitted, the increment will be by 1.
+ - `dec`: Decrement a number at the root level (path omitted) or at the specified path. Requires a number to decrement by. If the value is omitted, the decrement will be by 1.
+ - `invert`: Invert a boolean at the root level (path omitted) or at the specified path. No new value required.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | ------------------------------------------------------------------- |
+| 0 | string | Operation to perform (`set`, `push`, `del`, `inc`, `dec`, `invert`) |
+| 1 | string | ID or name of the data bucket |
+| 2 | string | Path to the data bucket property (optional) |
+| 3 | any | New value (optional for `invert`, `inc`, `dec` and `del`) |
+
+**Examples**
+
+```handlebars
+{{setData 'set' 'bucketNameOrId' 'path.to.property' 'newValue'}}
+{{setData 'push' 'bucketNameOrId' 'path.to.array' 'newValue'}}
+{{setData 'del' 'bucketNameOrId' 'path.to.property'}}
+{{setData 'inc' 'bucketNameOrId' 'path.to.property' 2}}
+{{setData 'dec' 'bucketNameOrId' 'path.to.property' 2}}
+{{setData 'invert' 'bucketNameOrId' 'path.to.property'}}
+```
+
## array
Create an array from the given items. This helper is mostly used with the following helpers: `oneOf`, `someOf`.
@@ -290,6 +328,10 @@ Return a filtered array. This helper can be used with data buckets, use the [dat
**Structure**
```handlebars
+
+{{ filter (array (object key='value1') (object key='value2')) (object key='value1') }}
+
+{{ filter (array (object key=(object prop='value1')) (object key=(object prop='value2'))) (object key=(object prop='value1')) }}
{{ filter (array 1 2 3 ... ) c1 c2 c3 ... }}
result: c1 OR c2 OR c3
@@ -361,6 +403,59 @@ result: {type: [1,2,3]}
result: {type: [1,3]}
```
+## sort
+
+Return a sorted array of strings or numbers. To sort array of objects, use the [sortBy](#sortby) helper.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | ---------------------------- |
+| 0 | [] | Input array |
+| [1 = asc] | string | Sort order ('asc' or 'desc') |
+
+**Examples**
+
+```handlebars
+{{sort (array 'item2' 'item1' 'item3') 'desc'}}
+result: ['item3','item2','item1']
+
+{{sort (array 'item2' 'item1' 'item3')}}
+result: ['item1','item2','item3']
+```
+
+## sortBy
+
+Return an array of objects sorted by a given key. This helper can be used with data buckets, use the [dataRaw](#dataraw) for that.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | -------- | ------------------------------- |
+| 0 | object[] | Input array of objects |
+| 1 | string | Object key to sort the array by |
+| [2 = asc] | string | Sort order ('asc' or 'desc') |
+
+**Examples**
+
+```handlebars
+{{sortBy (array (object key1=10 key2=20) (object key1=30 key2=30) (object key1=15 key2=25)) 'key1'}}
+result: [{"key2": 20, "key1": 10}, {"key2": 25, "key1": 15}, {"key2": 30, "key1": 30}]
+
+{{sortBy (dataRaw 'Users') 'name' 'desc'}}
+```
+
+## reverse
+
+Return an array with the elements in reverse order.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ---- | ----------- |
+| 0 | [] | Input array |
+
+**Examples**
+
+```handlebars
+{{reverse (array 'item1' 'item2' 'item3')}}
+result: ['item3','item2','item1']
+```
+
## add
Add the numbers passed as parameters to each others. Unrecognized strings passed as arguments will be ignored.
@@ -705,115 +800,6 @@ Create a valid ObjectId. It can generates the ObjectId based on the specified ti
{{objectId '54495ad94c934721ede76d90'}}
```
-## setVar
-
-Set a variable to be used later in the template. The value can be the result of another helper. To use it elsewhere in the template, refer to the variable with its name prefixed with an `@`: `{{@varname}}`. The variable can also be used as a helper parameter: `{{#repeat @varname}}...{{/repeat}}`.
-Variables declared in a block helper will be scoped to the block and unavailable outside.
-
-| Arguments (ordered) | Type | Description |
-| ------------------- | ------ | -------------- |
-| 0 | string | Variable name |
-| 1 | any | Variable value |
-
-**Examples**
-
-```handlebars
-{{setVar 'varname' 'value'}}
-{{setVar 'varname' (body 'id')}}
-
-usage:
-{{@varname}}
-{{#repeat @varname}}...{{/repeat}}
-
-declare a variable in a block helper:
-{{#repeat 5}}
- {{setVar 'random' (oneOf (array '1' '2' '3'))}}
- {{@random}}
-{{/repeat}}
-
-{{setVar 'myArray' (array '1' '2' '3')}}
-{{#each @myArray}}
- {{setVar 'eachIndex' @index}}
- {{@eachIndex}}
-{{/repeat}}
-```
-
-## getVar
-
-Dynamically get a variable set with [`setVar`](#setvar).
-
-| Arguments (ordered) | Type | Description |
-| ------------------- | ------ | ------------- |
-| 0 | string | Variable name |
-
-**Examples**
-
-```handlebars
-{{setVar 'varname' 'value'}}
-
-{{getVar 'varname'}}
-{{getVar (concat 'var' 'name')}}
-{{getVar (body 'property')}}
-```
-
-## setGlobalVar
-
-Set a global variable to be used anywhere templating is supported (body, headers, etc.). Global variables are available on all the routes of an environment and they are reset when the environment is restarted.
-
-- The variable name and values can be dynamically created using other helpers.
-- The variable can store any kind of data (arrays, objects, string, etc.).
-- To get the value of a global variable, use the [`{{getGlobalVar 'varName'}}` helper below](#getglobalvar).
-
-| Arguments (ordered) | Type | Description |
-| ------------------- | ------ | -------------- |
-| 0 | string | Variable name |
-| 1 | any | Variable value |
-
-**Examples**
-
-```handlebars
-{{setGlobalVar 'varName' 'value'}}
-{{setGlobalVar 'varName' (bodyRaw 'id')}}
-{{setGlobalVar (queryParam 'param1') (bodyRaw 'id')}}
-```
-
-## getGlobalVar
-
-Get a global variable's value set with [`setGlobalVar`](#setglobalvar). Global variables are available on all the routes of an environment and they are reset when the environment is restarted.
-
-- The variable name and path can be dynamically created using other helpers.
-- The `path` supports two syntaxes, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
- Please note that a value can be retrieved at the path if the variable contains valid JSON.
-- Primitives and data structures can be retrieved by the helper and reused in other helpers (see example below).
-- The full variable content (array, object, etc.) can be fetched when the `path` is omitted (`{{getGlobalVar 'varname'}}`).
-
-| Arguments (ordered) | Type | Description |
-| ------------------- | ------ | -------------------------- |
-| 0 | string | Variable name |
-| 1 | string | Path to the value property |
-
-**Examples**
-
-```handlebars
-{{getGlobalVar 'varname'}}
-{{getGlobalVar (bodyRaw 'property')}}
-{{getGlobalVar (urlParam 'id')}}
-
-
-{{getGlobalVar 'varName' 'path.to.property'}}
-{{getGlobalVar 'varName' 'deep.property\.with\.dot'}}
-
-
-{{getGlobalVar 'varName' '$.array.[*].property'}}
-
-{{#repeat (getGlobalVar 'varname')}}...{{/repeat}}
-
-{{#each (getGlobalVar 'varName')}}...{{/each}}
-
-
-{{{stringify (getGlobalVar 'varName')}}}
-```
-
## includes
Search whether a string can be found in another string and returns the appropriate boolean.
@@ -1042,7 +1028,7 @@ result: 50000
## now
-Display the current time in the chosen format. Format syntax is based on [date-fns v2 package format function](https://date-fns.org/v2.30.0/docs/format) and is optional (default to ISO string).
+Display the current time in the chosen format. Format syntax is based on [date-fns v3 `format` function](https://date-fns.org/v3.6.0/docs/format) and is optional (default to ISO string).
| Arguments (ordered) | Type | Description |
| ------------------- | ------ | ----------- |
@@ -1056,7 +1042,7 @@ Display the current time in the chosen format. Format syntax is based on [date-f
## dateTimeShift
-Shift a date by adding the number of `years`, `months`, etc. passed as parameters. The `date` and `format` parameters are optional. The helper will return the current date and time as an ISO string if omitted (`yyyy-MM-ddTHH:mm:ss.SSSxxx`). The formatting uses [date-fns v2 package format function](https://date-fns.org/v2.30.0/docs/format).
+Shift a date by adding the number of `years`, `months`, etc. passed as parameters. The `date` and `format` parameters are optional. The helper will return the current date and time as an ISO string if omitted (`yyyy-MM-ddTHH:mm:ss.SSSxxx`). The formatting uses [date-fns v3 `format` function](https://date-fns.org/v3.6.0/docs/format).
| Parameters (named) | Type | Description |
| --------------------------------------- | ------ | -------------------------- |
@@ -1077,7 +1063,7 @@ Shift a date by adding the number of `years`, `months`, etc. passed as parameter
## date
-Return a random formatted date (using [date-fns v2 package format function](https://date-fns.org/v2.30.0/docs/format)) between a minimum and a maximum. Uses `faker 'date.between'` to generate the random date.
+Return a random formatted date (using [date-fns v3 `format` function](https://date-fns.org/v3.6.0/docs/format)) between a minimum and a maximum. Uses `faker 'date.between'` to generate the random date.
| Arguments (ordered) | Type | Description |
| ------------------- | ------ | ------------- |
@@ -1093,7 +1079,7 @@ Return a random formatted date (using [date-fns v2 package format function](http
## time
-Return a random formatted time (using [date-fns v2 package format function](https://date-fns.org/v2.30.0/docs/format)) between a minimum and a maximum. Uses `faker 'date.between'` to generate the random time.
+Return a random formatted time (using [date-fns v3 `format` function](https://date-fns.org/v3.6.0/docs/format)) between a minimum and a maximum. Uses `faker 'date.between'` to generate the random time.
| Arguments (ordered) | Type | Description |
| ------------------- | ------ | ------------- |
@@ -1109,7 +1095,7 @@ Return a random formatted time (using [date-fns v2 package format function](http
## dateFormat
-Return a formatted date (using [date-fns v2 package format function](https://date-fns.org/v2.30.0/docs/format)).
+Return a formatted date (using [date-fns v3 `format` function](https://date-fns.org/v3.6.0/docs/format)).
| Arguments (ordered) | Type | Description |
| ------------------- | -------------- | -------------- |
@@ -1123,6 +1109,29 @@ Return a formatted date (using [date-fns v2 package format function](https://dat
{{dateFormat (faker 'date.recent') 'yyyy'}}
```
+## isValidDate
+
+Validate a date using a combination of date-fns v3 [`toDate`](https://date-fns.org/v3.6.0/docs/toDate) and [`isValid`](https://date-fns.org/v3.6.0/docs/isValid) functions. Supports various syntaxes for the date parameter (string, number, Date object): "2024-01-01", "2021-01-01T00:00:00.000Z", 1727272454000, etc.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------------------------ | ---------------- |
+| 0 | string \| number \| Date | Date to validate |
+
+**Examples**
+
+```handlebars
+
+{{isValidDate '2022-01-01'}}
+
+{{isValidDate '2022-01-01T00:00:00.000Z'}}
+
+{{isValidDate '2022-01-50'}}
+
+{{isValidDate 1727272454000}}
+
+{{isValidDate (queryParam 'date')}}
+```
+
## int
Return a random integer. Alias of `faker 'number.int`.
@@ -1347,19 +1356,20 @@ Return a random hexadecimal color code.
{{hexColor}}
```
-## guid
+## uuid/guid
-Return a random GUID. Alias of `faker 'string.uuid'`.
+Return a random UUID. Alias of `faker 'string.uuid'`.
**Examples:**
```handlebars
+{{uuid}}
{{guid}}
```
## ipv4
-Return a random IP v4. Alias of `faker 'internet.ip'`.
+Return a random IP v4. Alias of `faker 'internet.ipv4'`.
**Examples:**
diff --git a/content/docs/v6.2.0/templating/mockoon-request-helpers.md b/content/docs/v9.0.0/templating/mockoon-request-helpers.md
similarity index 71%
rename from content/docs/v6.2.0/templating/mockoon-request-helpers.md
rename to content/docs/v9.0.0/templating/mockoon-request-helpers.md
index 1e435077..e2a21ea7 100644
--- a/content/docs/v6.2.0/templating/mockoon-request-helpers.md
+++ b/content/docs/v9.0.0/templating/mockoon-request-helpers.md
@@ -26,16 +26,32 @@ Mockoon offers the following helpers which can return information relative to th
## body
-Get the value at a given `path` from the request body if the entering `Content-Type` is set to `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`. This helper is designed to retrieve data to be served in a response. To reuse the retrieved data with other helpers (`each`, `if`, etc.), use the [`bodyRaw` helper](#bodyraw) below.
+Get the value at a given `path` from the request's body if the `Content-Type` is set to `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`. This helper is designed to retrieve data, **stringify** it, it order to use it directly in a response. To reuse the retrieved data (strings, booleans, arrays, etc.) with other helpers (`each`, `if`, etc.), use the [`bodyRaw` helper](#bodyraw) below.
+
+- The `path` supports two syntaxes, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
+- XML bodies are parsed using [xml-js](https://www.npmjs.com/package/xml-js) package. Please refer to this [page](docs:requests/supported-body-formats#xml-support) or the package documentation for more information on how the XML is parsed and how to fetch specific properties.
+- `multipart/form-data` supports fields and files. Uploaded files will not be stored, but their metadata (`filename`, `mimetype`, `size`) will be available in the request body:
+
+ ```json
+ {
+ "field1": "value1",
+ "file1": {
+ "filename": "file1.txt",
+ "mimetype": "text/plain",
+ "size": 1234
+ }
+ }
+ ```
-- The `path` supports two syntaxes, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
- Please note that XML bodies are parsed using [xml-js](https://www.npmjs.com/package/xml-js) package. Refer to this [page](docs:response-configuration/xml-support) or the package documentation for more information on how the XML is parsed and how to fetch specific properties.
- Please also note that `multipart/form-data` only supports fields. Uploaded files will be ignored.
- Full objects or arrays can be retrieved by the helper.
-- The full request's raw body can also be fetched when the `path` is omitted (`{{body}}`) independently from the request's `Content-Type`.
+- The full request's body can also be fetched when the `path` is omitted (`{{body}}`) independently from the request's `Content-Type`.
- If no value is present at the requested `path`, the default value will be used.
- A third parameter (boolean) can be set to true to returns a stringified value even if it's a primitive.
+> 📘 Check the [supported requests body formats](docs:requests/supported-body-formats) documentation for more information on how the request body is parsed.
+
+> 🛠️ Use our online [JSONPath and object-path evaluator](/tools/json-object-path-evaluator/) to test your JSONPath or object-path syntaxes and view the results in real-time.
+
| Arguments (ordered) | Type | Description |
| ------------------- | ------- | -------------------------------------- |
| 0 | string | Path to the body property |
@@ -60,16 +76,32 @@ Get the value at a given `path` from the request body if the entering `Content-T
## bodyRaw
-Get the **raw** value at a given `path` from the request body if the entering `Content-Type` is set to `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`. This "raw" helper is designed to work with other helpers (`each`, `if`, etc.). To directly use the retrieved data in the response, use the [`body` helper](#body) above.
+Get the **raw** value (string, boolean, array, etc.) at a given `path` from the request's body if the `Content-Type` is set to `application/json`, `application/x-www-form-urlencoded`, `multipart/form-data`, `application/xml`, `application/soap+xml` or `text/xml`. This "raw" helper is designed to give you access to the values to use them with other helpers (`each`, `if`, etc.). To directly use the stringified data in the response, use the [`body` helper](#body) above.
+
+- The `path` supports two syntaxes, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
+- XML bodies are parsed using [xml-js](https://www.npmjs.com/package/xml-js) package. PLease refer to this [page](docs:requests/supported-body-formats#xml-support) or the package documentation for more information on how the XML is parsed and how to fetch specific properties.
+- `multipart/form-data` only supports fields and files. Uploaded files will not be stored, but their metadata (`filename`, `mimetype`, `size`) will be available in the request body:
+
+ ```json
+ {
+ "field1": "value1",
+ "file1": {
+ "filename": "file1.txt",
+ "mimetype": "text/plain",
+ "size": 1234
+ }
+ }
+ ```
-- The `path` supports two syntaxes, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
- Please note that XML bodies are parsed using [xml-js](https://www.npmjs.com/package/xml-js) package. Refer to this [page](docs:response-configuration/xml-support) or the package documentation for more information on how the XML is parsed and how to fetch specific properties.
- Please also note that `multipart/form-data` only supports fields. Uploaded files will be ignored.
- Full objects or arrays can be retrieved by the helper.
- The full request's raw body can also be fetched when the `path` is omitted (`{{bodyRaw}}`) independently from the request's `Content-Type`.
- If no value is present at the requested `path`, the default value will be used.
- This helper allows the use of `body` within handlebars' helpers such as `{{#each}}` and `{{#if}}`.
+> 📘 Check the [supported requests body formats](docs:requests/supported-body-formats) documentation for more information on how the request body is parsed.
+
+> 🛠️ Use our online [JSONPath and object-path evaluator](/tools/json-object-path-evaluator/) to test your JSONPath or object-path syntaxes and view the results in real-time.
+
| Arguments (ordered) | Type | Description |
| ------------------- | ------ | -------------------------------------- |
| 0 | string | Path to the body property |
@@ -108,6 +140,8 @@ Get the value at a given `path` from the request's query string. Complex query s
- If there is no value at the requested `path`, the default value will be used.
- A third parameter (boolean) can be set to true to returns a stringified value even if it's a primitive.
+> 🛠️ Use our online [JSONPath and object-path evaluator](/tools/json-object-path-evaluator/) to test your JSONPath or object-path syntaxes and view the results in real-time.
+
| Arguments (ordered) | Type | Description |
| ------------------- | ------- | -------------------------------------- |
| 0 | string | Path to the query param property |
@@ -140,6 +174,8 @@ Get the **raw** value at a given `path` from the request's query string. Complex
- If there is no value at the requested `path`, the default value will be used.
- This helper allows the use of `queryParam` within handlebars' helpers such as `{{#each}}` and `{{#if}}`.
+> 🛠️ Use our online [JSONPath and object-path evaluator](/tools/json-object-path-evaluator/) to test your JSONPath or object-path syntaxes and view the results in real-time.
+
| Arguments (ordered) | Type | Description |
| ------------------- | ------ | -------------------------------------- |
| 0 | string | Path to the query param property |
diff --git a/content/docs/v6.2.0/templating/mockoon-response-helpers.md b/content/docs/v9.0.0/templating/mockoon-response-helpers.md
similarity index 88%
rename from content/docs/v6.2.0/templating/mockoon-response-helpers.md
rename to content/docs/v9.0.0/templating/mockoon-response-helpers.md
index 7f11d081..3e71bd87 100644
--- a/content/docs/v6.2.0/templating/mockoon-response-helpers.md
+++ b/content/docs/v9.0.0/templating/mockoon-response-helpers.md
@@ -1,9 +1,9 @@
---
title: Response helpers
meta:
- title: Dynamically customize the response with with templating helpers
+ title: Dynamically customize your response with templating helpers
description: "Dynamically customize your mock environments response with Mockoon's templating response helpers. All formats are supported: JSON, CSV, HTML, etc."
-order: 503
+order: 504
---
# Templating response helpers
diff --git a/content/docs/v9.0.0/templating/mockoon-variables-helpers.md b/content/docs/v9.0.0/templating/mockoon-variables-helpers.md
new file mode 100644
index 00000000..c6455f16
--- /dev/null
+++ b/content/docs/v9.0.0/templating/mockoon-variables-helpers.md
@@ -0,0 +1,149 @@
+---
+title: Variables helpers
+meta:
+ title: Dynamically customize your responses with variables templating helpers
+ description: "Dynamically customize your mock environments response with Mockoon's templating variables helpers. All formats are supported: JSON, CSV, HTML, etc."
+order: 505
+---
+
+# Templating variables helpers
+
+---
+
+Mockoon offers the following helpers which can help you set **local or global variables**, and **access environment variables** in your templates:
+
+- [`setVar`](#setvar)
+- [`getVar`](#getvar)
+- [`setGlobalVar`](#setglobalvar)
+- [`getGlobalVar`](#getglobalvar)
+- [`getEnvVar`](#getenvvar)
+
+## setVar
+
+Set a variable to be used later in the template. The value can be the result of another helper. To use it elsewhere in the template, refer to the variable with its name prefixed with an `@`: `{{@varname}}`. The variable can also be used as a helper parameter: `{{#repeat @varname}}...{{/repeat}}`.
+Variables declared in a block helper will be scoped to the block and unavailable outside.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | -------------- |
+| 0 | string | Variable name |
+| 1 | any | Variable value |
+
+**Examples**
+
+```handlebars
+{{setVar 'varname' 'value'}}
+{{setVar 'varname' (body 'id')}}
+
+usage:
+{{@varname}}
+{{#repeat @varname}}...{{/repeat}}
+
+declare a variable in a block helper:
+{{#repeat 5}}
+ {{setVar 'random' (oneOf (array '1' '2' '3'))}}
+ {{@random}}
+{{/repeat}}
+
+{{setVar 'myArray' (array '1' '2' '3')}}
+{{#each @myArray}}
+ {{setVar 'eachIndex' @index}}
+ {{@eachIndex}}
+{{/repeat}}
+```
+
+## getVar
+
+Dynamically get a variable set with [`setVar`](#setvar).
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | ------------- |
+| 0 | string | Variable name |
+
+**Examples**
+
+```handlebars
+{{setVar 'varname' 'value'}}
+
+{{getVar 'varname'}}
+{{getVar (concat 'var' 'name')}}
+{{getVar (body 'property')}}
+```
+
+## setGlobalVar
+
+Set a global variable to be used anywhere templating is supported (body, headers, etc.). Global variables are available on all the routes of an environment and they are reset when the environment is restarted.
+
+- The variable name and values can be dynamically created using other helpers.
+- The variable can store any kind of data (arrays, objects, string, etc.).
+- To get the value of a global variable, use the [`{{getGlobalVar 'varName'}}` helper below](#getglobalvar).
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | -------------- |
+| 0 | string | Variable name |
+| 1 | any | Variable value |
+
+**Examples**
+
+```handlebars
+{{setGlobalVar 'varName' 'value'}}
+{{setGlobalVar 'varName' (bodyRaw 'id')}}
+{{setGlobalVar (queryParam 'param1') (bodyRaw 'id')}}
+```
+
+## getGlobalVar
+
+Get a global variable's value set with [`setGlobalVar`](#setglobalvar). Global variables are available on all the routes of an environment and they are reset when the environment is restarted.
+
+- The variable name and path can be dynamically created using other helpers.
+- The `path` supports two syntaxes, [object-path](https://www.npmjs.com/package/object-path) or [JSONPath Plus](https://www.npmjs.com/package/jsonpath-plus). When using object-path, properties containing dots are supported by escaping the dots: `key.key\.with\.dot`.
+ Please note that a value can be retrieved at the path if the variable contains valid JSON.
+- Primitives and data structures can be retrieved by the helper and reused in other helpers (see example below).
+- The full variable content (array, object, etc.) can be fetched when the `path` is omitted (`{{getGlobalVar 'varname'}}`).
+
+> 🛠️ Use our online [JSONPath and object-path evaluator](/tools/json-object-path-evaluator/) to test your JSONPath or object-path syntaxes and view the results in real-time.
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | -------------------------- |
+| 0 | string | Variable name |
+| 1 | string | Path to the value property |
+
+**Examples**
+
+```handlebars
+{{getGlobalVar 'varname'}}
+{{getGlobalVar (bodyRaw 'property')}}
+{{getGlobalVar (urlParam 'id')}}
+
+
+{{getGlobalVar 'varName' 'path.to.property'}}
+{{getGlobalVar 'varName' 'deep.property\.with\.dot'}}
+
+
+{{getGlobalVar 'varName' '$.array.[*].property'}}
+
+{{#repeat (getGlobalVar 'varname')}}...{{/repeat}}
+
+{{#each (getGlobalVar 'varName')}}...{{/each}}
+
+
+{{{stringify (getGlobalVar 'varName')}}}
+```
+
+## getEnvVar
+
+Get an environment variable. If the environment variable is not set, the default value will be used.
+
+By default, only environment variables with the `MOCKOON_` prefix are available. Learn more in the [environment variables documentation](docs:variables/environment-variables).
+
+| Arguments (ordered) | Type | Description |
+| ------------------- | ------ | ------------------------- |
+| 0 | string | Environment variable name |
+| 1 | any | Default value |
+
+**Examples**
+
+```handlebars
+{{getEnvVar 'MOCKOON_VARIABLE_NAME' 'default value'}}
+{{getEnvVar 'MOCKOON_VARIABLE_NAME'}}
+{{getEnvVar (body 'property')}}
+```
diff --git a/content/docs/v6.2.0/templating/overview.md b/content/docs/v9.0.0/templating/overview.md
similarity index 86%
rename from content/docs/v6.2.0/templating/overview.md
rename to content/docs/v9.0.0/templating/overview.md
index 25d92ede..144b2ed2 100644
--- a/content/docs/v6.2.0/templating/overview.md
+++ b/content/docs/v9.0.0/templating/overview.md
@@ -10,7 +10,7 @@ order: 500
---
-Mockoon implements [Handlebars](https://handlebarsjs.com/), [Faker.js v8.1.0](https://fakerjs.dev/), and a set of custom helpers to create dynamic responses. This templating system is supported in the [**data buckets**](#content-of-a-data-bucket), [**response's body**](#body-and-file-content-templating), [**header values**](#headers-and-rule-values), [**file content**](#body-and-file-content-templating), [**file path**](#file-input-templating) and [**rule values**](#headers-and-rule-values). You will find below a global overview of how and where you can use helpers. You can also check the [available helpers](#available-helpers) on specific documentation pages.
+Mockoon implements [Handlebars](https://handlebarsjs.com/), [Faker.js v8.1.0](https://fakerjs.dev/), and a set of custom helpers to create dynamic responses. This templating system is supported in the [**data buckets**](#content-of-a-data-bucket), [**response's body**](#body-and-file-content-templating), [**header**](#headers-and-rule), [**file content**](#body-and-file-content-templating), [**file path**](#file-input-templating) and [**rule**](#headers-and-rule). You will find below a global overview of how and where you can use helpers. You can also check the [available helpers](#available-helpers) on specific documentation pages.
## Helpers
@@ -21,7 +21,7 @@ All the helpers must be used according to Handlebars' syntax, for example: `{{he
Please note that a space always follows the helper name and separates each and all params like in `oneOf *space* (array *space* 'item1' *space* 'item2')`.
Also, parenthesis serves to prioritize a helper over another but not to symbolize a function call. Helpers do not require parenthesis in order to work.
-All Handlebars helpers are available (`if`, `each`, etc.). For more information, please have a look at [Handlebars' documentation](https://handlebarsjs.com/).
+All Handlebars helpers are available (`if`, `each`, etc.). For more information, please have a look at [Handlebars' documentation](https://handlebarsjs.com/guide/builtin-helpers.html#if).
### Special characters escaping
@@ -74,7 +74,7 @@ Here is an example of what you can do with this templating system:
}
```
-![body editor content{963x558}](docs-img:body-templating.png)
+![body editor content{1133x551}](docs-img:body-templating.png)
The above template produces the following body with this request:
@@ -171,11 +171,11 @@ Templating can be disabled for the body and file content in each route response
First, open the **Route response settings**:
-![click on route response fourth settings tab{997x153}](docs-img:open-route-response-settings.png)
+![click on route response fourth settings tab{1174x174}](docs-img:open-route-response-settings.png)
Then, disable the templating by checking the box:
-![check the disable templating box{1046x181}](docs-img:disable-route-response-templating.png)
+![check the disable templating box{1216x181}](docs-img:disable-route-response-templating.png)
### File input templating
@@ -187,16 +187,16 @@ If you have a set of files named `./file1.json` and `./file2.json`, a route para
If you call this route with `/myroute/1`, `./file1.json` will be sent.
-![add a templating helper in the file path{977x184}](docs-img:file-path-templating.png)
+![add a templating helper in the file path{1147x184}](docs-img:file-path-templating.png)
> For more information about absolute and relative file paths, please refer to our [file serving](docs:response-configuration/file-serving#absolute-or-relative-paths) documentation.
-### Headers and rule values
+### Headers and rule
Templating helpers can also be used in the **headers values** both in route headers and environment headers:
-![add a templating helper in the header value{997x223}](docs-img:headers-templating.png)
+![add a templating helper in the header value{1174x244}](docs-img:headers-templating.png)
Finally, templating helpers can be used in the response **rule values** to create dynamic rules:
-![screenshot showing a response rule with a template helper in the value field{997x164}](docs-img:template-helper-response-rule-value.png)
+![screenshot showing a response rule with a template helper in the value field{1167x154}](docs-img:template-helper-response-rule-value.png)
diff --git a/content/docs/v9.0.0/variables/environment-variables.md b/content/docs/v9.0.0/variables/environment-variables.md
new file mode 100644
index 00000000..71161c0b
--- /dev/null
+++ b/content/docs/v9.0.0/variables/environment-variables.md
@@ -0,0 +1,37 @@
+---
+title: Environment variables
+meta:
+ title: How to access environment variables
+ description: Avoid exposing your API keys and certificates by accessing environment variables in your mock server routes
+order: 552
+---
+
+# Environment variables
+
+---
+
+Mockoon offers the possibility to access **environment variables** in your templates using the [`getEnvVar`](docs:templating/mockoon-variables-helpers#getenvvar) helper. This allows you to avoid exposing your API keys and certificates in your mock server configuration.
+
+## Environment variables support
+
+Environment variables are accessible [everywhere templating helpers are supported](docs:templating/overview).
+
+## Default prefix
+
+By default, only the environment variables prefixed with `MOCKOON_` are available, for example, `MOCKOON_MY_VARIABLE`. You can access the variable in your templates using the `getEnvVar` helper:
+
+```handlebars
+{{getEnvVar 'MOCKOON_MY_VARIABLE'}}
+```
+
+> 📘 [Helper documentation](docs:templating/mockoon-variables-helpers#getenvvar).
+
+## Changing or removing the prefix
+
+You can change the prefix or remove it entirely in the application settings:
+
+![application settings modal with the prefix input highlighted{860x812}](docs-img:settings-environment-variables-prefix.png)
+
+Removing the prefix will make **all the environment variables** accessible in your templates.
+
+> 💡 Both the [CLI](https://github.com/mockoon/mockoon/blob/main/packages/cli/README.md#customize-the-environment-variables-prefix) and the [serverless library](https://github.com/mockoon/mockoon/blob/main/packages/serverless/README.md#options) have specific options to customize the prefix.
diff --git a/content/docs/v6.2.0/global-variables/overview.md b/content/docs/v9.0.0/variables/global-variables.md
similarity index 74%
rename from content/docs/v6.2.0/global-variables/overview.md
rename to content/docs/v9.0.0/variables/global-variables.md
index 6e0842d2..6ce87e32 100644
--- a/content/docs/v6.2.0/global-variables/overview.md
+++ b/content/docs/v9.0.0/variables/global-variables.md
@@ -1,16 +1,16 @@
---
-title: Overview
+title: Global variables
meta:
title: How to use global variables
description: Simulate and mock complex API workflows by sharing data between your mock server routes using global variables
-order: 550
+order: 551
---
# Global variables
---
-Mockoon offers the possibility to **share data** between your routes using global variables. These variables can be set and accessed using the [`setGlobalVar`](docs:templating/mockoon-helpers#setglobalvar) and [`getGlobalVar`](docs:templating/mockoon-helpers#setglobalvar) helpers at runtime.
+Mockoon offers the possibility to **share data** between your routes using **global variables**. These variables can be set and accessed using the [`setGlobalVar`](docs:templating/mockoon-variables-helpers#setglobalvar) and [`getGlobalVar`](docs:templating/mockoon-variables-helpers#getglobalvar) helpers at runtime.
## Global variables scope
@@ -20,7 +20,7 @@ Global variables are **shared** between **all routes** of an environment. Their
## Global variables support
-Global variables are available [everywhere templating helpers are supported](docs:templating/overview). However, it makes most sense to use them in the **response body**.
+Global variables are available [everywhere templating helpers are supported](docs:templating/overview). However, it makes most sense to use them in the **response body** and **rules**.
> 💡 While you can use global variables in data buckets, keep in mind that bucket content will be [generated when the server starts](docs:data-buckets/overview#data-buckets-generation), when global variables are not yet set.
@@ -40,7 +40,7 @@ Some examples:
{{setGlobalVar (queryParam 'param1') (bodyRaw 'id')}}
```
-> 📘 [Helper documentation](docs:templating/mockoon-helpers#setglobalvar).
+> 📘 [Helper documentation](docs:templating/mockoon-variables-helpers#setglobalvar).
### Get a global variable
@@ -67,4 +67,8 @@ Some examples:
{{{stringify (getGlobalVar 'varName')}}}
```
-> 📘 [Helper documentation](docs:templating/mockoon-helpers#getglobalvar).
+> 📘 [Helper documentation](docs:templating/mockoon-variables-helpers#getglobalvar).
+
+### Clear the global variables
+
+To clear all the global variables, use the `PURGE /mockoon-admin/global-vars` or `POST /mockoon-admin/global-vars/purge` endpoints from the [admin API](docs:admin-api/global-variables).
diff --git a/content/docs/v9.0.0/variables/local-variables.md b/content/docs/v9.0.0/variables/local-variables.md
new file mode 100644
index 00000000..8ab4d193
--- /dev/null
+++ b/content/docs/v9.0.0/variables/local-variables.md
@@ -0,0 +1,58 @@
+---
+title: Local variables
+meta:
+ title: How to use local template scoped variables
+ description: Simulate and mock complex API workflows by saving data in your templates using local template scoped variables
+order: 550
+---
+
+# Local (template-scoped) variables
+
+---
+
+Using the [`setVar`](docs:templating/mockoon-variables-helpers#setvar) and [`getVar`](docs:templating/mockoon-variables-helpers#getvar) helpers you can create **template-scoped (or local) variables** to save some intermediate data in your templates and avoid repeating the same logic multiple times.
+
+## Local variables scope
+
+Unlike [global variables](docs:variables/global-variables) which are **shared** between **all routes** of an environment, local variables are **scoped to the template** they are used in. Their values are **regenerated** each time the template is **re-evaluated**.
+
+> ⚠️These variables are **not shared between routes or responses**.
+
+## Local variables support
+
+Local variables are available [everywhere templating helpers are supported](docs:templating/overview).
+
+## Usage
+
+To set and access local variables, two templating helpers are available.
+
+### Set a local variable
+
+To set a variable, use the `setVar` helper. This helper takes two arguments: the variable name and its value. You can **dynamically set the parameters** using other helpers.
+
+Some examples:
+
+```handlebars
+{{setVar 'varname' 'value'}}
+{{setVar 'varname' (body 'id')}}
+```
+
+> 📘 [Helper documentation](docs:templating/mockoon-variables-helpers#setvar).
+
+### Get a local variable
+
+To get a global variable, use the `getVar` helper or refer to the variable with its name prefixed with an `@`. The helper takes two arguments: the variable name and an optional path. You can **dynamically set the parameters** using other helpers and use the fetched data in other helpers.
+
+Some examples:
+
+```handlebars
+# Set a variable
+{{setVar 'varname' 'value'}}
+
+# Get a variable
+{{@varname}}
+{{getVar 'varname'}}
+{{getVar (body 'property')}}
+```
+
+> 📘 [Helper documentation](docs:templating/mockoon-variables-helpers#getvar).
diff --git a/content/releases/5.0.0.md b/content/releases/5.0.0.md
index 7320f60c..1ead635b 100644
--- a/content/releases/5.0.0.md
+++ b/content/releases/5.0.0.md
@@ -25,7 +25,7 @@ Mockoon is an open-source project built by volunteer maintainers. If you like ou
We introduced two breaking changes in this major release:
- We dropped support for Node.js v16. The CLI and the serverless package now require at least Node.js 18.
-- Support was dropped for [legacy data files](https://mockoon.com/docs/latest/mockoon-data-files/data-storage-location/#old-system-pre-v1-16-0) in both Desktop and CLI. If you are updating from v1.15.0, please first update to any version between v1.16.0 and v4.1.0, then to v5.0.0.
+- Support was dropped for [legacy data files](https://mockoon.com/docs/v9.0.0/mockoon-data-files/data-storage-location/#old-system-pre-v1-16-0) in both Desktop and CLI. If you are updating from v1.15.0, please first update to any version between v1.16.0 and v4.1.0, then to v5.0.0.
---
@@ -59,7 +59,7 @@ We also updated the desktop application's demo environment to showcase this new
## Desktop application
-- **Breaking change**: Support was dropped for [legacy data files](https://mockoon.com/docs/latest/mockoon-data-files/data-storage-location/#old-system-pre-v1-16-0) (pre v1.16.0). The desktop application will no longer automatically migrate your environments from the old system. If you are updating from v1.15.0, please first update to any version between v1.16.0 and v4.1.0, then to v5.0.0. (Issue [#1138](https://github.com/mockoon/mockoon/issues/1138))
+- **Breaking change**: Support was dropped for [legacy data files](https://mockoon.com/docs/v9.0.0/mockoon-data-files/data-storage-location/#old-system-pre-v1-16-0) (pre v1.16.0). The desktop application will no longer automatically migrate your environments from the old system. If you are updating from v1.15.0, please first update to any version between v1.16.0 and v4.1.0, then to v5.0.0. (Issue [#1138](https://github.com/mockoon/mockoon/issues/1138))
- We added a link in the footer update notification to let you easily check the new version's changelog (will be visible for updates >v5.0.0):
@@ -68,7 +68,7 @@ We also updated the desktop application's demo environment to showcase this new
## CLI
- **Breaking change**: We dropped support for Node.js v16. The CLI now requires Node.js 18 at least. (Issue [#1119](https://github.com/mockoon/mockoon/issues/1119))
-- **Breaking change**: Support was dropped for opening [legacy data files](https://mockoon.com/docs/latest/mockoon-data-files/data-storage-location/#old-system-pre-v1-16-0) (pre v1.16.0). (Issue [#1138](https://github.com/mockoon/mockoon/issues/1138))
+- **Breaking change**: Support was dropped for opening [legacy data files](https://mockoon.com/docs/v9.0.0/mockoon-data-files/data-storage-location/#old-system-pre-v1-16-0) (pre v1.16.0). (Issue [#1138](https://github.com/mockoon/mockoon/issues/1138))
- The Docker image is now tagged with its major version. Starting with version 5, all v5.x.x will be tagged `5` and so on. (Issue [#1132](https://github.com/mockoon/mockoon/issues/1132))
## Serverless package
diff --git a/content/releases/8.0.0.md b/content/releases/8.0.0.md
index 4a1bad36..08a35ada 100644
--- a/content/releases/8.0.0.md
+++ b/content/releases/8.0.0.md
@@ -20,6 +20,12 @@ Mockoon is an open-source project built by volunteer maintainers. If you like ou
[![sponsor button](https://mockoon.com/images/sponsor-btn-250.png?)](https://github.com/sponsors/mockoon)
+You can also support us by subscribing to our Cloud and enjoy a whole new level of capabilities: real-time collaboration, cloud deployments, AI-powered API mocks generation, enterprise-grade support, and more to come!
+
+[![subscribe to cloud button](https://mockoon.com/images/cloud-btn-250.png?)](https://mockoon.com/cloud/)
+
+_Your contribution fuels Mockoon’s independence and keeps the project alive!_
+
---
## Data synchronization and team collaboration
diff --git a/content/releases/8.1.0.md b/content/releases/8.1.0.md
index 40dac612..625b58b4 100644
--- a/content/releases/8.1.0.md
+++ b/content/releases/8.1.0.md
@@ -18,6 +18,12 @@ Mockoon is an open-source project built by volunteer maintainers. If you like ou
[![sponsor button](https://mockoon.com/images/sponsor-btn-250.png?)](https://github.com/sponsors/mockoon)
+You can also support us by subscribing to our Cloud and enjoy a whole new level of capabilities: real-time collaboration, cloud deployments, AI-powered API mocks generation, enterprise-grade support, and more to come!
+
+[![subscribe to cloud button](https://mockoon.com/images/cloud-btn-250.png?)](https://mockoon.com/cloud/)
+
+_Your contribution fuels Mockoon’s independence and keeps the project alive!_
+
---
## Logs view improvements
diff --git a/content/releases/8.1.1.md b/content/releases/8.1.1.md
index 12916ec9..a6ffc9a1 100644
--- a/content/releases/8.1.1.md
+++ b/content/releases/8.1.1.md
@@ -18,6 +18,12 @@ Since allowing opening multiple environments at once in v8.1.0, two bugs were fi
Welcome to this new release of Mockoon. It brings new exciting features: **improved logs view**, **new admin API features**, **new CLI flags**, and serverless options, **environment variables support for the TLS settings**. Read on to learn more about this release.
+You can also support us by subscribing to our Cloud and enjoy a whole new level of capabilities: real-time collaboration, cloud deployments, AI-powered API mocks generation, enterprise-grade support, and more to come!
+
+[![subscribe to cloud button](https://mockoon.com/images/cloud-btn-250.png?)](https://mockoon.com/cloud/)
+
+_Your contribution fuels Mockoon’s independence and keeps the project alive!_
+
---
## Our sponsors
diff --git a/content/releases/8.2.0.md b/content/releases/8.2.0.md
index a8db2f5b..d8f8396c 100644
--- a/content/releases/8.2.0.md
+++ b/content/releases/8.2.0.md
@@ -18,6 +18,12 @@ Mockoon is an open-source project built by volunteer maintainers. If you like ou
[![sponsor button](https://mockoon.com/images/sponsor-btn-250.png?)](https://github.com/sponsors/mockoon)
+You can also support us by subscribing to our Cloud and enjoy a whole new level of capabilities: real-time collaboration, cloud deployments, AI-powered API mocks generation, enterprise-grade support, and more to come!
+
+[![subscribe to cloud button](https://mockoon.com/images/cloud-btn-250.png?)](https://mockoon.com/cloud/)
+
+_Your contribution fuels Mockoon’s independence and keeps the project alive!_
+
---
## Desktop UI improvements and polishings
diff --git a/content/releases/8.3.0.md b/content/releases/8.3.0.md
index aacee2b0..a7d48e8c 100644
--- a/content/releases/8.3.0.md
+++ b/content/releases/8.3.0.md
@@ -19,6 +19,12 @@ Mockoon is an open-source project built by volunteer maintainers. If you like ou
[![sponsor button](https://mockoon.com/images/sponsor-btn-250.png?)](https://github.com/sponsors/mockoon)
+You can also support us by subscribing to our Cloud and enjoy a whole new level of capabilities: real-time collaboration, cloud deployments, AI-powered API mocks generation, enterprise-grade support, and more to come!
+
+[![subscribe to cloud button](https://mockoon.com/images/cloud-btn-250.png?)](https://mockoon.com/cloud/)
+
+_Your contribution fuels Mockoon’s independence and keeps the project alive!_
+
---
## Cloud deployments are now available in Mockoon Cloud
diff --git a/content/releases/8.4.0.md b/content/releases/8.4.0.md
index 69e123bb..cd4bda45 100644
--- a/content/releases/8.4.0.md
+++ b/content/releases/8.4.0.md
@@ -19,6 +19,12 @@ Mockoon is an open-source project built by volunteer maintainers. If you like ou
[![sponsor button](https://mockoon.com/images/sponsor-btn-250.png?)](https://github.com/sponsors/mockoon)
+You can also support us by subscribing to our Cloud and enjoy a whole new level of capabilities: real-time collaboration, cloud deployments, AI-powered API mocks generation, enterprise-grade support, and more to come!
+
+[![subscribe to cloud button](https://mockoon.com/images/cloud-btn-250.png?)](https://mockoon.com/cloud/)
+
+_Your contribution fuels Mockoon’s independence and keeps the project alive!_
+
---
## Templating support in rules property/path
diff --git a/content/releases/9.0.0.md b/content/releases/9.0.0.md
index e3aed0c7..9443239e 100644
--- a/content/releases/9.0.0.md
+++ b/content/releases/9.0.0.md
@@ -19,11 +19,17 @@ Mockoon is an open-source project built by volunteer maintainers. If you like ou
[![sponsor button](https://mockoon.com/images/sponsor-btn-250.png?)](https://github.com/sponsors/mockoon)
+You can also support us by subscribing to our Cloud and enjoy a whole new level of capabilities: real-time collaboration, cloud deployments, AI-powered API mocks generation, enterprise-grade support, and more to come!
+
+[![subscribe to cloud button](https://mockoon.com/images/cloud-btn-250.png?)](https://mockoon.com/cloud/)
+
+_Your contribution fuels Mockoon’s independence and keeps the project alive!_
+
---
## ⚠️ Breaking changes
-- Many new features were added (new rule types, new WebSocket routes, etc.) which resulted in **modifications of the [data files](https://mockoon.com/docs/latest/mockoon-data-files/data-storage-location/) schema**. If you are using your data files with the CLI or serverless package, or if you are sharing your setup with your team, we recommend you migrate every application to the new version at the same time to avoid any compatibility issues.
+- Many new features were added (new rule types, new WebSocket routes, etc.) which resulted in **modifications of the [data files](https://mockoon.com/docs/latest/mockoon-data-files/data-files-location/) schema**. If you are using your data files with the CLI or serverless package, or if you are sharing your setup with your team, we recommend you migrate every application to the new version at the same time to avoid any compatibility issues.
_Note for teams using our Cloud_: We recommend that all team members update their application to the new version at the same time to ensure a smooth transition ([more information](https://mockoon.com/docs/latest/mockoon-cloud/data-synchronization-team-collaboration/#major-versions-migrations)). API deployed in our Cloud instances will continue running following the old schema (v8) until they are redeployed ([more information](https://mockoon.com/docs/latest/mockoon-cloud/api-mock-cloud-deployments/#major-versions-migrations)).
diff --git a/content/releases/9.1.0.md b/content/releases/9.1.0.md
new file mode 100644
index 00000000..c6c2ca10
--- /dev/null
+++ b/content/releases/9.1.0.md
@@ -0,0 +1,120 @@
+---
+meta:
+ title: Mockoon release v9.1.0
+ description: Discover Mockoon applications new v9.1.0 release with data buckets state reporting, custom subdomains for cloud deployments, new --proxy CLI flag, JSON Schema formats support, and many more improvements and fixes
+date: '2024-12-05'
+---
+
+Welcome to this new release of Mockoon. It brings many improvements among which **data buckets state reporting**, **custom subdomains for cloud deployments**, **new `--proxy` CLI flag**, **JSON Schema formats support**, and many more improvements and fixes.
+Read on to learn more about this release.
+
+---
+
+## Our sponsors
+
+[![GitHub](https://mockoon.com/images/sponsors/github.png)](https://github.blog/2023-04-12-github-accelerator-our-first-cohort-and-whats-next/)
+[![Localazy](https://mockoon.com/images/sponsors/localazy.png)](https://localazy.com/register?ref=a9CiDC61gOac-azO)
+
+Mockoon is an open-source project built by volunteer maintainers. If you like our application, please consider sponsoring us and join all the [Sponsors and Backers](https://github.com/mockoon/mockoon/blob/main/backers.md) who helped this project over time!
+
+[![sponsor button](https://mockoon.com/images/sponsor-btn-250.png?)](https://github.com/sponsors/mockoon)
+
+You can also support us by subscribing to our Cloud and enjoy a whole new level of capabilities: real-time collaboration, cloud deployments, AI-powered API mocks generation, enterprise-grade support, and more to come!
+
+[![subscribe to cloud button](https://mockoon.com/images/cloud-btn-250.png?)](https://mockoon.com/cloud/)
+
+_Your contribution fuels Mockoon’s independence and keeps the project alive!_
+
+## Improved data buckets state reporting
+
+Because it can be difficult to know if your data buckets are generating valid JSON data, we added a new indicator in the UI to show you if they were **generated** and if the result was **valid JSON**:
+
+![data bucket state indicator](/images/releases/9.1.0/data-bucket-state-indicator.png)
+
+You can also click on the indicator to see the generated data in an editor and the validation error, if any (read-only):
+
+![data bucket state editor](/images/releases/9.1.0/data-bucket-state-editor.png)
+
+(Issue [#1581](https://github.com/mockoon/mockoon/issues/1581))
+
+## Cloud deployments
+
+We added two new options to configure your mock deployments in the cloud: you can now **customize the subdomain** of your cloud deployment (e.g. `my-subdomain.mockoon.app`) and **disable the admin API** for your mock.
+
+![cloud deployment dialog with custom subdomain and disable admin api option](/images/releases/9.1.0/cloud-deployment-subdomain-disable-admin-api.png)
+
+(Issues [#1572](https://github.com/mockoon/mockoon/issues/1572) and [#1614](https://github.com/mockoon/mockoon/issues/1614))
+
+## New `--proxy` CLI flag and disabled routes wildcard support
+
+We added a **new `--proxy` flag** to the CLI to allow you to override the proxy setting of your mock. This flag can either be set to **'enabled'** or **'disabled'**. This is useful when you want to start a mock with a different proxy setting than the one saved in the configuration file.
+
+`mockoon-cli start -d ./mock.json --proxy enabled`
+
+We also update the disabled routes flag and Serverless options behavior. You can now disable all routes at runtime by using a wildcard:
+
+**With the CLI**:
+
+`mockoon-cli start -d ./mock.json --disable-routes=*`
+
+**With the Serverless package**:
+
+```javascript
+const mockoonServerless = new mockoon.MockoonServerless(mockEnv, {
+ disabledRoutes: ['*']
+});
+```
+
+(Issue [#1024](https://github.com/mockoon/mockoon/issues/1024))
+
+## Improved request's path rule
+
+The **request's path rule** will now compare the value against both the **original** and **actual** **paths**, for example, `/users/:id` and `/users/123`. It is now easier to override CRUD route operations.
+
+![rule targeting the request path](/images/releases/9.1.0/rule-targeting-request-path.png)
+
+(Issue [#1605](https://github.com/mockoon/mockoon/issues/1605))
+
+## JSON Schema formats support and bug fixes
+
+We added support for **JSON Schema formats**. You can now use the `format` keyword in your JSON Schema to validate your request bodies.
+
+```json
+{
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "format": "email"
+ }
+ }
+}
+```
+
+(Issue [#1594](https://github.com/mockoon/mockoon/issues/1594))
+
+We also fixed a bug that prevented JSON schema from being compared against the root-level request body.
+(Issue [#1595](https://github.com/mockoon/mockoon/issues/1595))
+
+We published a new tutorial on how to use JSON Schema formats in Mockoon. [Check it out](https://mockoon.com/tutorials/validate-requests-payload-json-schema/).
+
+## Templating helpers object merging
+
+We added a new **[`objectMerge` templating helper](https://mockoon.com/docs/latest/templating/mockoon-helpers/#objectmerge)** to merge two or more objects. We also added a new `merge` operator to the [`setData` helper](https://mockoon.com/docs/latest/templating/mockoon-helpers/#setdata) and made [`concat`](https://mockoon.com/docs/latest/templating/mockoon-helpers/#concat) compatible with arrays.
+
+These changes should make object manipulation and merging easier in your templates.
+
+(Issue [#1620](https://github.com/mockoon/mockoon/issues/1620))
+
+## Fixes
+
+- You can now target properties with dots in the file path input (e.g., `./folder/{{queryParam 'file\.name'}}.json`). (Issue [#1623](https://github.com/mockoon/mockoon/issues/1623))
+- The `zipcode` templating helper was detected as a request helper and was delaying data bucket initialization. This is now fixed. (Issue [#1589](https://github.com/mockoon/mockoon/issues/1589))
+- Brackets used for priority are now supported in JSONPath expressions: `$[?(@.status==='enabled' && (@.id===1 || @.id===2))]`. (Issue [#1583](https://github.com/mockoon/mockoon/issues/1583))
+- Copying a route full path from the drop down-menu now uses the correct protocol for WebSocket routes. (Issue [#1579](https://github.com/mockoon/mockoon/issues/1579))
+- The WebSocket server now correctly answers with a 404 when requesting a connection to a non-existent WebSocket endpoint. (Issue [#1612](https://github.com/mockoon/mockoon/issues/1612))
+- Multipart/form-data parsing now supports multiple files and fields with the same name (not using the array/bracket notation). (Issue [#1613](https://github.com/mockoon/mockoon/issues/1613))
+
+## Chores
+
+- We updated the libraries and applications dependencies to their latest versions. As a result, we updated Faker.js to v9.3.0 which includes new functions (`jwt`, etc.) (see Faker.js [release notes](https://github.com/faker-js/faker/releases)).
diff --git a/content/tutorials/create-endpoint-serving-static-file.md b/content/tutorials/create-endpoint-serving-static-file.md
index 01689477..7bf9dabd 100644
--- a/content/tutorials/create-endpoint-serving-static-file.md
+++ b/content/tutorials/create-endpoint-serving-static-file.md
@@ -35,7 +35,7 @@ The `:path?` part of the route path is a **route parameter** that will capture t
### Configure the body response
-To serve a file we will use the **"File" response body type**. This response body type allows you to return a file from your local file system as the response body. This field supports [templating helpers](docs:templating/overview) like `{{ urlParam }}` to **dynamically serve the requested file** based on the route parameter. It also supports [absolute or relative paths](docs:response-configuration/file-serving#absolute-or-relative-paths). When a relative path is used, it is resolved relatively to the [environment data file location](docs:mockoon-data-files/data-storage-location#locating-the-files).
+To serve a file we will use the **"File" response body type**. This response body type allows you to return a file from your local file system as the response body. This field supports [templating helpers](docs:templating/overview) like `{{ urlParam }}` to **dynamically serve the requested file** based on the route parameter. It also supports [absolute or relative paths](docs:response-configuration/file-serving#absolute-or-relative-paths). When a relative path is used, it is resolved relatively to the [environment data file location](docs:mockoon-data-files/data-files-location#locating-the-files).
![body type selector with file input showing a templating helper {977x145}](/images/tutorials/create-endpoint-serving-static-file/configure-response-body-to-serve-file.png)
diff --git a/content/tutorials/getting-started.md b/content/tutorials/getting-started.md
index a69c9c9c..790dd2ab 100644
--- a/content/tutorials/getting-started.md
+++ b/content/tutorials/getting-started.md
@@ -37,7 +37,7 @@ At the first launch, you will have a default setup, the **demo API**, also calle
You can keep this demo environment and build from here or create a new empty one, which we will do in this tutorial.
-To create a new mock API, click on the "New environment" button. You will be prompted to save the [environment's data file](docs:mockoon-data-files/data-storage-location) on your computer:
+To create a new mock API, click on the "New environment" button. You will be prompted to save the [environment's data file](docs:mockoon-data-files/data-files-location) on your computer:
![Recording of creating a new environment{1468x886}](/images/tutorials/getting-started/create-first-mock-api.gif)
diff --git a/content/tutorials/self-host-mock-api-server-cli.md b/content/tutorials/self-host-mock-api-server-cli.md
index 7b24be6a..e17d1a34 100644
--- a/content/tutorials/self-host-mock-api-server-cli.md
+++ b/content/tutorials/self-host-mock-api-server-cli.md
@@ -23,7 +23,7 @@ Mockoon CLI is an [NPM package](https://www.npmjs.com/package/@mockoon/cli) that
## How to use the CLI?
-After **designing your mock API in the main application**, the CLI will be able to **consume the [data file](/docs/latest/mockoon-data-files/data-storage-location/) and run the mock API** on your server.
+After **designing your mock API in the main application**, the CLI will be able to **consume the [data file](/docs/latest/mockoon-data-files/data-files-location/) and run the mock API** on your server.
### Step 1. Create a mock API using Mockoon desktop
diff --git a/content/tutorials/use-persisting-data-buckets.md b/content/tutorials/use-persisting-data-buckets.md
index d0510f3a..f2639262 100644
--- a/content/tutorials/use-persisting-data-buckets.md
+++ b/content/tutorials/use-persisting-data-buckets.md
@@ -137,6 +137,10 @@ You can also **manipulate data buckets programmatically** using the [`setData`](
```handlebars
{{setData 'set' 'bucketNameOrId' 'path.to.property' 'newValue'}}
+
+{{setData 'merge' 'bucketNameOrId' 'path.to.property' (object key='value')}}
+
+{{setData 'merge' 'bucketNameOrId' 'path.to.property' (bodyRaw)}}
{{setData 'push' 'bucketNameOrId' 'path.to.array' 'newValue'}}
{{setData 'del' 'bucketNameOrId' 'path.to.property'}}
{{setData 'inc' 'bucketNameOrId' 'path.to.property' 2}}
diff --git a/content/tutorials/validate-requests-payload-json-schema.md b/content/tutorials/validate-requests-payload-json-schema.md
new file mode 100644
index 00000000..c06c429c
--- /dev/null
+++ b/content/tutorials/validate-requests-payload-json-schema.md
@@ -0,0 +1,215 @@
+---
+title: Validate your request payloads with JSON Schema
+excerpt: Learn how to validate your request payloads with JSON Schema in Mockoon to ensure your API clients send the correct data
+meta:
+ title: Validate your request payloads with JSON Schema
+ description: Learn how to validate your request payloads with JSON Schema in Mockoon to ensure your API clients send the correct data
+image: tutorial-validate-requests-payload-json-schema.png
+imageAlt: mockoon logo next to the json schema logo
+imageWidth: 1200
+imageHeight: 400
+tags:
+ - mockoon
+order: 61
+mockApiFile: https://raw.githubusercontent.com/mockoon/mock-samples/refs/heads/main/tutorials/simulate-webhooks-and-callbacks.json
+---
+
+In this tutorial, we will learn how to **validate your request payloads** with **JSON Schema** to ensure your API clients send the correct data.
+
+JSON Schema is a powerful tool to define the **structure of your JSON data**. It allows you to specify the type of each field, the required fields, and the allowed values.
+
+> 📘 To learn more about JSON Schema, you can check the [official documentation](https://json-schema.org/).
+
+In Mockoon, you can use a JSON schema in the **rules** of an endpoint to **validate the request payload**. JSON Schemas can also be used to **validate other sources of data**, like query parameters, but we will focus on the request body in this tutorial, which is the most common use case.
+
+Let's create a simple example with a **user registration endpoint**. We will create a new endpoint that will accept a JSON payload with the user's email and password. We will use a JSON Schema to validate the payload and return an error if the payload is incorrect.
+
+> 💡 This tutorial assumes you are familiar with the basics of Mockoon, like creating endpoints and using templates. If you are new to Mockoon, you can check the other [tutorials](/tutorials/) to get started
+
+> ⚠️ This tutorial requires v9.1.0 or later of Mockoon. You can download the latest version of Mockoon [here](https://mockoon.com/download/).
+
+## 1. Create a new data bucket to store the JSON Schema
+
+The first step is to **create a new [data bucket](/docs/latest/data-buckets/overview/)** to store the JSON Schema. A data bucket is like a simple JSON database that can be used to store and share data between endpoints. To compare a source of data with a JSON Schema, the rule system requires the JSON Schema to be stored in a data bucket.
+
+Go to the "Data" view, click on the "Add data" button, and name it "sign_up":
+
+![new data bucket named sign_up](/images/tutorials/validate-requests-payload-json-schema/new-sign-up-data-bucket.png)
+
+We **added a JSON Schema** in the data bucket to validate the user registration payload. This schema requires the `username`, `email`, and `password` fields to be present and to have the correct types and formats. You will find this schema below:
+
+```json
+{
+ "type": "object",
+ "properties": {
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ },
+ "password": {
+ "type": "string",
+ "minLength": 6
+ }
+ },
+ "required": ["username", "email", "password"]
+}
+```
+
+> 🛠️ We created an online tool to help you [**validate your JSON Schema**](/tools/json-schema-validator/) before using it in Mockoon.
+
+We **generated this JSON Schema** using an AI assistant part of Mockoon Cloud. This assistant can help you generate JSON templates, schema, and more.
+
+![screenshot of the sign up JSON schema generated by our AI assistant](/images/tutorials/validate-requests-payload-json-schema/sign-up-json-schema-assistant.png)
+
+> 💡 Learn more about the AI assistant in the [Mockoon Cloud documentation](/docs/latest/mockoon-cloud/templates-and-ai-assistant/).
+
+## 2. Create a new "sign up" endpoint
+
+The next step is to **create a new endpoint** that will simulate the user registration in your application. This endpoint will contain two responses: a **default one with a 400 status code** and an error message if the payload is incorrect and a **successful one with a 201 status code** if the payload is correct.
+
+Let's create a new HTTP `POST` route with the path `/signup`:
+
+![new HTTP POST route showing the path /signup](/images/tutorials/validate-requests-payload-json-schema/create-sign-up-endpoint.png)
+
+The first response, the **default** one, will return a **400 status code** and an error message if the **payload is incorrect**. Change the status code and add the following template to the response body:
+
+```json
+{
+ "error": "Invalid payload"
+}
+```
+
+Your new endpoint should look like this:
+
+![default response with a 400 status code and an error message](/images/tutorials/validate-requests-payload-json-schema/default-400-response.png)
+
+> 📘 The default response, marked with a blue flag, is the response that will be sent if no other rule matches the request. To learn more about our rule system, you can check the [official documentation](/docs/latest/route-responses/dynamic-rules/).
+
+## 3. Add a second response to validate the payload
+
+Now that we have an **endpoint with a default 400 response** to handle invalid payloads, let's **add a second response** to validate the payload with the JSON Schema stored in the data bucket.
+
+We will need to **create a new response** with a 201 status code, a successful message, and a **rule** to validate the payload with the JSON Schema, to only trigger this response if the payload is correct.
+
+Add a new response by clicking on the "Add response" button. Set the status code to 201 and add the following template to the response body:
+
+```json
+{
+ "message": "User registered successfully"
+}
+```
+
+Your new response should look like this:
+
+![new response with a 201 status code and a success message](/images/tutorials/validate-requests-payload-json-schema/success-201-response.png)
+
+Then, click the "Rules" tab and **add a new rule** to validate the request payload with the JSON Schema stored in the data bucket.
+
+We need to **compare the request payload** (body) with the **JSON Schema stored in the data bucket**. Select the "Body" source and the "Valid JSON Schema" operator. Then, enter "sign_up" in the rule value to reference the data bucket containing the JSON Schema:
+
+![rule to validate the request payload with the JSON Schema](/images/tutorials/validate-requests-payload-json-schema/validate-payload-rule.png)
+
+## 4. Test your endpoint
+
+To **test your new workflow**, **start your mock API server** (using the "Play" arrow at the top). Then, using your favorite HTTP client (like [Postman](https://www.postman.com/), [Insomnia](https://insomnia.rest/), or [curl](https://curl.se/)), **send a `POST` request** to the `/signup` endpoint with a Content-Type header set to `application/json` and a JSON payload like this:
+
+```json
+{
+ "username": "john_doe",
+ "email": "john@example.org",
+ "password": "password123"
+}
+```
+
+You should **receive a 201 status code** and a success message if the **payload is correct**. If you send an **incorrect payload**, you will **receive a 400 status code** and an error message.
+
+## Going further
+
+After completing this tutorial, there are many ways you can improve your workflow with JSON Schema validation in Mockoon:
+
+- Store **multiple JSON Schemas** in the same data bucket.
+- Use JSON Schema to **validate other sources** of data, like query parameters.
+- Use a **"guard" route** with **global rules** to validate the request payload for multiple endpoints.
+
+### Store multiple JSON Schemas in the same data bucket
+
+You can **store multiple JSON Schemas** in the same data bucket to validate different types of payloads. For example, you can store a JSON Schema for the user registration endpoint and another for the user login endpoint in the same data bucket.
+
+It can be done by adding multiple JSON Schemas in the same data bucket on different properties, here, `sign_up` and `login`:
+
+```json
+{
+ "sign_up": {
+ "type": "object",
+ "properties": {
+ "username": {
+ "type": "string"
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ },
+ "password": {
+ "type": "string",
+ "minLength": 6
+ }
+ },
+ "required": ["username", "email", "password"]
+ },
+ "login": {
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "format": "email"
+ },
+ "password": {
+ "type": "string",
+ "minLength": 6
+ }
+ },
+ "required": ["email", "password"]
+ }
+}
+```
+
+The only difference after that is to reference the correct JSON Schema in the rule value by using the dot notation (e.g. mySchemasBucket.sign_up):
+
+![rule with a value referencing a specific JSON Schema in a data bucket](/images/tutorials/validate-requests-payload-json-schema/multiple-json-schemas-rule.png)
+
+### Use JSON Schema to validate the query parameters
+
+You can use JSON Schema to **validate other sources of data**, like **query parameters**. For example, you can validate the query parameters of a `GET` request with a JSON Schema stored in a data bucket:
+
+```json
+{
+ "type": "object",
+ "properties": {
+ "page": {
+ "type": "integer",
+ "minimum": 1
+ },
+ "limit": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100
+ }
+ },
+ "required": ["page", "limit"]
+}
+```
+
+To validate the query parameters, you need to select the "Query" source in the rule, leave the path empty (unless you want to validate a specific query parameter), and use the "Valid JSON Schema" operator:
+
+![rule to validate the query parameters with a JSON Schema](/images/tutorials/validate-requests-payload-json-schema/validate-query-parameters-rule.png)
+
+### Validate the request payload for multiple endpoints
+
+If you have multiple endpoints requiring the same JSON Schema validation, you can use a **"guard" route** to validate the request payload before the request is processed by the other endpoints.
+
+A "guard" route is a route that is triggered before the other routes and lets pass the request only if the rules are matched.
+
+Visit the dedicated [tutorial on global rules](/tutorials/create-global-rules-routes/) to learn more about this feature.
diff --git a/firebase.json b/firebase.json
index 6ad0e6dd..dfffa29e 100644
--- a/firebase.json
+++ b/firebase.json
@@ -44,7 +44,7 @@
},
{
"source": "/releases{,/}",
- "destination": "/releases/9.0.0/",
+ "destination": "/releases/9.1.0/",
"type": 302
},
{
@@ -97,6 +97,16 @@
"destination": "/docs/latest/mockoon-cloud/templates-and-ai-assistant/",
"type": 301
},
+ {
+ "source": "/docs/latest/mockoon-data-files/sharing-mock-api-files{,/}",
+ "destination": "/docs/latest/mockoon-data-files/data-files-location/",
+ "type": 301
+ },
+ {
+ "source": "/docs/latest/mockoon-data-files/environment-clipboard-copy{,/}",
+ "destination": "/docs/latest/mockoon-data-files/sharing-mock-api-files/",
+ "type": 301
+ },
{
"source": "/tutorials/angular-mocking{,/}",
"destination": "/tutorials/angular-api-call-and-mocking/",
diff --git a/package-lock.json b/package-lock.json
index 953c0481..2d296403 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"@codemirror/lang-xml": "^6.0.2",
"@codemirror/lang-yaml": "^6.0.0",
"@docsearch/react": "^3.5.2",
- "@mockoon/cloud": "^8.3.1",
+ "@mockoon/cloud": "file:../mockoon/packages/cloud",
"@tanstack/react-query": "^5.8.3",
"@uiw/codemirror-theme-nord": "^4.21.21",
"@uiw/react-codemirror": "^4.21.21",
@@ -69,6 +69,21 @@
"typescript": "^5.2.2"
}
},
+ "../mockoon/packages/cloud": {
+ "version": "9.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@mockoon/commons": "9.0.0",
+ "tslib": "2.8.0"
+ },
+ "devDependencies": {
+ "@types/node": "22.7.9",
+ "typescript": "5.6.3"
+ },
+ "funding": {
+ "url": "https://mockoon.com/sponsor-us/"
+ }
+ },
"node_modules/@algolia/autocomplete-core": {
"version": "1.17.7",
"resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz",
@@ -1387,12 +1402,14 @@
"node_modules/@hapi/hoek": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
- "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="
+ "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
+ "dev": true
},
"node_modules/@hapi/topo": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
"integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
+ "dev": true,
"dependencies": {
"@hapi/hoek": "^9.0.0"
}
@@ -1787,26 +1804,8 @@
}
},
"node_modules/@mockoon/cloud": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/@mockoon/cloud/-/cloud-8.4.0.tgz",
- "integrity": "sha512-S0+z0o4xmWaEjeVAch9EqQ0yKJHbZkpLNeyz7UduqlZvOpt+PQjfQY5Ty+79L5fVfQ9pD0XIdeYUA1rNwSVjpA==",
- "dependencies": {
- "@mockoon/commons": "8.4.0"
- },
- "funding": {
- "url": "https://mockoon.com/sponsor-us/"
- }
- },
- "node_modules/@mockoon/cloud/node_modules/@mockoon/commons": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/@mockoon/commons/-/commons-8.4.0.tgz",
- "integrity": "sha512-4rJE2l+NqmZWezcXXTOGH76v/y+qzKJbji0v+MxJPZWvaPlH/iNpUSTzky/9qerldS1SVgqhe5tCfbMfVwR8Hg==",
- "dependencies": {
- "joi": "17.13.3"
- },
- "funding": {
- "url": "https://mockoon.com/sponsor-us/"
- }
+ "resolved": "../mockoon/packages/cloud",
+ "link": true
},
"node_modules/@mockoon/commons": {
"version": "9.0.0",
@@ -1919,126 +1918,6 @@
"@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/@next/swc-darwin-arm64": {
- "version": "14.2.17",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.17.tgz",
- "integrity": "sha512-WiOf5nElPknrhRMTipXYTJcUz7+8IAjOYw3vXzj3BYRcVY0hRHKWgTgQ5439EvzQyHEko77XK+yN9x9OJ0oOog==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "14.2.17",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.17.tgz",
- "integrity": "sha512-29y425wYnL17cvtxrDQWC3CkXe/oRrdt8ie61S03VrpwpPRI0XsnTvtKO06XCisK4alaMnZlf8riwZIbJTaSHQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.2.17",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.17.tgz",
- "integrity": "sha512-SSHLZls3ZwNEHsc+d0ynKS+7Af0Nr8+KTUBAy9pm6xz9SHkJ/TeuEg6W3cbbcMSh6j4ITvrjv3Oi8n27VR+IPw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.2.17",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.17.tgz",
- "integrity": "sha512-VFge37us5LNPatB4F7iYeuGs9Dprqe4ZkW7lOEJM91r+Wf8EIdViWHLpIwfdDXinvCdLl6b4VyLpEBwpkctJHA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.2.17",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.17.tgz",
- "integrity": "sha512-aaQlpxUVb9RZ41adlTYVQ3xvYEfBPUC8+6rDgmQ/0l7SvK8S1YNJzPmDPX6a4t0jLtIoNk7j+nroS/pB4nx7vQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "14.2.17",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.17.tgz",
- "integrity": "sha512-HSyEiFaEY3ay5iATDqEup5WAfrhMATNJm8dYx3ZxL+e9eKv10XKZCwtZByDoLST7CyBmyDz+OFJL1wigyXeaoA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.2.17",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.17.tgz",
- "integrity": "sha512-h5qM9Btqv87eYH8ArrnLoAHLyi79oPTP2vlGNSg4CDvUiXgi7l0+5KuEGp5pJoMhjuv9ChRdm7mRlUUACeBt4w==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.2.17",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.17.tgz",
- "integrity": "sha512-BD/G++GKSLexQjdyoEUgyo5nClU7er5rK0sE+HlEqnldJSm96CIr/+YOTT063LVTT/dUOeQsNgp5DXr86/K7/A==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@next/swc-win32-x64-msvc": {
"version": "14.2.17",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.17.tgz",
@@ -2094,36 +1973,6 @@
"node": ">=12.4.0"
}
},
- "node_modules/@npmcli/agent": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
- "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "agent-base": "^7.1.0",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.1",
- "lru-cache": "^10.0.1",
- "socks-proxy-agent": "^8.0.3"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
- "node_modules/@npmcli/fs": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
- "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "semver": "^7.3.5"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/@oclif/core": {
"version": "4.0.30",
"resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.30.tgz",
@@ -2164,303 +2013,75 @@
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/@oclif/plugin-help": {
- "version": "6.2.16",
- "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.16.tgz",
- "integrity": "sha512-1x/Bm0LebDouDOfsjkOz+6AXqY6gIZ6JmmU/KuF/GnUmowDvj5i3MFlP9uBTiN8UsOUeT9cdLwnc1kmitHWFTg==",
- "dev": true,
- "dependencies": {
- "@oclif/core": "^4"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@opentelemetry/api": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
- "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
- "devOptional": true,
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.26.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.26.0.tgz",
- "integrity": "sha512-U9PJlOswJPSgQVPI+XEuNLElyFWkb0hAiMg+DExD9V0St03X2lPHGMdxMY/LrVmoukuIpXJ12oyrOtEZ4uXFkw==",
- "dev": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@parcel/watcher": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz",
- "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==",
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "detect-libc": "^1.0.3",
- "is-glob": "^4.0.3",
- "micromatch": "^4.0.5",
- "node-addon-api": "^7.0.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "@parcel/watcher-android-arm64": "2.5.0",
- "@parcel/watcher-darwin-arm64": "2.5.0",
- "@parcel/watcher-darwin-x64": "2.5.0",
- "@parcel/watcher-freebsd-x64": "2.5.0",
- "@parcel/watcher-linux-arm-glibc": "2.5.0",
- "@parcel/watcher-linux-arm-musl": "2.5.0",
- "@parcel/watcher-linux-arm64-glibc": "2.5.0",
- "@parcel/watcher-linux-arm64-musl": "2.5.0",
- "@parcel/watcher-linux-x64-glibc": "2.5.0",
- "@parcel/watcher-linux-x64-musl": "2.5.0",
- "@parcel/watcher-win32-arm64": "2.5.0",
- "@parcel/watcher-win32-ia32": "2.5.0",
- "@parcel/watcher-win32-x64": "2.5.0"
- }
- },
- "node_modules/@parcel/watcher-android-arm64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz",
- "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-arm64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz",
- "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-x64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz",
- "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-freebsd-x64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz",
- "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-glibc": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz",
- "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-musl": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz",
- "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-glibc": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz",
- "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-musl": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz",
- "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-glibc": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz",
- "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
+ "node": ">=10"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/@parcel/watcher-linux-x64-musl": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz",
- "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
+ "node_modules/@oclif/plugin-help": {
+ "version": "6.2.16",
+ "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.16.tgz",
+ "integrity": "sha512-1x/Bm0LebDouDOfsjkOz+6AXqY6gIZ6JmmU/KuF/GnUmowDvj5i3MFlP9uBTiN8UsOUeT9cdLwnc1kmitHWFTg==",
+ "dev": true,
+ "dependencies": {
+ "@oclif/core": "^4"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/@parcel/watcher-win32-arm64": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz",
- "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
+ "node_modules/@opentelemetry/api": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
+ "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
+ "devOptional": true,
"engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@opentelemetry/semantic-conventions": {
+ "version": "1.26.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.26.0.tgz",
+ "integrity": "sha512-U9PJlOswJPSgQVPI+XEuNLElyFWkb0hAiMg+DExD9V0St03X2lPHGMdxMY/LrVmoukuIpXJ12oyrOtEZ4uXFkw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
}
},
- "node_modules/@parcel/watcher-win32-ia32": {
+ "node_modules/@parcel/watcher": {
"version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz",
- "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==",
- "cpu": [
- "ia32"
- ],
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz",
+ "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==",
+ "hasInstallScript": true,
"optional": true,
- "os": [
- "win32"
- ],
+ "dependencies": {
+ "detect-libc": "^1.0.3",
+ "is-glob": "^4.0.3",
+ "micromatch": "^4.0.5",
+ "node-addon-api": "^7.0.0"
+ },
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.5.0",
+ "@parcel/watcher-darwin-arm64": "2.5.0",
+ "@parcel/watcher-darwin-x64": "2.5.0",
+ "@parcel/watcher-freebsd-x64": "2.5.0",
+ "@parcel/watcher-linux-arm-glibc": "2.5.0",
+ "@parcel/watcher-linux-arm-musl": "2.5.0",
+ "@parcel/watcher-linux-arm64-glibc": "2.5.0",
+ "@parcel/watcher-linux-arm64-musl": "2.5.0",
+ "@parcel/watcher-linux-x64-glibc": "2.5.0",
+ "@parcel/watcher-linux-x64-musl": "2.5.0",
+ "@parcel/watcher-win32-arm64": "2.5.0",
+ "@parcel/watcher-win32-ia32": "2.5.0",
+ "@parcel/watcher-win32-x64": "2.5.0"
}
},
"node_modules/@parcel/watcher-win32-x64": {
@@ -2662,6 +2283,7 @@
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
"integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
+ "dev": true,
"dependencies": {
"@hapi/hoek": "^9.0.0"
}
@@ -2669,12 +2291,14 @@
"node_modules/@sideway/formula": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
- "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg=="
+ "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
+ "dev": true
},
"node_modules/@sideway/pinpoint": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
- "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
+ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
+ "dev": true
},
"node_modules/@sindresorhus/is": {
"version": "4.6.0",
@@ -3359,16 +2983,6 @@
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
},
- "node_modules/abbrev": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
- "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
@@ -3426,30 +3040,6 @@
"node": ">= 14"
}
},
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/aggregate-error/node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/ajv": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
@@ -5213,30 +4803,6 @@
"node": ">= 0.8"
}
},
- "node_modules/cacache": {
- "version": "18.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
- "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "@npmcli/fs": "^3.1.0",
- "fs-minipass": "^3.0.0",
- "glob": "^10.2.2",
- "lru-cache": "^10.0.1",
- "minipass": "^7.0.3",
- "minipass-collect": "^2.0.1",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "p-map": "^4.0.0",
- "ssri": "^10.0.0",
- "tar": "^6.1.11",
- "unique-filename": "^3.0.0"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
"node_modules/call-bind": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
@@ -6673,6 +6239,7 @@
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"dev": true,
"optional": true,
+ "peer": true,
"dependencies": {
"iconv-lite": "^0.6.2"
}
@@ -6683,6 +6250,7 @@
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"dev": true,
"optional": true,
+ "peer": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -6722,16 +6290,6 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/environment": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
@@ -6744,13 +6302,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/err-code": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
- "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
- "dev": true,
- "optional": true
- },
"node_modules/es-abstract": {
"version": "1.23.4",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.4.tgz",
@@ -7635,13 +7186,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/exponential-backoff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
- "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==",
- "dev": true,
- "optional": true
- },
"node_modules/express": {
"version": "4.21.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
@@ -8400,39 +7944,12 @@
"node": ">=12"
}
},
- "node_modules/fs-minipass": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
- "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "minipass": "^7.0.3"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"peer": true
},
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -9313,13 +8830,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "dev": true,
- "optional": true
- },
"node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
@@ -9595,17 +9105,6 @@
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true
},
- "node_modules/install-artifact-from-github": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.3.5.tgz",
- "integrity": "sha512-gZHC7f/cJgXz7MXlHFBxPVMsvIbev1OQN1uKQYKVJDydGNm9oYf9JstbU4Atnh/eSvk41WtEovoRm+8IF686xg==",
- "dev": true,
- "optional": true,
- "bin": {
- "install-from-cache": "bin/install-from-cache.js",
- "save-to-github-cache": "bin/save-to-github-cache.js"
- }
- },
"node_modules/internal-slot": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
@@ -9980,13 +9479,6 @@
"node": ">=8"
}
},
- "node_modules/is-lambda": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
- "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
- "dev": true,
- "optional": true
- },
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -10412,6 +9904,7 @@
"version": "17.13.3",
"resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz",
"integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==",
+ "dev": true,
"dependencies": {
"@hapi/hoek": "^9.3.0",
"@hapi/topo": "^5.1.0",
@@ -11026,30 +10519,6 @@
"semver": "bin/semver.js"
}
},
- "node_modules/make-fetch-happen": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
- "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "@npmcli/agent": "^2.0.0",
- "cacache": "^18.0.0",
- "http-cache-semantics": "^4.1.1",
- "is-lambda": "^1.0.1",
- "minipass": "^7.0.2",
- "minipass-fetch": "^3.0.0",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^0.6.3",
- "proc-log": "^4.2.0",
- "promise-retry": "^2.0.1",
- "ssri": "^10.0.0"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
"node_modules/markdown-table": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
@@ -12016,138 +11485,29 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/minipass-collect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
- "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "minipass": "^7.0.3"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/minipass-fetch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
- "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "minipass": "^7.0.3",
- "minipass-sized": "^1.0.3",
- "minizlib": "^2.1.2"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "encoding": "^0.1.13"
- }
- },
- "node_modules/minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-flush/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-pipeline/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "yallist": "^4.0.0"
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/minipass-sized": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
- "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/minipass-sized/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.17"
}
},
"node_modules/minizlib": {
@@ -12273,13 +11633,6 @@
"thenify-all": "^1.0.0"
}
},
- "node_modules/nan": {
- "version": "2.22.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz",
- "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==",
- "dev": true,
- "optional": true
- },
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
@@ -12449,78 +11802,11 @@
}
}
},
- "node_modules/node-gyp": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz",
- "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "env-paths": "^2.2.0",
- "exponential-backoff": "^3.1.1",
- "glob": "^10.3.10",
- "graceful-fs": "^4.2.6",
- "make-fetch-happen": "^13.0.0",
- "nopt": "^7.0.0",
- "proc-log": "^4.1.0",
- "semver": "^7.3.5",
- "tar": "^6.2.1",
- "which": "^4.0.0"
- },
- "bin": {
- "node-gyp": "bin/node-gyp.js"
- },
- "engines": {
- "node": "^16.14.0 || >=18.0.0"
- }
- },
- "node_modules/node-gyp/node_modules/isexe": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
- "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/node-gyp/node_modules/which": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
- "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "isexe": "^3.1.1"
- },
- "bin": {
- "node-which": "bin/which.js"
- },
- "engines": {
- "node": "^16.13.0 || >=18.0.0"
- }
- },
"node_modules/node-releases": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g=="
},
- "node_modules/nopt": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
- "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "abbrev": "^2.0.0"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -12836,22 +12122,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/p-throttle": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/p-throttle/-/p-throttle-5.1.0.tgz",
@@ -13294,16 +12564,6 @@
"node": ">= 0.6"
}
},
- "node_modules/proc-log": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
- "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -13334,30 +12594,6 @@
"integrity": "sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA==",
"dev": true
},
- "node_modules/promise-retry": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
- "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "err-code": "^2.0.2",
- "retry": "^0.12.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/promise-retry/node_modules/retry": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
- "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -13660,19 +12896,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/re2": {
- "version": "1.21.4",
- "resolved": "https://registry.npmjs.org/re2/-/re2-1.21.4.tgz",
- "integrity": "sha512-MVIfXWJmsP28mRsSt8HeL750ifb8H5+oF2UDIxGaiJCr8fkMqhLZ7kcX9ADRk2dC8qeGKedB7UVYRfBVpEiLfA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "install-artifact-from-github": "^1.3.5",
- "nan": "^2.20.0",
- "node-gyp": "^10.2.0"
- }
- },
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -15006,19 +14229,6 @@
"sql-formatter": "bin/sql-formatter-cli.cjs"
}
},
- "node_modules/ssri": {
- "version": "10.0.6",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
- "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "minipass": "^7.0.3"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
@@ -16201,32 +15411,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/unique-filename": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
- "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "unique-slug": "^4.0.0"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/unique-slug": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
- "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "imurmurhash": "^0.1.4"
- },
- "engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
- }
- },
"node_modules/unique-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
@@ -17042,6 +16226,126 @@
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
+ },
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "14.2.17",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.17.tgz",
+ "integrity": "sha512-WiOf5nElPknrhRMTipXYTJcUz7+8IAjOYw3vXzj3BYRcVY0hRHKWgTgQ5439EvzQyHEko77XK+yN9x9OJ0oOog==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "14.2.17",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.17.tgz",
+ "integrity": "sha512-29y425wYnL17cvtxrDQWC3CkXe/oRrdt8ie61S03VrpwpPRI0XsnTvtKO06XCisK4alaMnZlf8riwZIbJTaSHQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "14.2.17",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.17.tgz",
+ "integrity": "sha512-SSHLZls3ZwNEHsc+d0ynKS+7Af0Nr8+KTUBAy9pm6xz9SHkJ/TeuEg6W3cbbcMSh6j4ITvrjv3Oi8n27VR+IPw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "14.2.17",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.17.tgz",
+ "integrity": "sha512-VFge37us5LNPatB4F7iYeuGs9Dprqe4ZkW7lOEJM91r+Wf8EIdViWHLpIwfdDXinvCdLl6b4VyLpEBwpkctJHA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "14.2.17",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.17.tgz",
+ "integrity": "sha512-aaQlpxUVb9RZ41adlTYVQ3xvYEfBPUC8+6rDgmQ/0l7SvK8S1YNJzPmDPX6a4t0jLtIoNk7j+nroS/pB4nx7vQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "14.2.17",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.17.tgz",
+ "integrity": "sha512-HSyEiFaEY3ay5iATDqEup5WAfrhMATNJm8dYx3ZxL+e9eKv10XKZCwtZByDoLST7CyBmyDz+OFJL1wigyXeaoA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "14.2.17",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.17.tgz",
+ "integrity": "sha512-h5qM9Btqv87eYH8ArrnLoAHLyi79oPTP2vlGNSg4CDvUiXgi7l0+5KuEGp5pJoMhjuv9ChRdm7mRlUUACeBt4w==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-ia32-msvc": {
+ "version": "14.2.17",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.17.tgz",
+ "integrity": "sha512-BD/G++GKSLexQjdyoEUgyo5nClU7er5rK0sE+HlEqnldJSm96CIr/+YOTT063LVTT/dUOeQsNgp5DXr86/K7/A==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
}
}
}
diff --git a/package.json b/package.json
index ca25d542..f8e68ac3 100644
--- a/package.json
+++ b/package.json
@@ -41,7 +41,7 @@
"@codemirror/lang-xml": "^6.0.2",
"@codemirror/lang-yaml": "^6.0.0",
"@docsearch/react": "^3.5.2",
- "@mockoon/cloud": "^8.3.1",
+ "@mockoon/cloud": "file:../mockoon/packages/cloud",
"@tanstack/react-query": "^5.8.3",
"@uiw/codemirror-theme-nord": "^4.21.21",
"@uiw/react-codemirror": "^4.21.21",
diff --git a/pages/account/info.tsx b/pages/account/info.tsx
index 35cf4da4..0fe874a3 100644
--- a/pages/account/info.tsx
+++ b/pages/account/info.tsx
@@ -50,7 +50,7 @@ const AccountInfo: FunctionComponent = function () {
useEffect(() => {
if (userData) {
- reset({ displayName: userData?.['displayName'] });
+ reset({ displayName: userData?.displayName });
}
}, [userData]);
diff --git a/pages/faq.tsx b/pages/faq.tsx
index 182a7cc3..01c86811 100644
--- a/pages/faq.tsx
+++ b/pages/faq.tsx
@@ -362,27 +362,19 @@ const Faq: FunctionComponent = function () {
files necessary to run the application.
- Mockoon's storage
folder contains mainly
- two files: a settings.json
file with your
- application settings and preferences and an{' '}
- environments.json
file containing all your
- API mocks data. Starting with{' '}
-
- v1.16.0
-
- , your mock APIs are stored in separated files and can
- reside anywhere on your hard drive. After the migration
- to v1.16.0, the storage
folder will contain
- as many environment-x.json
files as you had
- mock APIs created in Mockoon. You can then move them
- elsewhere.
+ Mockoon's storage
folder contains a{' '}
+ settings.json
file with your{' '}
+
+ application settings and preferences
+ {' '}
+ and multiple{' '}
+
+ environment files
+ {' '}
+ containing your API mocks data.
-
+
Learn more about Mockoon's data storage
@@ -404,19 +396,22 @@ const Faq: FunctionComponent = function () {